Mots clés : Paiement WeChat Paiement WeChat v3 Paiement jsapi Paiement unifié Paiement natif prepay_id
Cet article présente le processus de mise en œuvre de jsapi sous le paiement WeChat
WeChat Le paiement est désormais divisé en version v2 et version v3. Ceux qui ont postulé avant le 10 septembre 2014 seront en version v2, et ceux qui ont postulé après cela seront en version v3. La version V3 de WeChat Pay n'a pas le paramètre paySignKey. Pour une introduction pertinente à la v2, veuillez vous référer à d'autres articles de Fangbei Studio. Cet article présente WeChat Pay v3.
JSAPI doit appeler l'interface d'autorisation de connexion pour obtenir l'Openid de l'utilisateur avant le paiement. Par conséquent, l’autorisation doit être effectuée une seule fois et la boîte de confirmation n’apparaîtra pas pour cette autorisation.
L'essence est de passer à
http://www.fangbei.org/wxpay/js_api_call.php
lorsque l'utilisateur accède à
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
pour obtenir le paramètre de code et obtenir l'autorisation access_token et openid en fonction du code
Pour le processus détaillé de sa mise en œuvre, veuillez vous référer à WeChat Public Platform Development (71) OAuth2.0 Web Authorization
Dans la démo de WeChat Pay, le code est
1 //使用jsapi接口 2 $jsApi = new JsApi_pub(); 3 4 //=========步骤1:网页授权获取用户openid============ 5 //通过code获得openid 6 if (!isset($_GET['code'])) 7 { 8 //触发微信返回code码 9 $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);10 Header("Location: $url"); 11 }else12 {13 //获取code码,以获取openid14 $code = $_GET['code'];15 $jsApi->setCode($code);16 $openid = $jsApi->getOpenId();17 }
pour cette étape Le résultat final est d'obtenir l'openid de l'utilisateur actuel
ou9dHt0L8qFLI1foP-kj5x1mDWsM
Le paiement unifié consiste à générer des ordres de paiement sous différents scénarios de paiement de JSAPI/NATIVE. /APP et renvoie l'interface du numéro de commande de pré-paiement, actuellement tous les scénarios de paiement WeChat utilisent cette interface
Dans le paiement unifié, les paramètres suivants sont obtenus à partir de la configuration, ou générés automatiquement par la classe, et n'ont pas besoin d'être renseignés par l'utilisateur
$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名
Dans le paiement JSAPI, De plus, renseignez les paramètres suivants
//统一支付接口中,trade_type为JSAPI时,openid为必填参数!$unifiedOrder->setParameter("openid","$openid");//商品描述$unifiedOrder->setParameter("body","方倍工作室");//商品描述 //自定义订单号,此处仅作举例$timeStamp = time();$out_trade_no = WxPayConf_pub::APPID."$timeStamp";$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 $unifiedOrder->setParameter("total_fee","1");//总金额$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
Les autres sont des paramètres facultatifs
//非必填参数,商户可根据实际情况选填 //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 //$unifiedOrder->setParameter("device_info","XXXX");//设备号 //$unifiedOrder->setParameter("attach","XXXX");//附加数据 //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间 //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 //$unifiedOrder->setParameter("openid","XXXX");//用户标识 //$unifiedOrder->setParameter("product_id","XXXX");//商品ID
Ces paramètres enfin former de telles données XML,
<xml> <openid><![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]></openid> <body><![CDATA[方倍工作室]]></body> <out_trade_no><![CDATA[wx88888888888888881414411779]]></out_trade_no> <total_fee>1</total_fee> <notify_url><![CDATA[http://www.fangbei.org/wxpay/notify_url.php]]></notify_url> <trade_type><![CDATA[JSAPI]]></trade_type> <appid><![CDATA[wx8888888888888888]]></appid> <mch_id>10012345</mch_id> <spbill_create_ip><![CDATA[61.50.221.43]]></spbill_create_ip> <nonce_str><![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]></nonce_str> <sign><![CDATA[2D8A96553672D56BB2908CE4B0A23D0F]]></sign></xml>
Soumettre ces données Les données suivantes seront renvoyées à l'interface de paiement unifiée
https://api.mch.weixin.qq.com/pay/unifiedorder
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <appid><![CDATA[wx8888888888888888]]></appid> <mch_id><![CDATA[10012345]]></mch_id> <nonce_str><![CDATA[Be8YX7gjCdtCT7cr]]></nonce_str> <sign><![CDATA[885B6D84635AE6C020EF753A00C8EEDB]]></sign> <result_code><![CDATA[SUCCESS]]></result_code> <prepay_id><![CDATA[wx201410272009395522657a690389285100]]></prepay_id> <trade_type><![CDATA[JSAPI]]></trade_type> </xml>
, qui contient le Paramètre d'ID de prépaiement le plus important, prepay_id, avec une valeur de
wx201410272009395522657a690389285100
Une fois les préparations précédentes terminées, l'API JS génère des paramètres de paiement jsapi basés sur prepay_id<. 🎜>Le code généré est le suivant
//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);$jsApiParameters = $jsApi->getParameters();
{ "appId": "wx8888888888888888", "timeStamp": "1414411784", "nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75", "package": "prepay_id=wx201410272009395522657a690389285100", "signType": "MD5", "paySign": "9C6747193720F851EB876299D59F6C7D" }
<html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>微信安全支付</title> <script type="text/javascript"> //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); //alert(res.err_code+res.err_desc+res.err_msg); } ); } function callpay() { if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } </script></head><body> </br></br></br></br> <p align="center"> <button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >贡献一下</button> </p></body></html>
<xml> <appid><![CDATA[wx8888888888888888]]></appid> <bank_type><![CDATA[CFT]]></bank_type> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[10012345]]></mch_id> <nonce_str><![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]></nonce_str> <openid><![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]></openid> <out_trade_no><![CDATA[wx88888888888888881414411779]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[0C1D7F2534F1473247550A5A138F0CEB]]></sign> <sub_mch_id><![CDATA[10012345]]></sub_mch_id> <time_end><![CDATA[20141027200958]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1002750185201410270005514026]]></transaction_id> </xml>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!