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

推薦する

DockerのTLS(SSL)証明書の有効期限の問題を解決する

問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...

Javascript サンプル プロジェクトでの虫眼鏡効果の実装プロセス

目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...

MySQLデータベースのSYNフラッディング問題を解決する

Syn 攻撃は、最も一般的で最も簡単に悪用される攻撃方法です。TCP プロトコルの欠陥を利用して、偽...

Java は Excel から MySQL にデータをインポートします

実際の業務では、Excel からデータベースにデータをインポートする必要がある場合があります。データ...

HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...

JavaScript でプロパティハイジャックを実装する方法 defineProperty

目次序文記述子getとsetの詳細な説明オブジェクトの属性の乗っ取りオブジェクトのすべてのプロパティ...

rem をモバイル デバイスに適応させる方法の例

序文モバイル端末のREM適応ソリューションのレビューと概要remの使い方rem 単位の計算は、HTM...

Docker ディスク領域クリーニングのソリューション

少し前に、docker ディスク容量が小さすぎてデータを書き込めないという問題が発生しました。理由は...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

VMware インストール エラー VMware Workstation が VMware 認証サービスを開始できませんでした

背景: SAP ECC サーバーをインストールし、XP をプレインストールしたいと考えています。XP...

MySql が常に mySqlInstallerConsole ウィンドウをポップアップする問題の解決策

MySql は常に MySQLInstallerConsole.exe ウィンドウを定期的にポップア...

アイデアがWebプロジェクトを公開した後、Tomcatサーバーがプロジェクトとそのソリューションを見つけることができません

概要プロジェクトは正常に作成され、正常にデプロイされましたが、以下に示すように、Tomcat サーバ...

モバイルの赤い封筒の雨機能ページを実装するための JavaScript HTML

この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...

Vue 3 での watch と watchEffect の新しい使い方

目次1. 時計の新しい使い方1.1. ウォッチの使用構文1.2. 複数の属性値を監視する1.3. 参...