ホームページ > 記事 > WeChat アプレット > WeChat決済開発注文問い合わせ
1. 注文クエリ
技術的な理由により、販売者は予想時間内に最終的な支払い通知を受信できない場合があります。現時点では、販売者はこの API を通じて注文の詳細な支払いステータスを問い合わせることができます。
注文クエリ API の URL は次のとおりです:
https://api.weixin.qq.com/pay/orderquery?access_token=xxxxxx
URL のパラメーターには、現在の WeChat パブリック プラットフォームの資格情報 access_token のみが含まれます。注文クエリの実際の値 データは次の形式で PostData に配置されます:
{ "appid" : "wwwwb4f85f3a797777", "package" : "out_trade_no=11122&partner=1900090055&sign=4e8d0df3da0c3d0df38f", "timestamp" : "1369745073", "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c", "sign_method" : "sha1"}
上記のコンテンツパラメータの説明を表に示します。
パラメータ |
説明 |
||||||||||||||||||||||||||||||||||||||||||
appid |
パブリックプラットフォームアカウントのAppId。 |
||||||||||||||||||||||||||||||||||||||||||
パッケージ |
注文の鍵照会情報データ (サードパーティの一意の注文番号 out_trade_no、Tenpay 加盟店 ID パートナー (上記のパートナー ID)、署名サイン (sign はパラメーターの辞書) を含み、& を使用して結合され、最後に &key= パートナーキー (一意の割り当て) が追加されます) 、md5 操作を実行し、すべて大文字に変換し、最後に署名 |
||||||||||||||||||||||||||||||||||||||||||
タイムスタンプ |
linuxタイムスタンプ |
||||||||||||||||||||||||||||||||||||||||||
app_signature |
を支払い署名に従って取得します。記号 ) によって生成されました生成メソッドで説明されている署名メソッド。関与する署名フィールドは次のとおりです: appid、appkey、package、timestamp;
二、实现细节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": "" } } 各个字段的含义如表所示。
プログラムにエラーがあった場合は、errcodeとerrmsgに記述されます。 WeChat 決済開発注文照会に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。 |