会社のビジネスシナリオでは、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 でプロセスを隠す方法と、遭遇する落とし穴
純粋な CSS3 で実装された美しい入力ボックス アニメーション スタイル ライブラリを共有します ...
Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...
コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...
1. ダウンロード1. インストールパッケージをダウンロードするMySQL ダウンロード パス: h...
なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...
目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...
目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...
この記事では、MySQL 8.0.15をダウンロードしてインストールするための具体的な手順を参考まで...
序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...
以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピーbody、di...
目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...
Linuxにunzipコマンドがない問題の解決策unzipコマンドを使用して.zipファイルを解凍す...
テーブル タグの frame 属性と rules 属性は境界線の表示を制御できます。フレーム プロパ...
0. 以下のテストに関連する表を準備する関連するテーブル作成ステートメントについては、https:/...
目次導入導入集計関数 + over()ソート関数 + over() ntile() 関数 + ove...