Beispielcode zur Implementierung der WeChat-Kontoaufteilung mit Nodejs

Beispielcode zur Implementierung der WeChat-Kontoaufteilung mit Nodejs

Das Geschäftsszenario des Unternehmens erfordert die Verwendung der WeChat-Kontoaufteilungsfunktion. Ich habe sie einen Nachmittag lang gemäß der Dokumentation auf der offiziellen Website debuggt, bevor sie endlich funktionierte, und den Vorgang der Verwendung der WeChat-Kontoaufteilung von Nodejs aufgezeichnet.

Voraussetzungen

  • Aktivieren Sie im WeChat Merchant Platform Product Center->Meine Produkte die Funktion zum Aufteilen von Konten im Zahlungserweiterungstool.
  • Fügen Sie einen Rechnungsempfänger hinzu. Wenn dieser Schritt nicht gesetzt ist, wird eine * Split-Account-Empfängerbeziehung nicht vorhanden gemeldet. Bitte überprüfen Sie die Beziehung jedes Empfängers in den Parametern. *Fehler
  • Holen Sie sich die Händler-ID und das Geheimnis auf der Händlerplattform
  • Sie müssen apiclient_cert.pem und apiclient_key in ein Verzeichnis auf dem Server übertragen.

Konkrete Umsetzung

// @router posten -> teilen -> /common/payment/share
asynchron teilen() {
 const { ctx } = dies
 const nonce_str = ctx.service.wx.randomStr()
 //Händler-ID
 const mch_id = "123456"
 // x Applet-App-ID
 const appid = "wx123456"
 // Bestellnummer const out_order_no = '1609745196755nFvdMaYub2'
 // WeChat-Zahlungsauftragsnummer const transaction_id = '4200000801202101044301662433'
 //Händlergeheimnis
 Konstantschlüssel = "9813490da1ffb80afaa36f6f1265e490"

 // Die Parameter dieses Blocks werden in der offiziellen Dokumentation ausführlich beschrieben const params = {
  Appid,
  mch_id,
  nonce_str,
  Out_Order_Nr.,
  Empfänger: `[{"Konto": "123qwe","Betrag": 1,"Beschreibung": "Beschreibung","Typ": "PERSONAL_OPENID"}]`,
  Zeichentyp: 'HMAC-SHA256',
  Transaktions-ID,
 }

 // Die Signaturmethode muss HMAC-SHA256 sein
 const sign = ctx.service.wx.sign(Params, Schlüssel, 'HMAC-SHA256')

 // xmlString
 const formData = `<xml>
  <appid>${appid}</appid>
  <mch_id>${mch_id}</mch_id>
  <nonce_str>${nonce_str}</nonce_str> 
  <out_order_no>${out_order_no}</out_order_no>
  <Transaktions-ID>${Transaktions-ID}</Transaktions-ID>
  <sign>${sign}</sign>
  <sign_type>HMAC-SHA256</sign_type>
  <receivers>${params.receivers}</receivers>
 </xml>`

 const res = warte auf ctx.curl(
  „https://api.mch.weixin.qq.com/secapi/pay/profitsharing“,
  {
   // Sie müssen das Zertifikat apiclient_cert verwenden
   Zertifikat: fs.readFileSync(Pfad.join(__dirname,'../../../cert/apiclient_cert.pem')),
   // Sie müssen das Zertifikat apiclient_key verwenden
   Schlüssel: fs.readFileSync(Pfad.join(__dirname,'../../../cert/apiclient_key.pem')),
   Methode: "post",
   Daten: Formulardaten,
  }
 )

 const datastring = res.data.toString()
 xml2js.parseString(Datenstring, (Fehler, Ergebnis) => {
  wenn (Fehler) {
   ctx.throw(422, Fehler)
  }

  console.log(Ergebnis)
 })
}


//randomStr
// Erzeuge einen zufälligen String randomStr(len = 24) {
 const str =
  „abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789“;
 lass Ergebnis = '';
 für (sei i = 0; i < len; i++) {
  Ergebnis += str[Math.floor(Math.random() * str.length)];
 }
 Ergebnis zurückgeben;
}

