Zahlungsvorgang für das WeChat Mini-Programm

迷茫
Freigeben: 2017-03-25 16:19:46
Original
2376 Leute haben es durchsucht

Zahlungsschrittlogik:

1. Das Miniprogramm initiiert eine Anfrage zur Vorauszahlung

2. Der Server ruft die Schnittstelle auf, um Vorauszahlungsinformationen zu initiieren

3. Das WeChat-Applet ruft die Zahlung auf, um die Zahlung abzuschließen

1. Das Miniprogramm initiiert eine Anfrage zur Vorauszahlung

Zahlungsvorgang für das WeChat Mini-Programm

2. Der Server ruft die Schnittstelle auf, um Vorauszahlungsinformationen zu initiieren

Nach Erhalt der Anfrage ruft der Server die WeChat-API-Schnittstelle auf, eine prepay_id Dies entspricht dem Vorabzahlungs-ID-Prozess des Miniprogramms. Es wird einfach eine Signatur gemäß den Instanzparametern des offiziellen Dokuments generiert , und dann eine XML an die API senden

<xml>
   <appid>wx2421b1c4370ec43b</appid>
   <attach>支付测试</attach>
   <body>JSAPI支付测试</body>
   <mch_id>10000100</mch_id>
   <detail><![CDATA[{ "goods_detail":[ { "goods_id":"iphone6s_16G", "wxpay_goods_id":"1001", "goods_name":"iPhone6s 16G", "quantity":1, "price":528800, "goods_category":"123456", "body":"苹果手机" }, { "goods_id":"iphone6s_32G", "wxpay_goods_id":"1002", "goods_name":"iPhone6s 32G", "quantity":1, "price":608800, "goods_category":"123789", "body":"苹果手机" } ] }]]></detail>
   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
   <notify_url>[url]http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>[/url]
   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
   <out_trade_no>1415659990</out_trade_no>
   <spbill_create_ip>14.23.150.211</spbill_create_ip>
   <total_fee>1</total_fee>
   <trade_type>JSAPI</trade_type>
   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>
Nach dem Login kopieren

Es ist zu beachten, dass die Methode zur Zeichengenerierung mit der des öffentlichen Kontos identisch ist Generierungsmethode. Das Folgende ist die PHP-Signaturgenerierungsmethode. Sie kann je nach Framework geändert werden

Unified Order API aufrufen

 /**
     * 生成签名
     * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
     */
    public function MakeSign()
    {
        //签名步骤一:按字典序排序参数
        ksort($this->_prepay);
        $string = $this->ToUrlParams();
        //签名步骤二:在string后加入KEY
        $string = $string . "&key=".WxPayConfig::KEY;
        //签名步骤三:MD5加密
        $string = md5($string);
        //签名步骤四:所有字符转为大写
        $result = strtoupper($string);
        return $result;
    }
    /**
     * 格式化参数格式化成url参数
     */
    public function ToUrlParams()
    {
        $buff = "";
        foreach ($this->values as $k => $v)
        {
            if($k != "sign" && $v != "" && !is_array($v)){
                $buff .= $k . "=" . $v . "&";
            }
        }
        $buff = trim($buff, "&");
        return $buff;
    }
Nach dem Login kopieren

Generieren Sie das Zeichen für die zurückgegebenen Parameter neu und erhalten Sie ein neues Zeichen, kehren Sie zum Applet zurück
/**
     * 统一下单调取返回值
     * @return mixed
     * $output[&#39;return_code&#39;] 状态码 SUCCESS/FAIL
     * $output[&#39;return_msg&#39;] 返回信息,如非空,为错误原因 签名失败 参数格式校验错误
     * $output[&#39;time&#39;] 当前时间戳
     * $output[&#39;nonceStr&#39;] 随机字符串
     * $output[&#39;prepay_id&#39;] 预支付id
     * $output[&#39;sign&#39;] 签名
     * */
    public function pay_place_order()
    {
        $xml = &#39;<xml>
                   <appid>&#39;.$this->_prepay[&#39;appid&#39;].&#39;</appid>
                   <body>&#39;.$this->_prepay[&#39;body&#39;].&#39;</body>
                   <mch_id>&#39;.$this->_prepay[&#39;mch_id&#39;].&#39;</mch_id>
                   <nonce_str>&#39;.$this->_prepay[&#39;nonce_str&#39;].&#39;</nonce_str>
                   <notify_url>&#39;.$this->_prepay[&#39;notify_url&#39;].&#39;</notify_url>
                   <openid>&#39;.$this->_prepay[&#39;openid&#39;].&#39;</openid>
                   <out_trade_no>&#39;.$this->_prepay[&#39;out_trade_no&#39;].&#39;</out_trade_no>
                   <spbill_create_ip>&#39;.$this->_prepay[&#39;spbill_create_ip&#39;].&#39;</spbill_create_ip>
                   <total_fee>&#39;.$this->_prepay[&#39;total_fee&#39;].&#39;</total_fee>
                   <trade_type>&#39;.$this->_prepay[&#39;trade_type&#39;].&#39;</trade_type>
                   <sign>&#39;.$this->MakeSign().&#39;</sign>
                </xml>&#39;;
//调用api,自定义对参数进行处理,改请求方式是自定义方式 
        $xml_result = post_request_https(&#39;https://api.mch.weixin.qq.com/pay/unifiedorder&#39;, $xml);
Nach dem Login kopieren
Hinweis: Die Felder, die an der Generierung des Namens der Applet-Signatur beteiligt sind und an der generierten Signatur beteiligt sind, sind wie folgt Denken Sie daran, den Schlüssel zu verbinden und den zurückgegebenen Wert zu verwenden, indem Sie die API aufrufen

3. Starten Sie das WeChat-Applet, um die Zahlung abzuschließen
Hinweis: Zahlung erfolgreich Nach der Signaturüberprüfung der WeChat-Rückrufbenachrichtigung sind die erforderlichen Parameter alle zurückgegebenen Parameterfelder mit Ausnahme des Zeichenfelds und die generierte Signatur = Zeichen im Rückgabefeld


Das obige ist der detaillierte Inhalt vonZahlungsvorgang für das WeChat Mini-Programm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!