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

Stil-Trigger-Effekt des Webseiten-Eingabefelds

<br />Dieses Beispiel untersucht hauptsächli...

So verwenden Sie SessionStorage und LocalStorage in Javascript

Inhaltsverzeichnis Vorwort Einführung in SessionS...

Wie können die Transaktionseigenschaften von MySQL InnoDB sichergestellt werden?

Vorwort Wenn Sie jemand fragt: „Was sind die Merk...

Diskussion über CSS-Stilpriorität und kaskadierende Reihenfolge

Im Allgemeinen : [1 wichtige Flagge] > [4 beson...

CSS-Code-Abkürzung div+css-Layout-Code-Abkürzungsspezifikation

Durch die Verwendung von Abkürzungen können Sie di...

Grundprinzipien des skalierbaren MySQL-Designs

Inhaltsverzeichnis Vorwort 1. Was ist Skalierbark...

Vue + Element + OSS realisiert das Hochladen von Front-End-Fragmenten und die Wiederaufnahme von Haltepunkten

Reine Front-End-Implementierung:切片上傳斷點續傳.斷點續傳muss...

Implementierung eines Karussells mit nativem JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Detaillierte Erläuterung des Nest.js-Hashing- und Verschlüsselungsbeispiels

0x0 Einführung Zunächst einmal: Was ist ein Hash-...

Tutorial zur Installation und Konfiguration von MySQL 8.0.12 unter Win10

Installation, Konfiguration, Start, Anmeldung und...

Detaillierter Prozess zum Upgrade von gcc (Version 10.2.0) in der CentOS7-Umgebung

Inhaltsverzeichnis Kurze Einleitung 1. Überprüfen...