ホームページ >WeChat アプレット >ミニプログラム開発 >WeChat決済返金機能を実装するnode.jsについて
この記事では主に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 サイトの他の関連記事を参照してください。