1. Einleitung Jeder, der mit der WeChat Mini Program Cloud Development herumgespielt hat, weiß, dass die WeChat Mini Program Cloud Development derzeit Cloud-Zahlungen unterstützt. Wie sieht also der gesamte Zahlungsvorgang mit Unterstützung von Cloud-Zahlungsfunktionen aus? Zum Beispiel: Wie sollte die logische Verarbeitung vor, während und nachdem ein Benutzer eine Zahlung initiiert, aussehen? Wie sollte sie gestaltet sein, um sicherer zu sein und die Wahrscheinlichkeit von Fehlern zu reduzieren? Dieser Artikel stellt hauptsächlich die Verwendung von Cloud-Zahlungen und die Gestaltung des Bestellsystems und des Zahlungsvorgangs bei Cloud-Zahlungen vor. Übrigens: Die WeChat-Bezahlfunktion unterstützt nur Anrufe von Firmen . 2. GedankenanalyseDer Aufrufvorgang der Cloud-Zahlung gliedert sich grob in folgende vier Schritte: 1. Erhalten Sie authentifizierungsfreie Parameter Nachdem das Miniprogramm grundlegende Parameter wie Betrag und Produktinformationen übergeben hat, ruft es die Cloud-Funktion auf, um die authentifizierungsfreien Parameter abzurufen. 2. Übergeben Sie die authentifizierungsfreien Parameter an die Zahlungs-API auf der Miniprogrammseite Die Cloud-Funktion gibt den authentifizierungsfreien Parameter zurück, der als Eingabeparameter der Zahlungs-API auf der Miniprogrammseite verwendet wird. 3. Benutzerzahlung WeChat Pay aufrufen und der Benutzer tätigt die Zahlung/storniert die Zahlung 4. WeChat ruft die angegebene Cloud-Funktion zurück Diese Cloud-Funktion wird nach erfolgreicher Zahlung zurückgerufen. Bricht der Nutzer die Zahlung ab, wird diese Cloud-Funktion nicht zurückgerufen. Anschließend können wir anhand der oben genannten vier Schritte analysieren, wann die Bestellung erstellt und wann der Zahlungsstatus der Bestellung geändert wurde. Die Anlage einer Bestellung sollte im ersten Schritt mit dem Erhalt der authentifizierungsfreien Parameter erfolgen. Nach Erhalt der authentifizierungsfreien Parameter sollten die Bestellnummer und weitere Informationen in die Datenbank eingetragen werden. Der Zahlungsstatus der Bestellung sollte zu diesem Zeitpunkt „Zahlung ausstehend“ sein. Gleichzeitig können Sie auch wissen, dass die Änderung des Zahlungsstatus der Bestellung im vierten Schritt erfolgen soll. Wenn die Zahlung erfolgreich ist, ändern Sie den Zahlungsstatus der Bestellung in „Zahlung erfolgreich“. Zugehörige Links zur offiziellen Dokumentation:
3. Fallstudie zu Cloud-Zahlungen1. Cloud-Funktion1-1. Authentifizierungsfreie Parameter-Cloud-Funktion abrufen (wxPay)Diese Cloud-Funktion wird hauptsächlich verwendet, um die von der Zahlungs-API benötigten Parameter abzurufen und eine Bestellung zum Einfügen in die Datenbank zu erstellen. Screenshot des Beispielergebnisses eines erfolgreichen Anrufs Implementierungscode // Cloud-Funktionseintragsdatei const cloud = require('wx-server-sdk') cloud.init({ Umgebung: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() exports.main = async (Ereignis) => { const wxContent = cloud.getWXContext() // OpenID und andere Informationen const openid = wxContent.OPENID const appid = wxContent.APPID const totalFee = event.totalFee // Zahlungsbetrag (Einheit: Cent) const body = event.body // Produktname const outTradeNo = createOutTradeNo() // Bestellnummer // Authentifizierungsfreie Zahlungsparameter abrufen const payMent = await cloud.cloudPay.unifiedOrder({ "body": Körper, "outTradeNo": outTradeNo, "spbillCreateIp": "127.0.0.1", "subMchId": "Händlernummer", //Händlernummer "totalFee": totalFee, "envId": "Entsprechende Cloud-Umgebungs-ID", // Cloud-Umgebungs-ID "functionName": "payCallBack" // Zahlungs-Callback-Cloud-Funktion}) // Bestellung erstellen const nowTime = new Date().getTime() const orderObj = { _openid: geöffnete ID, appid: appid, outTradeNo: outTradeNo, Gesamtgebühr: Gesamtgebühr * 0,01, payStatus: 'warten', Erstellungszeit: aktuelle Zeit, Aktualisierungszeit: aktuelle Zeit, Löschzeit: null, } warte auf AddOrder(Bestellobjekt) RÜCKZAHLUNG } /** Erstelle eine zufällige, eindeutige Bestellnummer (32 Bit) */ const createOutTradeNo = () => { let outTradeNo = new Date().getTime() // Den aktuellen 13-stelligen Zeitstempel abrufen let numStr = '0123456789'; lass randomStr = ''; für (sei i = (32 - 13); i > 0; --i) { randomStr += AnzahlStr[Math.floor(Math.random() * AnzahlStr.length)]; } outTradeNo += randomStr Rückkehr ausTradeNo } /**Erstellen einer Bestellung in der Datenbank */ const addOrder = async (Bestellobj) => { Rückgabewert: warte auf db.collection('Bestellung') .hinzufügen({ Daten: Bestellobjekt }) .then(res => { console.log("Bestellung erfolgreich erstellt=====>", res, orderObj) }) .catch(err => { console.log("Ausnahme beim Erstellen einer Bestellung =====>", err, orderObj) }) } 1-2. Zahlungsrückruf-Cloud-Funktion (payCallBack)Nachdem der Benutzer erfolgreich bezahlt hat, ruft der WeChat-Server diese Cloud-Funktion auf und überträgt die Bestellnummer, OpenID, AppID und andere Informationen des Zahlers. Hierdurch können Entwickler feststellen, welcher Auftrag aktuell zurückgerufen wird. Rückrufdokumentation Beispiel-Screenshot eines erfolgreichen Rückrufergebnisses Implementierungscode // Cloud-Funktionseintragsdatei const cloud = require('wx-server-sdk') cloud.init({ Umgebung: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() // Cloud-Funktionseintrag Funktion exports.main = async (event) => { console.log("Callback-Rückgabeobjekt =====>", Ereignis) // Beurteilungsbedingung if (event.returnCode == 'SUCCESS') { if (event.resultCode == 'ERFOLG') { // Abfragebedingung const whereObj = { appid: event.subAppid, // APPID des Miniprogramms _openid: event.subOpenid, // OpenID des Miniprogramm-Benutzers outTradeNo: event.outTradeNo, // Bestellnummer des Händlers} // Objekt aktualisieren const updateObj = { transactionId: event.transactionId, // WeChats Bestellnummer totalFee: event.totalFee * 0,01, // WeChats erhaltener Betrag timeEnd: event.timeEnd, // Zahlungsendezeit payStatus: „success“, updateTime: neues Date().getTime() } // Reihenfolge aktualisieren, warte auf updateOrder(whereObj, updateObj) } } // Rückgabeprotokoll und Eingabeprotokoll des Zahlungsrückrufs (diese Struktur muss zurückgegeben werden, Einzelheiten finden Sie im Dokument) zurückkehren { Fehlercode: 0, errmsg: Ereignis.ErgebnisCode } } /**Aktualisieren Sie den Zahlungsstatus der Bestellung */ const updateOrder = async (whereObj, updateObj) => { Rückgabewert: warte auf db.collection('Bestellung') .wo(woObj) .aktualisieren({ Daten:UpdateObj }) } 2. Mini-Programmseite (JS-Code)// Seiten/wxPay/wxPay.js Seite({ /** * Ausgangsdaten der Seite */ Daten: { }, /** * Lebenszyklusfunktion - auf Seitenladen warten*/ beim Laden() {}, /** * Lebenszyklusfunktion - Seitenanzeige überwachen*/ onShow() {}, /**Zahlungsklicküberwachung*/ asynchrones PayTap() { Konstante Gesamtgebühr = 2 const body = "Zahlungstest" wx.showLoading({ Titel: „WeChat-Zahlung starten“, Maske: wahr }) // Authentifizierungsfreie Parameter für die Zahlung abrufen const payMentRes = await this.getPayMent(totalFee, body) wx.hideLoading({ Erfolg: (res) => {}, }) // Mini-Programm Zahlungs-API const payRes = warte hierauf.wxPay(payMentRes.result.payment) //Zahlungs-API gibt Ergebnis zurück print console.log(payRes) }, /** * Mini-Programm-Zahlungs-API * @param {object} authentifizierungsfreier Parameter für die Zahlung*/ wxPay(Zahlung) { returniere neues Promise((lösen, lehnt ab) => { wx.requestPayment({ ...Zahlung, Erfolg(res) { lösen({ Status: „Erfolgreich“, res: res }) }, Fehler(Fehler) { lösen({ Status: „Fehler“, res: ähm }) } }) }) }, /** * Holen Sie sich authentifizierungsfreie Parameter für die Zahlung* @param {number} totalFee-Zahlungsbetrag, Einheit: Cent* @param {string} body-Produktname*/ getPayMent(Gesamtgebühr, Text) { returniere neues Promise((lösen, lehnt ab) => { wx.cloud.callFunktion({ Name: 'wxPay', Daten: { Gesamtgebühr, Körper }, Erfolg(res) { Entschlossenheit (res) }, Fehler(Fehler) { lösen (Fehler) } }) }) }, }) 3. ZahlungsergebnisseBenutzerseite Händlerseite 4. Code-Verzeichnisstruktur4. Warum so schreibenVielleicht haben einige Studenten WeChat Cloud Payment verwendet, aber noch nie die oben genannten Zahlungs-Callback-Cloud-Funktion. Es besteht allerdings auch die Möglichkeit, Zahlungsergebnisse des Benutzers abzurufen. Wie unten gezeigt Tatsächlich ist die Zahlungs Warum müssen wir in diesem Fall eine Zahlungs-Callback-Cloud-Funktion schreiben, um das Zahlungsergebnis zu erhalten? Wenn Sie dies sehen, bedeutet dies auch, dass Sie den gesamten Implementierungsprozess abgeschlossen haben. Wenn Sie Fragen dazu haben, warum dies auf diese Weise implementiert wird, sollten Sie in der Lage sein, einige Antworten für sich selbst zu finden. Abgesehen von kleineren Problemen im Zusammenhang mit Entwicklungsspezifikationen und Optimierung möchte ich Ihnen einen sehr fatalen Grund nennen. WeChat Mini-Programm-Zahlungs Nachdem der Benutzer bezahlt hat, gelangt er auf die folgende Seite Wenn der Benutzer nicht auf die Schaltfläche „Fertig“ klickt, wird die Zahlungs-API des WeChat Mini-Programms ( Der Rückruf wx.requestPayment()) wird nicht ausgelöst. Mit anderen Worten: Das Miniprogramm kann die Zahlungsergebnisse des Benutzers nicht selbst abrufen. Vorausgesetzt, der Benutzer verlässt WeChat direkt, wird das Miniprogramm zerstört. Wie sollte sich der Bestellstatus zu diesem Zeitpunkt ändern? Tipps: Dieses Problem tritt auf der Android-Seite nicht auf. Interessierte Schüler können die folgenden Punkte selbst üben. V. FazitDies ist die Idee, allerdings müssen einige Ausnahmen während des Entwicklungsprozesses von den Entwicklern selbst behandelt werden, wie z. B. Fehler bei der Auftragserteilung, Aktualisierungsfehler und andere Ausnahmeprobleme. Obwohl die Wahrscheinlichkeit gering ist und ausgedruckte Anrufaufzeichnungen vorliegen, können bei einem Problem auch die Anrufaufzeichnungen und die zugehörigen Informationen überprüft werden. Dies ist das Ende dieses Artikels über die Implementierung von Cloud-Zahlungen im WeChat Mini-Programm. Weitere relevante Inhalte zu Cloud-Zahlungen im WeChat Mini-Programm finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Eine kurze Erläuterung zum Ändern/Festlegen der Umgebungsvariable JAVA_HOME unter Linux
>>: Implementierung der Ausführung von SQL Server mit Docker
1. Es gibt derzeit viele Tools zur Python-Version...
Bei täglichen Entwicklungsaufgaben verwenden wir ...
--1. Erstellen Sie eine neue Gruppe und einen neu...
In MySQL kann das Problem der Groß- und Kleinschr...
Inhaltsverzeichnis Die Knotenversion stimmt nicht...
Im Bereich Design gibt es jedes Jahr unterschiedl...
Zunächst stellen wir vor, wie (1) MySQL 5.7 hat e...
1. Laden Sie das Gitlab-Image herunter Docker-Pul...
Vorwort Ab MySQL-Version 3.23.44 unterstützen Inn...
Heutzutage wird die Bildschirmauflösung von Compu...
Sich gut zu ernähren und ausreichend zu schlafen,...
Sie müssen Inspiration haben, um eine Website zu g...
Inhaltsverzeichnis 1. Benutzerdefinierte Anweisun...
Inhaltsverzeichnis 1: Kennwortfreie Anmeldekonfig...
1. Downloadadresse für das Flash-Plug-in-Paket: h...