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 でプロセスを隠す方法と、遭遇する落とし穴

推薦する

mysql8.0.20 のダウンロードとインストールおよび発生した問題 (図とテキスト)

1.ブラウザでmysqlを検索してダウンロードしてインストールしますアドレス: https://d...

Linux システムが VMware にインストールされているかどうかを確認する方法

現在の Linux システムが VMware にインストールされているかどうかを確認する方法を教えて...

Vueはフォーム検証機能を実装します

この記事では主に、NUXT の validate メソッドに基づいてフォーム検証を実装する方法につい...

nginx アンチホットリンクおよびアンチクローラー設定の詳細な説明

新しい設定ファイルを作成します (たとえば、nginx インストール ディレクトリの下の conf ...

Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...

MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル

1. MySQL 8.0.12 バージョンのインストール手順。 1. ダウンロードhttps://d...

Docker Alibaba Cloud RocketMQ 4.5.1 のデプロイプロセスの詳細な説明

検索ミラー docker 検索 rocketmq画像バージョンを表示他の画像を表示したい場合は、画像...

ウェブサイトがhttpsを有効にした後のSSLのセキュリティ構成と検出

最近のウェブサイトでは SSL を有効にするのが標準となっています。ただし、SSL を設定した後も、...

jQuery ベースのカレンダー効果

この記事では、カレンダー効果を実現するためのjQueryの具体的なコードを例として紹介します。具体的...

VSCode の Remote-SSH を使用して Linux に接続し、リモート開発を行う

Remote-SSHをインストールして設定するまず VSCode を開き、拡張機能を見つけて、Rem...

CentOS 7 に Percona Server+MySQL をインストールする

1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

JavaScript のスプレッド演算子とレスト演算子の違いの詳細な説明

目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...