《PHP教程:微信支付開發訂單查詢實例》要點:
本文介紹了PHP教程:微信支付開發訂單查詢實例,希望對您有用。如果有疑問,可以聯系我們。
因為某一方技術的原因,可能導致商戶在預期時間內都收不到最終支付通知,此時商戶可以通過該API來查詢訂單的詳細支付狀態.PHP學習
訂單查詢API的URL為:PHP學習
https://api.weixin.qq.com/pay/orderquery?access_token=xxxxxx
URL中的參數只包含目前微信公眾平臺憑證access_token,而訂單查詢的真正數據是放在PostData中的,格式如下:PHP學習
{
??? "appid" : "wwwwb4f85f3a797777",
??? "package" : "out_trade_no=11122&partner=1900090055&sign=4e8d0df3da0c3d0df38f",
??? "timestamp" : "1369745073",
??? "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c",
??? "sign_method" : "sha1"
}PHP學習
上述內容參數說明如表所示.PHP學習
參數 | 說明 |
---|---|
appid | 公眾平臺賬戶的AppId; |
package | 查詢訂單的關鍵信息數據,包含第三方唯一訂單號out_trade_no、財付通商戶身П曄partner(即前文所述的partnerid)、簽名sign,其中sign是對參數字典序排序并使用&聯合起來,最后加上&key=partnerkey(唯一分配),進行md5運算,再轉成全大寫,最終得到sign |
timestamp | linux時間戳; |
app_signature | 根據支付簽名(paySign)生成方法中所講的簽名方式生成的,參加簽名字段為:appid、appkey、package、timestamp; |
sign_method | 簽名方法(不計入簽名生成); |
?二、實現細節PHP學習
1. 獲得access tokenPHP學習
這個很容易,參考微信公眾平臺開發(26) ACCESS TOKENPHP學習
代碼如下:PHP學習
$appid = "wx0000000000000000"; $appsecret = "e76050733c695748537fc4d4c21d0e2c"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; $result = https_request($url); $jsoninfo = json_decode($result, true); $access_token = $jsoninfo["access_token"];
2. 參數生成PHP學習
appid: 直接賦值PHP學習
timestamp:程序直接獲取PHP學習
$timestamp = time();
?sign_method:這里為sha1PHP學習
?難點1:package 值的獲得PHP學習
?先要獲得signPHP學習
?sign是out_trade_no,partner,key(partnerkey)三項信息的字典序排序,再MD5運算,再轉為大寫
PHP學習
$sign= strtoupper(md5("out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&key=ebf5cf381de2d716d432bfda34fa9e57"));
?package 是查詢訂單的關鍵信息數據,包含第三方唯一訂單號 out_trade_no、財付通商戶身П曄 partner(即前文所述的 partnerid) 、簽名 sign
PHP學習
$package = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".$sign;
難點2:獲得app_signaturePHP學習
app_signature 依然是根據支付簽名(paySign)生成方法中所講的簽名方式生成的,參加簽名字段為:appid、appkey、package、timestamp;PHP學習
$obj['appid'] = "wx0000000000000000"; $obj['appkey'] = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k"; $obj['package'] = $package; $obj['timestamp'] = $timestamp; $WxPayHelper->get_biz_sign($obj);
這樣各項參數都獲得了PHP學習
3.提交查詢PHP學習
$jsonmenu = ' { "appid" : "wx0000000000000000", "package" : "'.$package.'", "timestamp" : "'.$timestamp.'", "app_signature" : "'.$app_signature.'", "sign_method" : "sha1" } '; $url = "https://api.weixin.qq.com/pay/orderquery?access_token=".$access_token; $result = https_request($url, $jsonmenu); var_dump($result);
完整代碼如下所示:PHP學習
include_once("WxPayHelper.php"); //1. 獲取access token $appid = "wx0000000000000000"; $appsecret = "e76050733ce76050733ce76050733cdd"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; $result = https_request($url); $jsoninfo = json_decode($result, true); $access_token = $jsoninfo["access_token"]; //2.準備參數 $timestamp = time(); $sign= strtoupper(md5("out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&key=asdfasdfasdfasdfasdfasdfasdfasdf")); $package = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".$sign; //2.1構造最麻煩的app_signature $obj['appid'] = "wx0000000000000000"; $obj['appkey'] = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k"; $obj['package'] = $package; $obj['timestamp'] = $timestamp; $WxPayHelper = new WxPayHelper(); //get_biz_sign函數受保護,需要先取消一下,否則會報錯 $app_signature = $WxPayHelper->get_biz_sign($obj); //3. 將構造的json提交給微信服務器,查詢 $jsonmenu = ' { "appid" : "wx0000000000000000", "package" : "'.$package.'", "timestamp" : "'.$timestamp.'", "app_signature" : "'.$app_signature.'", "sign_method" : "sha1" } '; $url = "https://api.weixin.qq.com/pay/orderquery?access_token=".$access_token; $result = https_request($url, $jsonmenu); var_dump($result); function https_request($url, $data = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; }
三、訂單結果PHP學習
上述程序執行后,獲得訂單結果如下PHP學習
{ "errcode": 0, "errmsg": "ok", "order_info": { "ret_code": 0, "ret_msg": "", "input_charset": "GBK", "trade_state": "0", "trade_mode": "1", "partner": "1234567890", "bank_type": "CMB_FP", "bank_billno": "201405273540085997", "total_fee": "1", "fee_type": "1", "transaction_id": "1218614901201405273313473135", "out_trade_no": "JfuKdiBig4zZnE4n", "is_split": "false", "is_refund": "false", "attach": "", "time_end": "20140527194139", "transport_fee": "0", "product_fee": "1", "discount": "0", "rmb_total_fee": "" } }
各個字段的含義如表所示PHP學習
參數 | 說明 |
---|---|
ret_code | 查詢結果狀態碼,0表明成功,其他表明錯誤; |
ret_msg | 查詢結果出錯信息; |
input_charset | 返回信息中的編碼方式; |
trade_state | 訂單狀態,0為成功,其他為失??; |
trade_mode | 交易模式,1為即時到帳,其他保留; |
partner | 財付通商戶號,即前文的partnerid; |
bank_type | 銀行類型; |
bank_billno | 銀行訂單號; |
total_fee | 總金額,單位為分; |
fee_type | 幣種,1為人民幣; |
transaction_id | 財付通訂單號; |
out_trade_no | 第三方訂單號; |
is_split | 是否分賬,false為無分賬,true為有分賬; |
is_refund | 是否退款,false為無退款,ture為退款; |
attach | 商戶數據包,即生成訂單package時商戶填入的attach; |
time_end | 支付完成時間; |
transport_fee | 物流費用,單位為分; |
product_fee | 物品費用,單位為分; |
discount | 折扣價格,單位為分; |
rmb_total_fee | 換算成人民幣之后的總金額,單位為分,一般看total_fee即可. |
如果程序有誤,會在errcode和errmsg描述出來.PHP學習
以上就是對微信支付開發中查詢功能的資料整理,希望能幫到微信開發支付的朋友.PHP學習
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5698.html