本文介紹微信支付中出貨通知功能的實作。
一、出貨通知
為了更好追蹤訂單的情況,需要第三方在收到最終支付通知之後,呼叫出貨通知API告知微信後台該訂單的出貨狀態。
出貨時間限制:虛擬、服務類別24小時內,實體類別72小時內。
請在收到付款通知後,準時出貨,並使用出貨通知介面將相關資訊同步到微信後台。若平台在規定時間內未收到,將視為出貨超時處理。
出貨通知API的URL為:
https://api.weixin.qq.com/pay/delivernotify?access_token=xxxxxx
URL中的參數只包含目前微信公眾平台憑證access_token,而出貨通知的真正的資料是放在PostData中的,格式如下:
{ "appid" : "wwwwb4f85f3a797777", "openid" : "oX99MDgNcgwnz3zFN3DNmo8uwa-w", "transid" : "111112222233333", "out_trade_no" : "555666uuu", "deliver_timestamp" : "1369745073", "deliver_status" : "1", "deliver_msg" : "ok", "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c", "sign_method" : "sha1" }
上述內容參數說明如表6-12所示。
參數 |
說明 |
appid |
#公眾平台帳號的AppId; |
openid |
販買用戶的OpenId,這個已經放在最終支付結果通知的PostData裡了; |
transid |
交易單號; |
out_trade_no | 第三方訂單號碼; |
deliver_timestamp |
出貨時間戳,這裡指的是Linux時間戳記; |
deliver_status |
出貨狀態,1顯示成功,0顯示失敗,失敗時需要在deliver_msg填上失敗原因; |
deliver_msg |
出貨狀態資訊,失敗時可以填入UTF8編碼的錯諢提示訊息,例如「該商品已退款」; |
#app_signature |
##根據支付簽名(paySign)產生方法中所講的簽章方式產生的,參加簽章欄位為:appid、appkey、openid、transid、out_trade_no、deliver_timestamp、deliver_status、deliver_msg; |
##sign_method | 簽名方法(不計入簽名生成); |
#表6-12 出貨通知參數說明
微信公眾平台在校驗ok之後,會回傳資料表示是否通知成功,例如:{"errcode":0,"errmsg":"ok"}如果有異常,會在errcode和errmsg描述出來,如果成功errcode就為0。
二、程式實作
程式中的某些參數來自本部落格前面的微信支付開發資料。讀者請參考運行
<?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.准备参数 $deliver_timestamp = time(); //2.1构造最麻烦的app_signature $obj['appid'] = $appid; $obj['appkey'] = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k"; $obj['openid'] = "o0pk9uIVnlY-fJkzFKEbQ6LJ4cFc"; $obj['transid'] = "1218614901201405273313473135"; $obj['out_trade_no'] = "JfuKdiBig4zZnE4n"; $obj['deliver_timestamp'] = $deliver_timestamp; $obj['deliver_status'] = "1"; $obj['deliver_msg'] = "ok"; $WxPayHelper = new WxPayHelper(); //get_biz_sign函数受保护,需要先取消一下,否则会报错 $app_signature = $WxPayHelper->get_biz_sign($obj); //3. 将构造的json提交给微信服务器,查询 $jsonmenu = ' { "appid" : "'.$obj['appid'].'", "openid" : "'.$obj['openid'].'", "transid" : "'.$obj['transid'].'", "out_trade_no" : "'.$obj['out_trade_no'].'", "deliver_timestamp" : "'.$deliver_timestamp.'", "deliver_status" : "'.$obj['deliver_status'].'", "deliver_msg" : "'.$obj['deliver_msg'].'", "app_signature" : "'.$app_signature.'", "sign_method" : "sha1" }'; $url = "https://api.weixin.qq.com/pay/delivernotify?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; }
string(27) "{"errcode":0,"errmsg":"ok"}"######## ########### 更多微信支付開發出貨通知 相關文章請追蹤PHP中文網! ###

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。