Processus de paiement du programme WeChat Mini

迷茫
Libérer: 2017-03-25 16:19:46
original
2375 Les gens l'ont consulté

Logique de l'étape de paiement :

1. Le mini programme initie une demande de prépaiement

.

2. Le serveur appelle l'interface pour lancer les informations de prépaiement

3. L'applet WeChat appelle le paiement pour finaliser le paiement

1. Le mini programme initie une demande de prépaiement

Processus de paiement du programme WeChat Mini

2. Le serveur appelle l'interface pour lancer les informations de prépaiement

Après avoir reçu la demande, le serveur appelle l'interface API WeChat. Si l'appel réussit, un prepay_id. sera obtenu. Cela équivaut au processus d'identification de prépaiement du mini programme. Une signature sera générée simplement en fonction des paramètres d'instance du document officiel. Si elle n'est pas requise, vous pouvez choisir de ne pas la remplir. , puis envoyez un XML à l'API

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

Il est à noter que la méthode de génération de signe est la même que celle du compte public Méthode de génération. Voici la méthode de génération de signature PHP. Elle peut être modifiée selon différents frameworks. Pensez à modifier la clé

.

Appeler l'API de commande unifiée
 /**
     * 生成签名
     * @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;
    }
Copier après la connexion

/**
     * 统一下单调取返回值
     * @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);
Copier après la connexion

Régénérez le signe pour les paramètres renvoyés et obtenez-en un nouveau. Signez, revenez à l'applet

Remarque : Les champs impliqués dans la génération du nom de la signature de l'applet et participant à la signature générée sont les suivants indiqué ci-dessous. N'oubliez pas d'épisser la clé et d'utiliser la valeur renvoyée en appelant l'API
3. Lancez l'applet WeChat pour terminer le paiement

<.>

Remarque : Paiement réussi Après la vérification de la signature de la notification de rappel WeChat, les paramètres requis sont tous des champs de paramètres renvoyés à l'exception du champ de signe, et la signature générée = signe dans le champ de retour


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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!