この記事では、WeChat決済における配送通知機能の実装について紹介します。
1. 配送通知
注文ステータスをより適切に追跡するには、最終支払い通知を受け取った後、サードパーティが配送通知 API を呼び出して注文の配送ステータスを WeChat バックエンドに通知する必要があります。
配達時間制限: 仮想製品とサービス製品の場合は 24 時間以内、物理的な製品の場合は 72 時間以内。
支払い通知を受け取ったら時間通りに商品を配達し、配達通知インターフェースを使用して関連情報を WeChat バックエンドに同期してください。指定時間内にプラットフォームが受け取らない場合は時間外配達として扱われます。
配信通知 API の URL は次のとおりです:
https://api.weixin.qq.com/pay/delivernotify?access_token=xxxxxx
URL のパラメーターには、現在の WeChat パブリック プラットフォーム認証情報 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 に配置されています |
トランザクション注文番号 | | out_trade_no
; | deliver_timestamp |
配信タイムスタンプ、ここではLinuxタイムスタンプを指します。 | deliver_status |
配信ステータスを指します。1は成功を示し、0は失敗を示します。delivery_msに入力する必要があります。いつ失敗した場合は、 | deliver_msg |
の配送ステータス情報をアップロードします。「この商品は返金されました」など。 app_signature | 支払い署名 (paySign) 生成メソッドで説明されている署名メソッドに従って生成されます。参加する署名フィールドは次のとおりです: appid、appkey、openid、out_trade_no、deliver_timestamp、deliver_status、deliver_msg。 sign_method |
Signature メソッド (署名生成には含まれません); | | 表 6-12 配送通知パラメータの説明
検証後、WeChat パブリック プラットフォームは、通知が行われたかどうかを示すデータを返します。例: {"errcode":0,"errmsg":"ok"} 例外がある場合は、errcode と errmsg に記述されます。成功した場合、errcode は 0 になります。 | 2. プログラムの実装 プログラム内の一部のパラメーターは、このブログで前述した WeChat 決済開発データから取得しています。読者の皆様は、実行 |
<?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"}"
ログイン後にコピー
を参照してください。WeChat決済の開発と出荷通知関連記事の詳細については、PHP中国語ウェブサイトに注目してください。