国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

微信支付開發訂單查詢實例

2024-05-04 23:47:55
字體:
來源:轉載
供稿:網友

因為某一方技術的原因,可能導致商戶在預期時間內都收不到最終支付通知,此時商戶可以通過該API來查詢訂單的詳細支付狀態。

訂單查詢API的URL為:

https://api.weixin.qq.com/pay/orderquery?access_token=xxxxxx

URL中的參數只包含目前微信公眾平臺憑證access_token,而訂單查詢的真正數據是放在PostData中的,格式如下:

{
    "appid" : "wwwwb4f85f3a797777",
    "package" : "out_trade_no=11122&partner=1900090055&sign=4e8d0df3da0c3d0df38f",
    "timestamp" : "1369745073",
    "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c",
    "sign_method" : "sha1"
}

上述內容參數說明如表所示。

參數 說明
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 簽名方法(不計入簽名生成);

 二、實現細節

1. 獲得access token

這個很容易,參考微信公眾平臺開發(26) ACCESS TOKEN

代碼如下:

$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. 參數生成

appid: 直接賦值

timestamp:程序直接獲取

$timestamp = time();

 sign_method:這里為sha1

 難點1:package 值的獲得

 先要獲得sign

 sign是out_trade_no,partner,key(partnerkey)三項信息的字典序排序,再MD5運算,再轉為大寫

$sign= strtoupper(md5("out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&key=ebf5cf381de2d716d432bfda34fa9e57"));

 package 是查詢訂單的關鍵信息數據,包含第三方唯一訂單號 out_trade_no、財付通商戶身仹標識 partner(即前文所述的 partnerid) 、簽名 sign

$package = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".$sign;

難點2:獲得app_signature

app_signature 依然是根據支付簽名(paySign)生成方法中所講的簽名方式生成的,參加簽名字段為:appid、appkey、package、timestamp;

$obj['appid']   = "wx0000000000000000";$obj['appkey']   = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k";$obj['package']  = $package;$obj['timestamp']  = $timestamp;$WxPayHelper->get_biz_sign($obj);

這樣各項參數都獲得了

3.提交查詢

$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);

完整代碼如下所示:

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;}

三、訂單結果

上述程序執行后,獲得訂單結果如下

{ "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": "" }}

各個字段的含義如表所示

參數 說明
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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 红河县| 广安市| 田阳县| 灵石县| 绩溪县| 内乡县| 容城县| 固阳县| 彭水| 大冶市| 垫江县| 通化县| 交城县| 西乌珠穆沁旗| 贵南县| 太原市| 普兰店市| 阜南县| 新巴尔虎右旗| 丹阳市| 内丘县| 定安县| 来安县| 天柱县| 克东县| 温泉县| 万载县| 彭阳县| 马山县| 海淀区| 宜川县| 读书| 巴里| 临江市| 民丰县| 彭州市| 牟定县| 新宾| 荔浦县| 阳春市| 芦溪县|