会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web サイトのドキュメントに従って午後 1 回デバッグした後、ようやく機能するようになり、Nodejs WeChat アカウント分割を使用するプロセスを記録しました。 前提条件
具体的な実装// @router post -> share -> /common/payment/share 非同期共有(){ const { ctx } = これ 定数 nonce_str = ctx.service.wx.randomStr() //販売者ID 定数 mch_id = '123456' // x アプレットのアプリ ID 定数アプリID = 'wx123456' // 注文番号 const out_order_no = '1609745196755nFvdMaYub2' // WeChat 支払い注文番号 const transaction_id = '4200000801202101044301662433' //販売者秘密 定数キー = '9813490da1ffb80afaa36f6f1265e490' // このブロックのパラメータは公式ドキュメントで詳しく説明されています const params = { アプリド、 、 nonce_str、 アウトオーダー番号、 受信者: `[{"account": "123qwe","amount": 1,"description": "description","type": "PERSONAL_OPENID"}]`, 署名タイプ: 'HMAC-SHA256'、 トランザクションID、 } // 署名方法はHMAC-SHA256である必要があります const 符号 = ctx.service.wx.sign(params, キー, 'HMAC-SHA256') // xml文字列 const フォームデータ = `<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> <トランザクション ID>${トランザクション ID}</トランザクション ID> <sign>${sign}</sign> <sign_type>HMAC-SHA256</sign_type> <レシーバー>${params.receivers}</レシーバー> </xml>` const res = ctx.curl( を待つ 「https://api.mch.weixin.qq.com/secapi/pay/profitsharing」、 { // 証明書 apiclient_cert を使用する必要があります 証明書: fs.readFileSync(path.join(__dirname,'../../../cert/apiclient_cert.pem')), // 証明書 apiclient_key を使用する必要があります キー: fs.readFileSync(path.join(__dirname,'../../../cert/apiclient_key.pem')), メソッド: "post", データ: フォームデータ、 } ) 定数データ文字列 = res.data.toString() xml2js.parseString(データ文字列、(エラー、結果) => { もし(エラー){ ctx.throw(422, エラー) } console.log(結果) }) } //ランダム文字列 // ランダムな文字列を生成する randomStr(len = 24) { 定数str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 結果を '' とします。 (i = 0; i < len; i++) の場合 { 結果 += str[Math.floor(Math.random() * str.length)]; } 結果を返します。 } // 署名 // mchKey は販売者の秘密です。そうでなければ署名は通過しません sign(data, mchKey, signType = 'MD5') { 定数キー = []; for (const キー in データ) { if (データ[キー] !== 未定義) { keys.push(キー); } } // 辞書ソート => キー=値 const stringA = キー 。選別() .map(キー => `${key}=${decodeURIComponent(data[key])}`) 。参加する('&'); // 販売者キーを連結する const stringSignTemp = stringA + '&key=' + mchKey; // 暗号化 let hash; (符号タイプ === 'MD5')の場合{ ハッシュ = crypto.createHash('md5').update(stringSignTemp); } それ以外 { ハッシュ = crypto.createHmac('sha256', mchKey).update(stringSignTemp, 'utf8'); } 定数 paySign = hash.digest('hex').toUpperCase(); paySign を返します。 } 署名失敗の問題が発生した場合。生成した formData をインターフェース署名検証ツールに入力して、段階的に検証することができます。 アカウント分割インターフェースに関するその他の一般的な問題 Nodejs で WeChat アカウント分割を実装するためのサンプルコードに関するこの記事はこれで終わりです。Nodejs で WeChat アカウント分割に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7.17 winx64 無料インストールバージョン設定方法グラフィックチュートリアル
>>: Linux でプロセスを隠す方法と、遭遇する落とし穴
問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...
目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...
Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...
実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...
Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...
目次序文記述子getとsetの詳細な説明オブジェクトの属性の乗っ取りオブジェクトのすべてのプロパティ...
序文モバイル端末のREM適応ソリューションのレビューと概要remの使い方rem 単位の計算は、HTM...
少し前に、docker ディスク容量が小さすぎてデータを書き込めないという問題が発生しました。理由は...
目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...
背景: SAP ECC サーバーをインストールし、XP をプレインストールしたいと考えています。XP...
MySql は常に MySQLInstallerConsole.exe ウィンドウを定期的にポップア...
概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...
MySQL公式サイトのダウンロードアドレス: https://dev.mysql.com/downl...
この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...
目次1. 時計の新しい使い方1.1. ウォッチの使用構文1.2. 複数の属性値を監視する1.3. 参...