// Signatur // mchKey ist das Geheimnis des Händlers, sonst wird die Signatur nicht bestanden sign(data, mchKey, signType = 'MD5') {
 const-Schlüssel = [];
 für (const Schlüssel in Daten) {
  if (data[key] !== undefiniert) {
   Tasten.drücken(Taste);
  }
 }
 // Wörterbuchsortierung => Schlüssel=Wert
 const stringA = Schlüssel
  .Sortieren()
  .map(Schlüssel => `${Schlüssel}=${decodeURIComponent(Daten[Schlüssel])}`)
  .verbinden('&');
 // Händlerschlüssel verketten
 const stringSignTemp = stringA + '&key=' + mchKey;
 // verschlüsseln let hash;
 wenn (Zeichentyp === 'MD5') {
  Hash = crypto.createHash('md5').update(stringSignTemp);
 } anders {
  Hash = crypto.createHmac('sha256', mchKey).update(stringSignTemp, 'utf8');
 }
 
 const paySign = hash.digest('hex').toUpperCase();
 paySign zurückgeben;
}

Wenn bei Ihnen das Problem eines Signaturfehlers auftritt. Sie können die von Ihnen generierten Formulardaten zur schrittweisen Überprüfung in das Tool zur Überprüfung der Schnittstellensignatur einfügen.

Weitere häufige Probleme mit der Schnittstelle zur Kontenaufteilung

Dies ist das Ende dieses Artikels über den Beispielcode zur Implementierung der WeChat-Kontoaufteilung mit Nodejs. Weitere relevante Inhalte zur WeChat-Kontoaufteilung mit Nodejs finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nodejs-Fehlerbehandlungsprozessaufzeichnung
  • Detaillierte Erklärung zum schnellen Betrieb einer MySQL-Datenbank in einer Node.js-Umgebung
  • Ein vollständiges Beispiel für die Implementierung eines zeitgesteuerten Crawlers mit Nodejs
  • Unterschiede zwischen diesem Schlüsselwort in NodeJS und Browsern
  • Der Kernprozess der NodeJS-Verarbeitung einer TCP-Verbindung
  • Detaillierte Erklärung der Nodejs-Array-Warteschlange und der forEach-Anwendung
  • Lernen Sie die asynchrone Programmierung in Node.js in einem Artikel
  • So erstellen Sie einen untergeordneten Prozess in nodejs
  • So verwenden Sie worker_threads zum Erstellen neuer Threads in nodejs
  • Implementierung des WeChat-Applet-Nachrichten-Pushs in Nodejs
  • Detaillierte Erläuterung der Wissenspunkte zur asynchronen Programmierung in nodejs
  • Der einfachste Weg, mit nodejs+express eine Verbindung zur Datenbank herzustellen
  • So führen Sie in Windows ein Downgrade der installierten höheren Node.js-Version auf eine niedrigere Version durch (grafisches Tutorial)
  • Detaillierte Erläuterung des Implementierungsprozesses der NodeJS CORS-Konfiguration
  • So verwenden Sie node.js, um automatisch in regelmäßigen Abständen E-Mail-Erinnerungen zu senden (super praktisch)
  • Einfache Bereitstellung eines Node.Js-Projekts in der Alibaba Cloud
  • So verwenden Sie Node.js zum Implementieren von Befehlszeilenspielen
  • Es ist ganz einfach zu verstehen, was Node.js ist

<<:  Grafisches Tutorial zur kostenlosen Installationsversion von MySQL 5.7.17 winx64

>>:  Eine Methode zum Verbergen von Prozessen unter Linux und die dabei auftretenden Fallstricke

Artikel empfehlen

HTML-Webseite: geordnete Liste ol und ungeordnete Liste ul

Listen zum Organisieren von Daten Nachdem die Les...

Fünf praktische Tipps zur Gestaltung von Webformularen

1. Mobile Auswahl der Formulartexteingabe: Wenn i...

Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Das HTML-Spezifikationsdokument führt das Crossor...

Beispielcode, wie CSS mehrere Klassen abgleicht

CSS stimmt mit mehreren Klassen überein Das folge...

Anwendung von Hadoop-Zählern und Datenbereinigung

Datenbereinigung (ETL) Vor dem Ausführen des MapR...

Zusammenfassung der @-Verwendung in CSS (mit Beispielen und Erklärungen)

Eine At-Regel ist eine Deklaration, die Anweisung...

Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Amtliche Dokumentation: Daher sollte MySQL wie fo...

So kompilieren und installieren Sie xdebug in einer Ubuntu-Umgebung

Dieser Artikel beschreibt, wie xdebug in einer Ub...

Schritte zum Erstellen eines CentOS-Containers über Docker

Inhaltsverzeichnis Vorwort Erstellen Sie ein Brüc...

Super detaillierte grundlegende JavaScript-Syntaxregeln

Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...