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
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>
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
/** * 生成签名 * @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; }
/** * 统一下单调取返回值 * @return mixed * $output['return_code'] 状态码 SUCCESS/FAIL * $output['return_msg'] 返回信息,如非空,为错误原因 签名失败 参数格式校验错误 * $output['time'] 当前时间戳 * $output['nonceStr'] 随机字符串 * $output['prepay_id'] 预支付id * $output['sign'] 签名 * */ public function pay_place_order() { $xml = '<xml> <appid>'.$this->_prepay['appid'].'</appid> <body>'.$this->_prepay['body'].'</body> <mch_id>'.$this->_prepay['mch_id'].'</mch_id> <nonce_str>'.$this->_prepay['nonce_str'].'</nonce_str> <notify_url>'.$this->_prepay['notify_url'].'</notify_url> <openid>'.$this->_prepay['openid'].'</openid> <out_trade_no>'.$this->_prepay['out_trade_no'].'</out_trade_no> <spbill_create_ip>'.$this->_prepay['spbill_create_ip'].'</spbill_create_ip> <total_fee>'.$this->_prepay['total_fee'].'</total_fee> <trade_type>'.$this->_prepay['trade_type'].'</trade_type> <sign>'.$this->MakeSign().'</sign> </xml>'; //调用api,自定义对参数进行处理,改请求方式是自定义方式 $xml_result = post_request_https('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);
3. Starten Sie das WeChat-Applet, um die Zahlung abzuschließen
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!