Home  >  Article  >  WeChat Applet  >  WeChat payment development order inquiry

WeChat payment development order inquiry

高洛峰
高洛峰Original
2017-02-25 17:30:273027browse

1. Order Query

Due to technical reasons on one side, the merchant may not receive the final payment notification within the expected time. At this time, the merchant can query the detailed payment status of the order through this API.

The URL of the order query API is:

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

The parameters in the URL only contain At present, the WeChat public platform credential access_token, and the real data of order query is placed in PostData, the format is as follows:

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

The above content parameter description is shown in the table .

AppId of the public platform account; Query the key information data of the order, including the third-party unique order number out_trade_no, Tenpay merchant ID partner (the partnerid mentioned above), Signature sign, where sign is to sort the parameters in dictionary order and combine them with &, and finally add &key=partnerkey (unique allocation), perform md5 operation, and then convert it to all uppercase, finally getting signlinux timestamp;Generated according to the signature method mentioned in the payment signature (paySign) generation method, the participating signature fields are: appid, appkey, package, timestamp; Signature method (not counted in signature generation);

Parameter Description

appid

package

timestamp

app_signature

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即可。

If there is an error in the program, it will be described in errcode and errmsg.

For more articles related to WeChat payment development order inquiry, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn