


Analyse von Prozessproblemen bei der Bezahlung des WeChat-Miniprogramms (Codeanalyse)
Der Inhalt dieses Artikels befasst sich mit der Analyse von Prozessproblemen (Code-Analyse) der WeChat-Applet-Zahlung. Ich hoffe, dass er für Freunde hilfreich ist.
Ich habe heutzutage für kleine Programme bezahlt und nicht das offizielle SDK verwendet. Hier verwende ich nur die offiziellen Dokumente.
* Hinweis: PHP wird verwendet, aber der Zahlungsprozess ist wie folgt
Muss vor der Entwicklung gelesen werden
Hauptprozess
Das Frontend des Miniprogramms sendet eine Parameteranfrage
Akzeptiert die Anfrage und kapselt die „einheitliche Reihenfolge“, um die
package
- Miniprogramm Akzeptieren Sie die „Einheitliche Bestellung“ und bringen Sie den erhaltenen
Wert in
package
ein, um eine Zahlungsanforderung zu initiierenwx.requestPayment
- Bewerben Sie sich für das Miniprogramm WeChat Payment
- Erhalten Sie die Händlernummer und den Einstellungsschlüssel des Miniprogramms WeChat Payment
Hinweis: Das Miniprogramm erfordert nur diese beiden Schritte. Wenn es sich um ein Web handelt, müssen Sie auch den Domänennamen für die Autorisierung des Zahlungsverzeichnisses einrichten, der auch im Dokument angegeben ist: https://pay.weixin. qq.com/wik..
Einheitliche ReihenfolgeOffizielles Dokument: https://pay.weixin.qq.com/wik...
Okay, jetzt, da wir den Wert von/** * 统一订单 */ public function unifiedorder(){ // 以下配置是必填项,如有其它需求请自行配置 $config = array( 'appid' => 'xxxxxxx',//这里是小程序appid 'mch_id' => 'xxxxxxx',//商户ID 'nonce_str' => $this->getNonceStr(),//随机字符串 'body' => '这里是测试 - 测试',//请按照文档要求填写合格名称 'out_trade_no' => time().$this->getNonceStr(2),//流水单号 'total_fee' => '20',//金额,分为单位,这里是0.2元 'spbill_create_ip' => '123.123.123.123',//当前IP 'notify_url' => 'http://xxxx.com',//请恕我愚昧,我没搞懂他有什么用 'trade_type' => 'JSAPI',//必须填写JSAPI 'openid' => 'xxxxxxxx'//当前用户的openid,在trade_type=JSAPI的时候,此项就变成必填项了 ); $config['sign'] = $this->getSignPay($config); $xmlData = $this->ToXml($config);//转成xml数据 $postData = $this->http_post($xmlData); $arrayData = $this->FromXml($postData); if($arrayData['return_code'] == 'SUCCESS' || $arrayData['result_code'] == 'SUCCESS'){ return $arrayData['prepay_id'];//重点来了:走了这么多路,就为了这个值。到这一步就证明成功一多半了。 }else{ return $arrayData;//返回错误 } } /** * 获取签名 */ public function getSignPay($config){ $key = 'xxxxxxx';//商户秘钥,就是自己生成的32位密码 $strA = 'appid='.$config['appid'].'&body='.$config['body'].'&mch_id='.$config['mch_id'].'&nonce_str='.$config['nonce_str'].'¬ify_url='.$config['notify_url'].'&spbill_create_ip'.$config['spbill_create_ip'].'&total_fee='.$config['total_fee'].'&trade_type='.$config['trade_type'];//ASCII 字典序 $strB = $strA.'&key='.$key; $sign = strtoupper(md5($strB));//大写MD5 return $sign; } /** * 随机字符串 32位 */ public function getNonceStr($length = 32){ $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } /** * array转XML */ public function ToXml($data){ if(!is_array($data) || count($data) <= 0){ throw new WxPayException("数组数据异常!"); } $xml = "<xml>"; foreach ($data as $key=>$val){ $xml.="<".$key.">".$val."</".$key.">"; } $xml.="</xml>"; return $xml; } /** * xml转array */ public function FromXml($xml){ if(!$xml){ throw new WxPayException("xml数据异常!"); } libxml_disable_entity_loader(true); $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $this->values; } /** * post 请求 */ public function http_post($url,$param,$post_file=false){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (PHP_VERSION_ID >= 50500 && class_exists('\CURLFile')) { $is_curlFile = true; } else { $is_curlFile = false; if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, false); } } if (is_string($param)) { $strPOST = $param; }elseif($post_file) { if($is_curlFile) { foreach ($param as $key => $val) { if (substr($val, 0, 1) == '@') { } } } $strPOST = $param; } else { $aPOST = array(); foreach($param as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } $strPOST = join("&", $aPOST); } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } }Nach dem Login kopieren
erhalten haben, ist unsere einheitliche Bestellung abgeschlossen. Eigentlich würde ich ihn lieber Data Feng nennen prepay_id
pay:function(e){ //这里面使用post去请求。然后通过我接下来要写的API支付代码获取小程序支付参数 success:function(res){ wx.requestPayment({ 'timeStamp':toString(res.timeStamp),//这里转字符串,这里被坑过,不转的话可能会出现total_fee为空 'nonceStr':toString(res.nonceStr), 'package':toString(res.package), 'signType':'MD5', 'paySign':toString(res.paySign), success:function(res){ console.log(res);//这里可以跳转到带参地址 }, fail:function(res){ console.info('支付失败',res); }, complete:function(){ console.info('支付触发回调',res); } }) } }
Das obige ist der detaillierte Inhalt vonAnalyse von Prozessproblemen bei der Bezahlung des WeChat-Miniprogramms (Codeanalyse). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
