会社のビジネスシナリオでは、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 でプロセスを隠す方法と、遭遇する落とし穴
1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...
ログイン認証にトークンを使用する考え方は次のとおりです。 1. 初めてログインする場合、フロントエン...
リクエストロジックフロントエンド --> https経由でnginxをリクエストnginx -...
1. Iframe タグの使用<br />Iframe については、「忘れられた隅」に放...
1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...
目次効果テキストの作成を開始するまずフォントローダーを作成するフォントライブラリを読み込むテキストジ...
Docker コンテナのネットワーク障害に対する 6 つの解決策注: 以下の方法は、コンテナ内のパブ...
Selenium Grid の紹介Selenium Grid のいくつかの新しい機能は、今後リリース...
デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...
目次01 InnoDBレプリカセットの紹介02 InnoDBレプリカセットの制限03 導入前に知って...
1. バックアップソースリストUbuntu のデフォルトのソースは国内サーバーではないため、更新され...
概要インデックス作成は、MySQL で習得しなければならないスキルであり、MySQL クエリの効率を...
一般的に言えば、コンテナが起動した後、ポート マッピングを通じてコンテナが提供するサービスを使用...
コンテナのライフサイクルコンテナランタイムのライフサイクルコンテナは、分離特性を持つプロセスのセット...
Web デザインで js を使用すると、多くのページ効果を実現できますが、HTML タグの META...