English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Einige persönliche Erfahrungen beim Entwicklung von APP-Ende WeChat-Zahlung mit PHP
Kürzlich aufgrund der Unternehmensanforderungen, um die APP-Ende WeChat-Zahlung zu entwickeln, sah ich das WeChat-Dokument, fand es nicht schlecht, ohne großen Graben zu stoßen, die zu beachtenden Punkte sind nicht zu viel.
Schreiben Sie ein Notizdokument als Memo.
APP-Zahlungsflow
Aus dem obigen Bild kann man erkennen, dass der zu beachtende Prozess insgesamt3Teil;
Das erste Teil: Aufruf des Bestell-API, Rückgabe des Vorabzahlungsauftrags, Signatur und dann Rückgabe der Informationen (4,5,6,7)
Das zweite Teil: Asynchrone Benachrichtigung (15,16)
Der dritte Teil: Letzte Entscheidung über das Zahlungsresultat
Am wichtigsten ist der erste Teil: Aufruf des Bestell-API, Rückgabe des Vorabzahlungsauftrags, Signatur und dann Rückgabe der Informationen
WeChat-Dokumentationenthält detaillierte Erklärungen, hier wird nicht noch einmal erwähnt.
Fügen Sie meinem Code einen Anhang hinzu,伸手党,ein wenig ändern und es kann verwendet werden.
//Eingangsfunction function weChatPay(){ $json = array(); //Erforderliche Parameter zur Generierung eines Vorabzahlungsauftrags: $json = array(); //Anwendungs-ID $newPara["appid"] = "wx2421b1c4370ec43"b"; //Händlernummer $newPara["mch_id"] = "10000100"; //Gerätenummer $newPara["device_info"] = "WEB"; //Zufällige Zeichenfolge, hier wird empfohlen, eine Funktion zu verwenden, um sie zu generieren $newPara["nonce_str"] = "1add1a30ac87aa2db72f57a2375d8fec" //Produktbeschreibung $newPara["body"] = "APP-Zahlungstest"; //Händlerbestellnummer, hier ist die interne Bestellnummer des Händlers $newPara["out_trade_no"] = "1415659990"; //Gesamtbetrag $newPara["total_fee"] = 1; //Endgeräte-IP $newPara["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"]; //Benachrichtigungsadresse, beachten Sie, dass Sie keine Parameter in die URL einfügen sollten $newPara["notify_url"] = "http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php"; //Transaktionsart $newPara["trade_type"] = "APP"; //Erste Signatur $newPara["sign"] = produceWeChatSign($newPara); //Konvertieren Sie das Array in das XML-Format $xmlData = getWeChatXML($newPara); //Verwenden Sie das PHP-CURL-Paket, um Daten an das WeChat Unified Order Interface zu senden und einen normalen prepay_id zurückzugeben $get_data = sendPrePayCurl($xmlData); //Prüfen Sie das Ergebnis der Rückgabe. if($get_data['return_code'] == "SUCCESS" && $get_data['result_code'] == "SUCCESS"){ //Erstellen Sie eine zweite Signatur basierend auf dem Rückgabewert von WeChat Payment //Zufällige Zeichenkette für die zweite Signatur $newPara["nonce_str"] = "5K8264ILTKCH16CQ2502SI8ZNMTM67VS"; //Zeitstempel für die zweite Signatur $newPara['timeStamp'] = time().""; //Zusätzliche Parameter für die zweite Signatur $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'] = "Vorzahlung abgeschlossen"; //Die Vorzahlung ist abgeschlossen, führen Sie unten Ihre interne Geschäftslogik durch /*****************************/ return json_encode($json); } else{ $json['message'] = $get_data['return_msg']; } } return json_encode($json); } //Die Funktion zur ersten Signatur produceWeChatSign function produceWeChatSign($newPara){ $stringA = self::getSignContent($newPara); $stringSignTemp=$stringA."&key=";192006250b4c09247ec02edce69f6a2d"; return strtoupper(MD5($stringSignTemp)); } //function to generate xml format public static function getWeChatXML($newPara){ $xmlData = "<xml>"; foreach ($newPara as $key => $value) { $xmlData = $xmlData."<".$key.">".$value."</".$key.">"; } $xmlData = $xmlData."</xml>"; return $xmlData; } //function to send data to WeChat interface via 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 format data parsing function public static function XMLDataParse($data){ $msg = array(); $msg = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); return $msg; } //Die Funktion der二次签名 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)); }
Zwei wichtige Punkte:
1.Die二次签名 muss im Hintergrund abgeschlossen werden, und nach Abschluss müssen alle Informationen, die für die二次签名 verwendet werden, zusammen mit den Informationen der二次签名 an das Frontend gesendet werden, damit das Frontend den WeChat-Zahlungsaufcall auslöst. Dies verhindert, dass es zu einer Situation kommt, in der der WeChat-Zahlungsaufcall nicht ausgelöst werden kann.
2.Zwei Unterschriften, die unterschiedliche zufällige Zeichenfolgen verwenden.
Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und dass Sie die Anleitung mehr unterstützen.
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem Urheberrechtseigentümer. Der Inhalt wurde von Internetnutzern selbstständig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine Haftung für die rechtlichen Folgen. Wenn Sie urheberrechtlich relevante Inhalte finden, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine E-Mail senden, um zu melden, und fügen Sie relevante Beweise bei. Sobald die Angelegenheit bestätigt ist, wird diese Website die mutmaßlich urheberrechtswidrigen Inhalte sofort löschen.)