Maison > Applet WeChat > Développement WeChat > le corps du texte

Demande de commande de développement de paiement WeChat

高洛峰
Libérer: 2017-02-25 17:30:27
original
3022 Les gens l'ont consulté

1. Requête de commande

Pour des raisons techniques d'une part, le commerçant peut ne pas recevoir la notification de paiement finale dans le délai prévu. À ce moment, le commerçant peut demander l'état de paiement détaillé de la commande. via cette API.

L'URL de l'API de requête de commande est :

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

Les paramètres dans le L'URL contient uniquement À l'heure actuelle, les informations d'identification de la plate-forme publique WeChat access_token et les données réelles de la requête de commande sont placées dans PostData, le format est le suivant :

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

Les paramètres de contenu ci-dessus sont expliqués dans le tableau présenté.

horodatage

参数

说明

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

签名方法(不计入签名生成);

Paramètres
Description

appid

AppId du compte de plateforme publique;

package

Interrogez les informations clés de la commande, y compris le numéro de commande unique du tiers out_trade_no, le partenaire d'identification du commerçant Tenpay (l'identifiant du partenaire mentionné ci-dessus) et le signe de signature, où signe est la commande du dictionnaire des paramètres. Et utilisez & pour combiner, ajoutez enfin &key=partnerkey (allocation unique), effectuez l'opération md5, puis convertissez en majuscules, obtenez enfin le signe

horodatage Linux ;

app_signature

Générés selon la méthode de signature mentionnée dans la méthode de génération de signature de paiement (paySign), les champs de signature participants sont : appid, appkey, package, timestamp ;

sign_method

Méthode de signature (non prise en compte dans la génération de signature) ;

 

二、实现细节

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"];
Copier après la connexion

2. 参数生成

appid: 直接赋值

timestamp:程序直接获取

$timestamp = time();
Copier après la connexion

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"));
Copier après la connexion

package 是查询订单的关键信息数据,包含第三方唯一订单号 out_trade_no、财付通商户身仹标识 partner(即前文所述的 partnerid) 、签名 sign

$package = "out_trade_no=JfuKdiBig4zZnE4n&partner=1234567890&sign=".$sign;
Copier après la connexion

难点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);
Copier après la connexion

这样各项参数都获得了

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);
Copier après la connexion

完整代码如下所示:

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;
}
Copier après la connexion

三、订单结果

上述程序执行后,获得订单结果如下

{
    "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": ""
    }
}
Copier après la connexion

各个字段的含义如表所示。

参数

说明

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

S'il y a une erreur dans le programme, elle sera décrite dans errcode et errmsg.

Pour plus d'articles liés à la demande de commande de développement de paiement WeChat, veuillez faire attention au site Web chinois PHP !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal