


Wie implementiert man die WeChat-Code-Scanning-Zahlungsfunktion in der NodeJS-Umgebung?
In diesem Artikel wird anhand von Codebeispielen ausführlich erläutert, wie Sie mit nodejs die WeChat-Scancode-Zahlungsfunktion schreiben. Interessierte Freunde können sich darauf beziehen.
Vorwort
In diesem Artikel werden hauptsächlich die Probleme beschrieben, auf die ich während des WeChat-Scancode-Zahlungsprozesses gestoßen bin, um allen eine Referenz zu geben. Ich hoffe, dass er für Sie hilfreich sein wird.
Entwicklungsumgebung
nodejs v8.1.0
Egg v1.1.0
Vorbereitung
WeChat public account-appid
WeChat Merchant Account-mch_id
Schlüsselwert (erforderlich für den Signaturalgorithmus, es handelt sich tatsächlich um ein 32-Bit-Passwort, Sie können MD5 verwenden, um eines zu generieren) ( Schlüsseleinstellungspfad: WeChat Merchant Platform (pay.weixin.qq.com)-->Kontoeinstellungen-->API-Sicherheit-->Schlüsseleinstellungen)
QR-Code scannen, um eine einheitliche Bestellung zu bezahlen
Im Folgenden wird der WeChat-Modus 2 verwendet, da er relativ einfach ist
let MD5 = require('md5'), xml2js = require('xml2js'), url = "https://api.mch.weixin.qq.com/pay/unifiedorder",// 下单请求地址 appid = '公众号id', mch_id = '微信商户号'; notify_url = '回调地址', out_trade_no = '自己设置的订单号',// 微信会有自己订单号、我们自己的系统需要设置自己的订单号 total_fee = '订单金额',// 注意,单位为分 body = '商品简单描述', trade_type = 'NATIVE',// 交易类型,JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 nonce_str = moment().format('YYYYMMDDHHmmssSSS'),// 随机字符串32位以下 stringA = `appid=${公众号id}&body=${body}&mch_id=${微信商户号}&nonce_str=${nonce_str}¬ify_url=${ notify_url}&out_trade_no=${out_trade_no}&spbill_create_ip=${ctx.request.ip}&total_fee=${total_fee}&trade_type=${trade_type}`, stringSignTemp = stringA + "&key=xxxxxxxxxxxxxxxxx", //注:key为商户平台设置的密钥key sign = MD5(stringSignTemp).toUpperCase(); //注:MD5签名方式
Die oben genannten Parameter sind einige Parameter, die wir benötigen
Informationen zum Signaturgenerierungsalgorithmus finden Sie unter WeChat offiziell: https:// zahlen. weixin.qq.com/wiki/doc/api/native.php?chapter=4_3
spbill_create_ip ist die Terminal-IP-Adresse
Lassen Sie uns alle Parameter in XML zusammenfügen
const formData = "<xml>"; formData += "<appid>" + appid + "</appid>"; //appid formData += "<body>" + body + "</body>"; //商品或支付单简要描述 formData += "<mch_id>" + mch_id + "</mch_id>"; //商户号 formData += "<nonce_str>" + nonce_str + "</nonce_str>"; //随机字符串,不长于32位 formData += "<notify_url>" + notify_url + "</notify_url>"; //支付成功后微信服务器通过POST请求通知这个地址 formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>"; //订单号 formData += "<total_fee>" + total_fee + "</total_fee>"; //金额 formData += "<spbill_create_ip>" + ctx.request.ip + "</spbill_create_ip>"; //ip formData += "<trade_type>NATIVE</trade_type>"; //NATIVE会返回code_url ,JSAPI不会返回 formData += "<sign>" + sign + "</sign>"; formData += "</xml>"; // 这里使用了egg里面请求的方式 const resultData = yield ctx.curl(url, { method: 'POST', content: formData, headers: { 'content-type': 'text/html', }, }); // xml转json格式 xml2js.parseString(resultData.data, function (err, json) { if (err) { new Error("解析xml报错") } else { var result = formMessage(json.xml); // 转换成正常的json 数据 console.log(result) //打印出返回的结果 } }) var formMessage = function (result) { var message = {}; if (typeof result === 'object') { var keys = Object.keys(result); for (var i = 0; i < keys.length; i++) { var item = result[keys[i]]; var key = keys[i]; if (!(item instanceof Array) || item.length === 0) { continue; } if (item.length === 1) { var val = item[0]; if (typeof val === 'object') { message[key] = formMessage(val); } else { message[key] = (val || '').trim(); } } else { message[key] = []; for (var j = 0, k = item.length; j < k; j++) { message[key].push(formMessage(itemp[j])); } } } } return message; }
Oben wird die Eieranforderungsmethode verwendet.
var request = require('request'); request({ url: url, method: "POST", body: formData }, function(error, response, body) { if (!error && response.statusCode == 200) { } });
Wenn die Anforderung erfolgreich ist, wird schließlich eine XML-Datei zurückgegeben, die wir dann in das JSON-Format analysieren eine code_url und out_trade_no darin Wir müssen diese beiden an das Frontend zurückgeben, und dann wird der QR-Code generiert und dem Benutzer angezeigt, um den Code zu scannen und die Zahlung abzuschließen
Überwachen Sie, ob Die Zahlung ist erfolgreich
Nachdem der obige Vorgang abgeschlossen ist, müssen wir wissen, ob der Benutzer die Zahlung abgeschlossen hat, da der Benutzer auf dieser Seite bleibt, müssen wir den Benutzer über die Zahlung informieren ist erfolgreich, nachdem der Benutzer die Zahlung abgeschlossen hat.
Wenn der Benutzer die Zahlung initiiert, generieren wir zunächst einen QR-Code, damit der Benutzer den Code zum Bezahlen scannen kann. Außerdem müssen wir jeden Tag einen Timer einrichten und eine Anfrage senden Hin und wieder muss unser Knotenhintergrund eine Schnittstelle zum Abfragen von Bestellungen schreiben. Zuvor haben wir die Bestellnummer in unserem System erhalten und diese Daten an die Hintergrundschnittstelle zum Abfragen von Bestellungen gesendet. Im Hintergrund wird eine WeChat-Abfrage angefordert. Die Schnittstellenadresse https://api.mch.weixin.qq.com/pay/orderquery ist derselbe wie oben, mit der Ausnahme, dass sich die Schnittstellenadresse von der von WeChat zurückgegebenen XML unterscheidet. Die zurückgegebenen Felder haben den Status ERFOLGREICH und NICHTZAHLUNG. Sie können es an das Frontend zurückgeben, indem Sie beurteilen, ob die Zahlung erfolgreich ist, und den Timer schließen.
Rückrufadresse
Dies ist ein sehr wichtiger Teil. Die meisten Vorgänge können tatsächlich oben ausgeführt werden, es gibt jedoch besondere Umstände, wie z. B. die Trennung des Computers des Benutzers Internet Die Anfrage kann nicht gesendet werden, aber die mobile Zahlung wird durchgeführt, was dazu führt, dass wir die Zahlungsinformationen des Benutzers nicht erfassen. Zu diesem Zeitpunkt ist die Rückrufadresse sehr wichtig
Rückrufadresse festlegen
WeChat Merchant Center->Product Center->Entwicklungskonfiguration->QR scannen Code zum Bezahlen
Was wir danach tun müssen, ist POST im Backend zu verwenden, um die von WeChat gesendeten asynchronen Rückrufinformationen zu empfangen, die ebenfalls im XML-Format vorliegen. Beachten Sie hier, dass der Empfang von XML nicht unterstützt wird kann leere Daten erhalten
Hier ist auch zu beachten, dass wir beim Speichern der Zahlungsinformationen des Benutzers zunächst prüfen müssen, ob die Bestellung bezahlt ist, um wiederholte Vorgänge zu vermeiden, bei denen möglicherweise mehrere Datensätze eingefügt werden
Zusammenfassung
Es gibt immer noch Fallstricke bei der WeChat-Scancode-Zahlung. Wenn Sie zum ersten Mal hier sind, finden Sie hier eine Liste der Dinge, auf die Sie achten müssen
-
Der Signaturalgorithmus muss korrekt geschrieben sein, sonst funktioniert er nicht, das Spleißen muss korrekt sein
WeChat gibt Daten im XML-Format zurück, wir müssen sie konvertieren Es wird über das Plug-In in JSON umgewandelt, sodass die Daten bequem abgerufen werden können
Die zurückgegebene code_url wird verwendet, um einen QR-Code für das Frontend zu generieren, und dann wird ein Timer benötigt muss eingerichtet werden, um zu überprüfen, ob die Bestellung bezahlt wurde, und schließlich wird der Benutzer über das Ergebnis benachrichtigt
Die Rückrufadresse ist sehr wichtig. Unser Backend muss posten, um den Rückruf zu erhalten Von WeChat zurückgegebene Informationen und anschließendes Speichern der Informationen. Bevor wir jedoch die Zahlungsinformationen des Benutzers speichern, müssen wir wissen, ob die Bestellung gespeichert wurde, um wiederholte Ergänzungen zu vermeiden. Außerdem handelt es sich bei den zurückgegebenen Daten um XML, und das Backend muss sicherstellen, dass sie nicht auf normale Weise empfangen werden können, und es sind zusätzliche Einstellungen erforderlich.
Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.
Verwandte Artikel:
Beispiel für die Datengruppierung von v-for in Vue
vue2.0 berechnet berechnet den akkumulierten Wert nach der Liste Schleifenbeispiel
vue.js Beispiel einer verschachtelten Schleife, bei Beurteilung, dynamischem Löschen
Das obige ist der detaillierte Inhalt vonWie implementiert man die WeChat-Code-Scanning-Zahlungsfunktion in der NodeJS-Umgebung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.


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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

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

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor