微信並未提供一個統一的查詢介面。對應每種查詢均需要不同的api。為了便於大家在專案中使用,忽略細節。對以上三種進行了封裝。通過工廠的方式降低呼叫成本。
$wxconfig = [
`app_id` => `wxxxx`, // 公眾賬號ID
`mch_id` => `xxxx`,// 商戶id
`md5_key` => `xxxxxx`,// md5 祕鑰
`notify_url` => `http://test.helei.com/pay-notify.html`,
`time_expire` => `14`,
// 涉及資金流動時,需要提供該檔案
`cert_path` => dirname(__FILE__) . DIRECTORY_SEPARATOR . `wx` . DIRECTORY_SEPARATOR . `apiclient_cert.pem`,
`key_path` => dirname(__FILE__) . DIRECTORY_SEPARATOR . `wx` . DIRECTORY_SEPARATOR . `apiclient_key.pem`,
];
use PaymentQueryContext;
use PaymentCommonPayException;
use PaymentConfig;
$query = new QueryContext();
// 通過交易號查詢, 推薦
$data = [
//`order_no` => `2016011402433464`,// 商戶訂單號
`transaction_id` => `4007572001201607098672633287`,// 微信訂單查詢 微信退款單查詢
//`trans_no` => `1007570439201601142692427764`, // 微信批量轉款查詢
];
try {
// 微信訂單查詢
$query->initQuery(Config::WEIXIN, $wxconfig);
// 微信退款訂單狀態查詢
//$query->initQuery(Config::WEIXIN_REFUND, $wxconfig);
// 微信企業付款查詢
//$query->initQuery(Config::WEIXIN_TRANS, $wxconfig);
$ret = $query->query($data);
} catch (PayException $e) {
echo $e->errorMessage();exit;
}
訂單查詢非常簡單。對於微信支付訂單以及退款訂單可以根據微信支付的流水號進行查詢。對於微信支付的訂單還可根據商戶的訂單號進行查詢。但是強烈建議通過微信自身的流水號進行查詢。
對於批量轉款查詢。需要提供再轉款時,生產的轉款單號(此單號是由商家自行生產的)。這裡我也蠻迷惑,為什麼不提供使用微信返回的轉款流水號進行查詢呢?
接下來對返回值進行解釋,以下結構為一個頂層結構
引數 | 引數名 | 引數說明 | 是否必須 |
---|---|---|---|
is_success | 成功標識 | 請求是否成功,T:成功,F:失敗 | 是 |
error | 錯誤提示 | 只有is_success=F時才返回 | 否 |
response | 響應資料 | 查詢成功後返回的資料,一個陣列,is_success=T時返回 | 否 |
微信支付訂單返回值
支付訂單中關於 response
中包含欄位的描述
引數 | 引數名 | 引數說明 | 是否必須 |
---|---|---|---|
amount | 交易金額 | 本次訂單總金額,單位為元,最多兩位小數 | 是 |
channel | 支付渠道 | 本處取值: wx | 是 |
order_no | 商戶網站唯一訂單號 | 商戶生成的訂單號,必須確保在系統中唯一 | 是 |
buyer_id | 使用者標識 | 使用者在商戶appid下的唯一標識 | 是 |
trade_state | 交易狀態 | 支付成功與否,可取值:success not_pay | 是 |
transaction_id | 微信交易號 | 微信系統中的交易流水號,可用於查詢訂單狀態 | 是 |
time_end | 交易付款時間 | 格式為2016-07-28 16:01:01 | 是 |
微信退款訂單
退款有以下兩點需要注意
-
交易時間超過一年的訂單無法提交退款;
-
微信支付退款支援單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號和設定不同的退款單號。一筆退款失敗後重新提交,要採用原來的退款單號。總退款金額不能超過使用者實際支付金額。
由於一筆支付訂單,可能存在多筆退單的情況,因此退款記錄將返回一個陣列
退款訂單中關於 response
中包含欄位的描述
引數 | 引數名 | 引數說明 | 是否必須 |
---|---|---|---|
amount | 交易金額 | 本次訂單總金額,單位為元,最多兩位小數 | 是 |
order_no | 商戶網站唯一訂單號 | 商戶生成的訂單號,必須確保在系統中唯一 | 是 |
transaction_id | 微信交易號 | 微信系統中的交易流水號,可用於查詢訂單狀態 | 是 |
refund_data | 退款資料 | 其結構是一個陣列,每一個元素包含一個退單資訊 | 是 |
refund_data
中包含欄位的描述
引數 | 引數名 | 引數說明 | 是否必須 |
---|---|---|---|
refund_no | 商戶退款單號 | 商戶退款單號 | 是 |
refund_id | 微信退款單號 | 微信退款單號 | 是 |
refund_channel | 退款渠道 | ORIGINAL—原路退款 BALANCE—退回到餘額 | 是 |
refund_fee | 退款金額 | 退款總金額,單位為元,可以做部分退款 | 是 |
refund_status | 退款狀態 | SUCCESS—退款成功 FAIL—退款失敗 PROCESSING—退款處理中 NOTSURE—未確定,需要商戶原退款單號重新發起 CHANGE—轉入代發 | 是 |
recv_accout | 退款入賬賬戶 | 退款入賬賬戶 | 是 |
轉款訂單查詢結果
`trans_id` => $data[`detail_id`],// 付款單號
`trans_status` => $data[`status`],// 轉賬狀態
`reason` => $data[`reason`],// 失敗原因
`buyer_id` => $data[`openid`],
`trans_name` => $data[`transfer_name`],// 收款使用者姓名
`trans_time` => $data[`transfer_time`],
`desc` => $data[`desc`],// 付款描述
引數 | 引數名 | 引數說明 | 是否必須 |
---|---|---|---|
amount | 付款金額 | 付款金額 單位元 | 是 |
order_no | 商戶單號 | 商戶使用查詢API填寫的單號的原路返回. | 是 |
trans_id | 付款單號 | 呼叫企業付款API時,微信系統內部產生的單號 | 是 |
trans_status | 轉賬狀態 | SUCCESS:轉賬成功 FAILED:轉賬失敗 PROCESSING:處理中 | 是 |
reason | 失敗原因 | 如果失敗則有失敗原因 | 否 |
buyer_id | 收款使用者openid | 收款使用者openid | 是 |
trans_name | 收款使用者姓名 | 真實姓名,如果是需要實名驗證,則會返回 | 否 |
trans_time | 轉賬時間 | 發起轉賬的時間 格式:2015-04-21 20:00:00 | 是 |
desc | 付款描述 | 付款時候的描述 | 是 |