English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Testo principale
Punti di vista personali su come sviluppare il pagamento WeChat APP in PHP
Recentemente, a causa delle esigenze dell'azienda, devo sviluppare il pagamento WeChat APP, ho guardato la documentazione WeChat, sembra buono, non ho incontrato troppi problemi, i punti da notare non sono molti.
Scrivi un documento di note come promemoria.
Flusso di pagamento APP
Da上图可以看出,需要注意的流程总共是3部分;
La prima parte: chiamare l'API di ordinazione, restituire l'ordine di pre-pagamento, firmare nuovamente e restituire le informazioni (4, 5, 6, 7)
La seconda parte: notifica asincrona (15, 16)
La terza parte: l'ultima giudizio del risultato del pagamento
L'aspetto più importante è la prima parte: chiamare l'API di ordinazione, restituire l'ordine di pre-pagamento, firmare nuovamente e restituire le informazioniDocumentazione WeChat
Con dettagliati spiegazioni, non ripeterò qui.
//Aggiungi qui il mio codice, tizio che si allarga, con un po' di modifiche può essere utilizzato. //Funzione di ingresso function weChatPay(){ //Parametri obbligatori per la generazione del biglietto di pre-pagamento: $json = array(); //ID dell'applicazione $newPara["appid"] = "wx2421b1c4370ec43b"; //Numero del commerciante $newPara["mch_id"] = "10000100"; //Numero del dispositivo $newPara["device_info"] = "WEB"; //Stringa casuale, qui si consiglia di utilizzare la funzione per generare $newPara["nonce_str"] = "1add1a30ac87aa2db72f57a2375d8fec"; //Descrizione del prodotto $newPara["body"] = "APP支付测试"; //Numero dell'ordine del commerciante, qui è il numero di ordine interno del commerciante $newPara["out_trade_no"] = "1415659990"; //Importo totale $newPara["total_fee"] = 1; //Indirizzo IP del terminale $newPara["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"]; //Indirizzo di notifica, attenzione, non aggiungere parametri nell'URL qui $newPara["notify_url"] = "http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php"; //Transaction type $newPara["trade_type"] = "APP"; //First signature $newPara["sign"] = produceWeChatSign($newPara); //Convert array to xml format $xmlData = getWeChatXML($newPara); //Use PHP's CURL package to send data to WeChat unified order interface, return normal prepay_id $get_data = sendPrePayCurl($xmlData); //Judge the returned result. if($get_data['return_code'] == "SUCCESS" && $get_data['result_code'] == "SUCCESS"){ //Perform a second signature based on the result returned by WeChat payment //Random string required for the second signature $newPara["nonce_str"] = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"; //Timestamp required for the second signature $newPara['timeStamp'] = time().""; //Supplement of remaining parameters for the second signature $secondSignArray = array( "appid"=>$newPara['appid'], "noncestr"=>$newPara['nonce_str'], "package"=>"Sign=WXPay", "prepayid"=>$get_data['prepay_id'], "partnerid"=>$newPara['mch_id'], "timestamp"=>$newPara['timeStamp'], ); $json['datas'] = $secondSignArray; $json['ordersn'] = $newPara["out_trade_no"]; $json['datas']['sign'] = weChatSecondSign($newPara,$get_data['prepay_id']); $json['message'] = "Prepayment completed"; //After the prepayment is completed, perform your internal business logic below /*****************************/ return json_encode($json); } else{ $json['message'] = $get_data['return_msg']; } } return json_encode($json); } //First signature function produceWeChatSign function produceWeChatSign($newPara){ $stringA = self::getSignContent($newPara); $stringSignTemp=$stringA."&key=192006250b4c09247ec02edce69f6a2d"; return strtoupper(MD5($stringSignTemp)); } //生成xml格式的函数 public static function getWeChatXML($newPara){ $xmlData = "<xml>"; foreach ($newPara as $key => $value) { $xmlData = $xmlData."<".$key.">".$value."</".$key.">"; } $xmlData = $xmlData."</xml>"; return $xmlData; } //通过curl发送数据给微信接口的函数 function sendPrePayCurl($xmlData) { $url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; $header[] = "Content-type: text/xml"; $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $xmlData); $data = curl_exec($curl); if (curl_errno($curl)) { print curl_error($curl); } curl_close($curl); return self::XMLDataParse($data); } //xml格式数据解析函数 public static function XMLDataParse($data){ $msg = array(); $msg = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); return $msg; } //二次签名的函数 function weChatSecondSign($newPara,$prepay_id){ $secondSignArray = array( "appid"=>$newPara['appid'], "noncestr"=>$newPara['nonce_str'], "package"=>"Sign=WXPay", "prepayid"=>$prepay_id, "partnerid"=>$newPara['mch_id'], "timestamp"=>$newPara['timeStamp'], ); $stringA = self::getSignContent($secondSignArray); $stringSignTemp=$stringA."&key=192006250b4c09247ec02edce69f6a2d"; return strtoupper(MD5($stringSignTemp)); }
Due punti di attenzione:
1. La firma secondaria deve essere completata nel backend e, una volta completata, tutte le informazioni utilizzate per la firma secondaria devono essere trasmesse al frontend per attivare il pagamento WeChat. Questo riduce la possibilità di non essere in grado di attivare il pagamento WeChat.
2. Le firme sono state eseguite utilizzando stringhe casuali diverse.
Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente il tutorial di urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la violazione, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.