会社のビジネスシナリオでは、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 でプロセスを隠す方法と、遭遇する落とし穴
脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...
シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...
1. 並列レプリケーションの背景まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. ...
目次Vueカスタムディレクティブカスタムディレクティブフック機能出力関連属性アプリケーション例要約す...
最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...
Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...
最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...
目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...
Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...
1. はじめにこの記事には MySQL インストール部分のスクリーンショットがないので、ある程度の基...
一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...
Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...
みなさんこんにちは。今日は Linux コマンド クエリ アプレットでの WePY クラウド開発の実...
<br />このタグを使用すると、表のタイトルを直接追加し、タイトル テキストの配置プロ...
1. MS SQL Server 2005 --1. ログをクリアするexec('DUMP...