Nodejs で WeChat アカウント分割を実装するためのサンプルコード

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web サイトのドキュメントに従って午後 1 回デバッグした後、ようやく機能するようになり、Nodejs WeChat アカウント分割を使用するプロセスを記録しました。

前提条件

  • WeChat マーチャントプラットフォーム製品センター -> マイプロダクトで、支払い拡張ツールの分割アカウント機能を有効にします。
  • 請求先を追加します。 このステップが設定されていない場合、*分割アカウント受信者関係が存在しないことが報告されます。パラメータで各受信者の関係を確認してください。 *間違い
  • マーチャントプラットフォームでマーチャントIDとシークレットを取得する
  • apiclient_cert.pem と apiclient_key をサーバー上のディレクトリに転送する必要があります。

具体的な実装

// @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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nodejs エラー処理プロセス記録
  • Node.js環境でMySQLデータベースを素早く操作する方法を詳しく説明します
  • Nodejs でタイムドクローラーを実装する完全な例
  • NodeJSとブラウザにおけるこのキーワードの違い
  • Node.js の TCP 接続処理のコア プロセス
  • Nodejs 配列キューと forEach アプリケーションの詳細な説明
  • 1 つの記事で Node.js の非同期プログラミングを学ぶ
  • Node.jsで子プロセスを作成する方法
  • nodejs で worker_threads を使用して新しいスレッドを作成する方法
  • Nodejs での WeChat アプレット メッセージ プッシュの実装
  • Node.js における非同期プログラミングの知識ポイントの詳細な説明
  • nodejs+expressでデータベースに接続する最も簡単な方法
  • Windows でインストールされた Node.js の上位バージョンを下位バージョンにダウングレードする方法 (グラフィック チュートリアル)
  • NodeJS CORS設定の実装プロセスの詳細な説明
  • Node.js を使用して定期的にメールリマインダーを自動的に送信する方法 (非常に実用的)
  • Alibaba Cloud での Node.js プロジェクトの簡単なデプロイ
  • Node.js を使用してコマンドライン ゲームを実装する方法
  • Node.jsを理解するのはとても簡単です

<<:  MySQL 5.7.17 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

>>:  Linux でプロセスを隠す方法と、遭遇する落とし穴

推薦する

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...

MySQL並列レプリケーションの簡単な説明

1. 並列レプリケーションの背景まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. ...

Vueカスタム命令の詳細な説明

目次Vueカスタムディレクティブカスタムディレクティブフック機能出力関連属性アプリケーション例要約す...

Spring環境を構成するためのDocker-composeの手順

最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...

ウェブページ内の 2 つのボックス モデル (W3C ボックス モデル、IE ボックス モデル)

Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

Windows環境でのMySQL 8.0.13無料インストールバージョンの設定チュートリアル

目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...

VMware10 での CentOS 7 のインストールと設定のチュートリアル

Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...

CentOS7.5 の MySQL8.0.19 のインストールチュートリアルの詳細な手順

1. はじめにこの記事には MySQL インストール部分のスクリーンショットがないので、ある程度の基...

Dockerイメージの作成とプロジェクト全体のワンクリックパッケージングとデプロイ

一般的な Dockerfile 命令の紹介命令説明するから新しいイメージが構築される基となるイメージ...

Dockerfile を使用して Node.js サービスをデプロイする方法

Dockerfileを初期化するプロジェクトの名前が express であると仮定して、expres...

Linux コマンド クエリ アプレットでの WePY クラウド開発の実践

みなさんこんにちは。今日は Linux コマンド クエリ アプレットでの WePY クラウド開発の実...

HTML テーブル マークアップ チュートリアル (15): テーブル タイトル

<br />このタグを使用すると、表のタイトルを直接追加し、タイトル テキストの配置プロ...