NodejsはWeChatコードスキャン決済機能を実装します
準備
WeChatパブリックアカウント-appid
WeChatマーチャントアカウント-mch_id
キーの値(署名アルゴリズムで必要です。実際には32ビットのパスワードで、md5を使用して生成できます)(キー設定パス) : WeChat マーチャント プラットフォーム (pay.weixin.qq.com) --> アカウント設定 --> API セキュリティ --> キー設定)
QR コードをスキャンして支払い - 統一された注文
以下はWeChat モード 2 番目に、比較的シンプルなので
let MD5 = require('md5'), xml2js = require('xml2js'), url = "https://api.mch.weixin.qq.com/pay/unifiedorder",// 下单请求地址 appid = '公众号id', mch_id = '微信商户号'; notify_url = '回调地址', out_trade_no = '自己设置的订单号',// 微信会有自己订单号、我们自己的系统需要设置自己的订单号 total_fee = '订单金额',// 注意,单位为分 body = '商品简单描述', trade_type = 'NATIVE',// 交易类型,JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 nonce_str = moment().format('YYYYMMDDHHmmssSSS'),// 随机字符串32位以下 stringA = `appid=${公众号id}&body=${body}&mch_id=${微信商户号}&nonce_str=${nonce_str}¬ify_url=${ notify_url}&out_trade_no=${out_trade_no}&spbill_create_ip=${ctx.request.ip}&total_fee=${total_fee}&trade_type=${trade_type}`, stringSignTemp = stringA + "&key=xxxxxxxxxxxxxxxxx", //注:key为商户平台设置的密钥key sign = MD5(stringSignTemp).toUpperCase(); //注:MD5签名方式
上記は必要なパラメータの一部です
署名生成アルゴリズムについては、WeChat 公式を参照してください: https://pay.weixin.qq.com/wiki/doc /api/native.php ?chapter=4_3
spbill_create_ip は端末の IP アドレスです
すべてのパラメータは以下の XML に結合されます
const formData = "<xml>"; formData += "<appid>" + appid + "</appid>"; //appid formData += "<body>" + body + "</body>"; //商品或支付单简要描述 formData += "<mch_id>" + mch_id + "</mch_id>"; //商户号 formData += "<nonce_str>" + nonce_str + "</nonce_str>"; //随机字符串,不长于32位 formData += "<notify_url>" + notify_url + "</notify_url>"; //支付成功后微信服务器通过POST请求通知这个地址 formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>"; //订单号 formData += "<total_fee>" + total_fee + "</total_fee>"; //金额 formData += "<spbill_create_ip>" + ctx.request.ip + "</spbill_create_ip>"; //ip formData += "<trade_type>NATIVE</trade_type>"; //NATIVE会返回code_url ,JSAPI不会返回 formData += "<sign>" + sign + "</sign>"; formData += "</xml>"; // 这里使用了egg里面请求的方式 const resultData = yield ctx.curl(url, { method: 'POST', content: formData, headers: { 'content-type': 'text/html', }, }); // xml转json格式 xml2js.parseString(resultData.data, function (err, json) { if (err) { new Error("解析xml报错") } else { var result = formMessage(json.xml); // 转换成正常的json 数据 console.log(result) //打印出返回的结果 } }) var formMessage = function (result) { var message = {}; if (typeof result === 'object') { var keys = Object.keys(result); for (var i = 0; i < keys.length; i++) { var item = result[keys[i]]; var key = keys[i]; if (!(item instanceof Array) || item.length === 0) { continue; } if (item.length === 1) { var val = item[0]; if (typeof val === 'object') { message[key] = formMessage(val); } else { message[key] = (val || '').trim(); } } else { message[key] = []; for (var j = 0, k = item.length; j < k; j++) { message[key].push(formMessage(itemp[j])); } } } } return message; }
egg リクエストメソッドは上で使用されており、ネイティブノードはuse request
var request = require('request'); request({ url: url, method: "POST", body: formData }, function(error, response, body) { if (!error && response.statusCode == 200) { } });
リクエストが成功すると、最終的に XML が返され、それを code_url と out_trade_no を持つ json 形式に解析して、これら 2 つをフロントエンドに返す必要があります。 QR コードを生成してユーザーに表示し、コードをスキャンして支払いを完了します
支払いが成功したかどうかを監視します
上記の操作が完了した後、ユーザーが支払いを完了したかどうかを知る必要があります。ユーザーはこのページに留まり、ユーザーが支払いを完了した後に支払いが成功したことをユーザーに通知する必要があるためです。
まず、ユーザーが支払いを開始するときに、ユーザーがコードをスキャンして支払いできるようにするための QR コードを生成します。また、タイマーを設定し、毎回リクエストを送信する必要もあります。この時点で、バックエンドは注文クエリ用のインターフェイスを作成する必要があります。これはシステム内の注文番号です。このデータをバックエンドの注文クエリ インターフェイスに送信します。バックエンドは WeChat クエリ インターフェイス アドレス https://api.mch.weixin.qq.com/pay/orderquery を要求します。インターフェイス アドレスが WeChat によって返される XML とは異なることを除いて、プロセスは上記と同じです。返されたフィールドには SUCCESS と NOTPAY のステータスがあり、支払いがフロントエンドに返されたかどうかによって判断できます。成功した場合、ユーザーは正常に支払うように求められ、タイマーが閉じられます。
コールバックアドレス
これは非常に重要な部分であり、実際にはほとんどの操作を完了できますが、たとえば、ユーザーのコンピュータが切断されているため、リクエストを送信できない場合や、支払いができない場合など、特殊な状況が発生します。携帯電話で行われるため、ユーザーの支払い情報を記録できなくなります。このとき、コールバック アドレスは非常に重要です
コールバック アドレスを設定します
WeChat Merchant Center -> Product Center -> Development Configuration -> QR コードをスキャンして支払います
その後行う必要があることつまり、バックエンドで post を使用します。WeChat によって送信された非同期コールバック情報を受信します。これも XML 形式です。XML の受信がサポートされていない場合は、空のデータを取得する可能性があることに注意してください
また、保存中に注意する必要があります。ユーザーの支払い情報を確認するには、繰り返しの操作を避けるために、まず注文が支払われるかどうかを確認する必要があります。 概要
初めての場合は、次の点を確認してください。注意すべきことのリストです
- WeChatはデータをXML形式で返す必要があります。データを取得するのに便利なように、プラグインを介して JSON に変換します
- 返された code_url は、フロントエンドの QR コードを生成するために使用されます。その後、タイマーを設定して、注文が支払われ、最後にユーザーに結果が通知されます
- コールバック アドレスは非常に重要です。バックエンドは、WeChat 情報によって返されたコールバックを受信するためにポストする必要があります。その後、情報を保存しますが、その前に、ユーザーの支払い情報を確認するには、追加が繰り返されることを避けるために、注文が保存されているかどうかを知る必要があります。また、返された XML データは、通常の方法では受信できないため、バックエンドで受信できるようにする必要があり、追加の設定が必要です。
- 関連する推奨事項:
PC で WeChat スキャン支払いが成功した後、PHP バージョンのコード共有に自動的にジャンプ
WeChat スキャン コード支払いを実装するための php サンプル コード共有
以上がNodejsはWeChatコードスキャン決済機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

Web 開発において Node.js と Java にはそれぞれ長所と短所があり、どちらを選択するかはプロジェクトの要件によって異なります。 Node.js はリアルタイム アプリケーション、迅速な開発、マイクロサービス アーキテクチャに優れており、Java はエンタープライズ グレードのサポート、パフォーマンス、セキュリティに優れています。

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。
