Über das WeChat Mini-Programm zur Implementierung von Cloud-Zahlungen

Über das WeChat Mini-Programm zur Implementierung von Cloud-Zahlungen

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. Gedankenanalyse

Der 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:

  • Cloud-Zahlungsdokumentation
  • Cloud-Zahlungs-Callback-Dokument
  • Rufen Sie das Zahlungs-API-Dokument im Miniprogramm auf

3. Fallstudie zu Cloud-Zahlungen

1. Cloud-Funktion

1-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. Zahlungsergebnisse

Benutzerseite

Händlerseite

4. Code-Verzeichnisstruktur

4. Warum so schreiben

Vielleicht 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 API( wx.requestPayment()) kann auch das aktuelle Zahlungsergebnis zurückgeben. Anhand des Ergebnisses dieses Rückrufs lässt sich tatsächlich feststellen, ob die Zahlung erfolgreich war.

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 API( wx.requestPayment()) hat auf der iOS-Seite ein schwerwiegendes Problem.

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. Fazit

Dies 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:
  • WeChat Mini-Programme - Detaillierte Erklärung der WeChat-Anmeldung, WeChat-Zahlung und Vorlagennachrichten
  • Beispiel einer Java-Implementierung für das WeChat-Applet-Zahlungs-Backend
  • PHP: WeChat-Applet, WeChat-Zahlungsserver-Integrationsbeispiel, detaillierte Erklärung und Quellcode-Download
  • Zusammenfassung der Entwicklungsfehler bei der Zahlungsfunktion des WeChat Mini-Programms
  • WeChat Mini-Programmzahlung – Einfaches Beispiel und Hinweise
  • Detaillierte Erklärung zum Zahlungs- und Rückerstattungsprozess des WeChat Mini-Programms
  • Implementierung der Zahlungsfunktion des WeChat-Applets, PHP-Beispiel, ausführliche Erläuterung
  • WeChat-Applet WeChat-Zahlungszugang – Entwicklungsbeispiel – detaillierte Erläuterung
  • So implementieren Sie ein WeChat-Applet, das die WeChat-Zahlungsschnittstelle aufruft
  • Implementierung der Zahlungsfunktion des WeChat-Applets (Frontend)

<<:  Eine kurze Erläuterung zum Ändern/Festlegen der Umgebungsvariable JAVA_HOME unter Linux

>>:  Implementierung der Ausführung von SQL Server mit Docker

Artikel empfehlen

MySql Group By implementiert die Gruppierung mehrerer Felder

Bei täglichen Entwicklungsaufgaben verwenden wir ...

7 coole dynamische Website-Designs zur Inspiration

Im Bereich Design gibt es jedes Jahr unterschiedl...

Eine schnelle Lösung für den ersten Anmeldefehler in mysql5.7.20

Zunächst stellen wir vor, wie (1) MySQL 5.7 hat e...

So stellen Sie Gitlab schnell mit Docker bereit

1. Laden Sie das Gitlab-Image herunter Docker-Pul...

Erstellen, Einschränkungen und Löschen von Fremdschlüsseln in MySQL

Vorwort Ab MySQL-Version 3.23.44 unterstützen Inn...

Beispielcode für die Verwendung von @media in CSS3 zur Anpassung einer Webseite

Heutzutage wird die Bildschirmauflösung von Compu...

Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage

Sich gut zu ernähren und ausreichend zu schlafen,...

Ich habe ein paar coole Designseiten zusammengestellt, die ich gut finde.

Sie müssen Inspiration haben, um eine Website zu g...

Details zu benutzerdefinierten Vue3-Anweisungen

Inhaltsverzeichnis 1. Benutzerdefinierte Anweisun...