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
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:
|
<<: Grafisches Tutorial zur kostenlosen Installationsversion von MySQL 5.7.17 winx64
>>: Eine Methode zum Verbergen von Prozessen unter Linux und die dabei auftretenden Fallstricke
Listen zum Organisieren von Daten Nachdem die Les...
1. Mobile Auswahl der Formulartexteingabe: Wenn i...
Das HTML-Spezifikationsdokument führt das Crossor...
CSS stimmt mit mehreren Klassen überein Das folge...
Inhaltsverzeichnis 1. Einleitung 2. Installieren ...
Der Weg vor uns ist immer so schwierig und voller...
Heute hatte ich etwas Freizeit, um eine Website f...
Datenbereinigung (ETL) Vor dem Ausführen des MapR...
Eine At-Regel ist eine Deklaration, die Anweisung...
Amtliche Dokumentation: Daher sollte MySQL wie fo...
Wir wissen, dass die Eigenschaften des Auswahltags...
Dieser Artikel beschreibt, wie xdebug in einer Ub...
<meta name="viewport" content="B...
Inhaltsverzeichnis Vorwort Erstellen Sie ein Brüc...
Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...