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

Detaillierte Erklärung der Vue-Filter

<Text> <div id="Wurzel"> &l...

HTML-Grundlagen: Die grundlegende Struktur von HTML

Die Grundstruktur von HTML-Hypertextdokumenten bes...

Vue-Beispielcode zur einfachen Implementierung von virtuellem Scrollen

Inhaltsverzeichnis Vorwort Rollprinzip erreichen ...

Analyse der Verschachtelungsregeln von XHTML-Tags

In der XHTML-Sprache wissen wir alle, dass das ul...

Referenz zur MySQL-Optimierungslösung

Probleme, die bei der Optimierung auftreten könne...

So aktivieren Sie das Root-Konto in Ubuntu 20.04

Nach der Installation von Ubuntu 20.04 gibt es st...

So exportieren Sie MySQL-Abfrageergebnisse in CSV

Um MySQL-Abfrageergebnisse in CSV zu exportieren,...

Beispielcode zum Bereitstellen von ELK mit Docker-Compose

Umfeld Host-IP 192.168.0.9 Docker-Version 19.03.2...

Tutorial zur Installation und Nutzungskonfiguration von Docker+nacos+seata1.3.0

Ich habe vorher einen Tag damit verbracht. Obwohl...

Detaillierte Erklärung des Missverständnisses zwischen MySQL und Oracle

Inhaltsverzeichnis Wesentlicher Unterschied Daten...

Zusammenfassung gängiger Befehle in Dockerfile

Syntaxzusammensetzung: 1 Anmerkungsinformationen ...