Detaillierte Erläuterung der von WeChat entwickelten JS-API-Zahlungsbeispiele

Y2J
Freigeben: 2017-05-03 11:08:38
Original
2070 Leute haben es durchsucht

Schlüsselwörter: WeChat-Zahlung WeChat-Zahlung v3 JSAPI-Zahlung Unified Payment Native Zahlung Prepay_ID

Dieser Artikel stellt den JSAPI-Implementierungsprozess unter WeChat-Zahlung vor

Vorwort

WeChat Die Zahlung ist jetzt in Version 2 und Version 3 unterteilt. Diejenigen, die sich vor dem 10. September 2014 beworben haben, erhalten die Version 2, und diejenigen, die sich danach beworben haben, erhalten die Version 3. Die V3-Version von WeChat Pay verfügt nicht über den Parameter paySignKey. Eine entsprechende Einführung in Version 2 finden Sie in anderen Artikeln von Fangbei Studio. In diesem Artikel wird WeChat Pay v3 vorgestellt.

Prozessimplementierung

1. OAuth2.0-Autorisierung

JSAPI muss die Anmeldeautorisierungsschnittstelle aufrufen, um die OpenID des Benutzers vor der Zahlung zu erhalten. Daher muss die Autorisierung einmal durchgeführt werden und das Bestätigungsfeld wird für diese Autorisierung nicht angezeigt.
Das Wesentliche besteht darin, zu

http://www.fangbei.org/wxpay/js_api_call.php
Nach dem Login kopieren

zu springen, wenn der Benutzer auf

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
Nach dem Login kopieren

zugreift, um den Codeparameter abzurufen und die Autorisierung, access_token und openid basierend auf dem Code zu erhalten

Den detaillierten Prozess der Implementierung finden Sie unter WeChat Public Platform Development (71) OAuth2.0 Web Authorization

In der Demo von WeChat Pay lautet der Code

 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 }
Nach dem Login kopieren

für diesen Schritt Das Endergebnis besteht darin, die OpenID des aktuellen Benutzers zu erhalten

ou9dHt0L8qFLI1foP-kj5x1mDWsM
Nach dem Login kopieren

2. Einheitliche Zahlung

Die einheitliche Zahlung besteht darin, Zahlungsaufträge unter verschiedenen Zahlungsszenarien von JSAPI/NATIVE zu generieren /APP und gibt die Schnittstelle für die Vorabzahlungsauftragsnummer zurück. Derzeit verwenden alle WeChat-Zahlungsszenarien diese Schnittstelle
Bei Unified Payment werden die folgenden Parameter aus der Konfiguration abgerufen oder automatisch von der Klasse generiert und müssen nicht ausgefüllt werden vom Benutzer eingegeben

$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);//签名
Nach dem Login kopieren

Bei der JSAPI-Zahlung geben Sie außerdem die folgenden Parameter ein

//统一支付接口中,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");//交易类型
Nach dem Login kopieren

Andere sind optionale Parameter

//非必填参数,商户可根据实际情况选填
//$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
Nach dem Login kopieren

Diese Parameter schließlich Bilden Sie solche XML-Daten,

<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>
Nach dem Login kopieren

Senden Sie diese Daten. Die folgenden Daten werden an die einheitliche Zahlungsschnittstelle zurückgegeben

https://api.mch.weixin.qq.com/pay/unifiedorder
Nach dem Login kopieren

<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>
Nach dem Login kopieren

, die die enthält wichtigster Vorauszahlungs-ID-Parameter, prepay_id, mit einem Wert von

wx201410272009395522657a690389285100
Nach dem Login kopieren

3. JS-API-Zahlung

Nachdem die vorherigen Vorbereitungen abgeschlossen sind, generiert die JS-API JSAPI-Zahlungsparameter basierend auf prepay_id
Der generierte Code lautet wie folgt

//=========步骤3:使用jsapi调起支付============$jsApi->setPrepayId($prepay_id);$jsApiParameters = $jsApi->getParameters();
Nach dem Login kopieren

Die generierten JSON-Daten lauten wie folgt

{
    "appId": "wx8888888888888888",
    "timeStamp": "1414411784",
    "nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75",
    "package": "prepay_id=wx201410272009395522657a690389285100",
    "signType": "MD5",
    "paySign": "9C6747193720F851EB876299D59F6C7D"
}
Nach dem Login kopieren

Debuggen Sie die js-Schnittstelle im WeChat-Browser, der Code lautet wie folgt

<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(                &#39;getBrandWCPayRequest&#39;,                <?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(&#39;WeixinJSBridgeReady&#39;, jsApiCall, false);
                }else if (document.attachEvent){
                    document.attachEvent(&#39;WeixinJSBridgeReady&#39;, jsApiCall); 
                    document.attachEvent(&#39;onWeixinJSBridgeReady&#39;, 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>
Nach dem Login kopieren

Wenn der Benutzer auf die Schaltfläche „Beitragen“ klickt, wird das WeChat-Zahlungs-Plug-in angezeigt und der Benutzer kann mit der Zahlung beginnen.

4. Zahlungsbenachrichtigung

Nachdem die Zahlung erfolgreich war, erhält die Benachrichtigungsschnittstelle auch eine XML-Benachrichtigung über die erfolgreiche Zahlung

<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>
Nach dem Login kopieren

Nach Erhalt der notification_url kehren Sie zu zurück Bestätigen Sie den Erfolg. Nachricht an den WeChat-Server

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code></xml>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der von WeChat entwickelten JS-API-Zahlungsbeispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage