この記事では主にWeChatの支払い返金機能のnode.js実装を紹介します。WeChatの開発では、この種の機能は非常に一般的です。必要な場合は参考にしてください。
起源 支払いが行われた場合は返金されます
返金は部分返金をサポートしていることに注意してください
左ポケットのお金は右ポケットに返されます
返金リクエストは0.01元今回開始された払い戻しはリアルタイムで受信されるため、ミニ プログラムでユーザーが開始した払い戻しはバックエンドへの単なるリクエストであり、払い戻し操作はバックエンドのレビュー担当者がリクエストが正しいことを確認した後にのみ WeChat で開始されます。 。
サードパーティモジュールを導入しますpackage.jsonに「weixin-pay」:「^1.1.7」を追加します
コードディレクトリ構造
パラメータを入力します
{ transaction_id: '4200000005201712165508745023', // 交易 out_trade_no: '5b97cba0ae164bd58dfe9e77891d3aaf', // 自己这头的交易号 out_refund_no: '6f3240c353934105be34eb9f2d364cec', // 退款订单,自己生成 total_fee: 1, // 退款总额 nonce_str: '1xSZW0op0KcdKoMYxnyxhEuF1fAQefhU', // 随机串 appid: 'wxff154ce14ad59a55', // 小程序 appid mch_id: '1447716902', // 微信支付商户id sign: '416FCB62F9B8F03C82E83052CC77524B' // 签名,weixin-pay这个module帮助生成 }
その後、wxpayはnonce_str、sign、そしてもちろんp12証明書などの残りのフィールドを生成します
この初期の選択は、wxpayの初期コードpfxで構成されています。 fs .readFileSync(__dirname + '/../../../cert/apiclient_cert.p12'), //WeChat マーチャント プラットフォーム証明書のソース コード
lib/wechat/utils/wxpay.js
const WXPay = require('weixin-pay'); // 引入weixin-pay这个第三方模块 const {weapp} = require('../../../utils/config'); // 我自己的全局配置文件,包括了appid key 等 const fs = require('fs'); const wxpay = WXPay({ appid: weapp.APPID, mch_id: weapp.MCHID, partner_key: weapp.KEY, //微信商户平台 API secret,非小程序 secret pfx: fs.readFileSync(__dirname + '/../../../cert/apiclient_cert.p12'), }); module.exports = wxpay;
検証とエラーコールバック用のutil.jsツールクラスもありますconst wxpay = require('./wxpay');
const validateSign = results => {
const sign = wxpay.sign(results);
if (sign !== results.sign) {
const error = new Error('微信返回参数签名结果不正确');
error.code = 'INVALID_RESULT_SIGN';
throw error;
};
return results;
};
const handleError = results => {
if (results.return_code === 'FAIL') {
throw new Error(results.return_msg);
}
if (results.result_code !== 'SUCCESS') {
const error = new Error(results.err_code_des);
error.code = results.err_code;
throw error;
}
return results;
};
module.exports = {
validateSign,
handleError,
};
返金リクエストの開始
とここで、注文データ テーブルでtransaction_id/out_trade_no/total_feeを見つけて、自分で生成したout_refund_no返金注文番号を追加します。最後に、weixin-payモジュールのwxpay.refundによって呼び出されます。成功したら、注文ステータスを「返金成功」に変更します// 退款
router.post('/refund', function(req, res) {
Order.findById(req.body._id, (err, order) => {
if (err) {
console.log(err);
}
console.log(order);
// 生成微信设定的订单格式
var data = {
transaction_id: order.transactionId,
out_trade_no: order.tradeId,
out_refund_no: uuid().replace(/-/g, ''),
total_fee: order.amount,
refund_fee: order.amount
};
console.log(data);
// 先查询订单,再退订单
wxpay.refund(data, (err, result) => {
if (err) {
console.log(err);
res.send(
utils.json({
code: 500,
msg: '退款失败'
})
);
}
// 返回退款请求成功后,要将订单状态改成REFUNDED
if (result.result_code === 'SUCCESS') {
console.log(result);
order.status = 'REFUNDED';
order.save((err, response) => {
res.send(
utils.json({
msg: '退款成功'
})
);
});
} else {
res.send(
utils.json({
code: 500,
msg: result.err_code_des
})
);
}
});
});
});
今回遭遇した落とし穴は、refund_fee が値を渡すのを忘れたことです。つまり、WeChat です。返金は一部返金をサポートします。全額返金の場合は、total_fee
2 と同じ値を割り当てます。weapp.MCHID パラメータはオプションです
3. Transaction_id と out_trade_no は 1 つで十分です。払い戻しは、transaction_id が記録されていない場合でも開始できます (たとえば、支払いが成功した場合のコールバックが書き込まれていない場合)。前者の優先順位が後者よりも高く、意図的に間違った場合にそうなりました。最初に確認しました。 4. appid が販売者番号と一致しないというエラーが報告されました。return_code: 'FAIL'、return_msg: '販売者番号 mch_id が appid と一致しません' ミニ プログラムがバインドされていないことが判明しました。 WeChat Payの公式アカウントです。これは本当に詐欺です。
返金が成功した場合に WeChat によって返されるデータ
appid:"wxff154ce14ad59a55" cash_fee:"1" cash_refund_fee:"1" coupon_refund_count:"0" coupon_refund_fee:"0" mch_id:"1447716902" nonce_str:"c44wOvB6a4bQJfRk" out_refund_no:"9ace1466432a4d548065dc8df95d904a" out_trade_no:"5b97cba0ae164bd58dfe9e77891d3aaf" refund_channel:"" refund_fee:"1" refund_id:"50000705182017121702756172970" result_code:"SUCCESS" return_code:"SUCCESS" return_msg:"OK" sign:"5C2E67B3250054E8A665BF1AE2E9BDA3" total_fee:"1" transaction_id:”4200000005201712165508745023”
繰り返しの返金は次のように返されます
appid:"wxff154ce14ad59a55" err_code:"ERROR" err_code_des:"订单已全额退款" mch_id:"1447716902" nonce_str:"KP1YWlU7a5viZEgK" result_code:"FAIL" return_code:"SUCCESS" return_msg:"OK" sign:”C2A7DED787BEA644C325E37D96E9F41C”
最後に もしあなたが返金機能がある場合、または返金機能を作成したくない場合はどうすればよいですか? 実際、WeChat Pay のバックエンド pay.weixin.qq.com を通じて返金できますが、返金したくない場合はどうすればよいですか?注文ステータスを手動で返金ステータスに設定するのを忘れる場合。
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項: JS を使用して WeChat 支払いポップアップ機能を実装する方法
WeChat ミニ プログラムにカスタム トーストを実装する方法
以上がWeChat決済返金機能を実装するnode.jsについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

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

ホットトピック









