有付款就会有退款
注意,退款支持部分退款
左口袋的钱退到右口袋罗
{transaction_id: ' 4200000005201712165508745023 ',//交易 out_trade_no:“5 b97cba0ae164bd58dfe9e77891d3aaf ',//自己这头的交易号 out_refund_no:“6 f3240c353934105be34eb9f2d364cec ',//退款订单,自己生成 total_fee: 1、//退款总额 nonce_str:‘1 xszw0op0kcdkomyxnyxheuf1faqefhu ',//随机串 appid:“wxff154ce14ad59a55 ',//小程序appid mch_id: ' 1447716902 ',//微信支付商户id 标志:416年fcb62f9b8f03c82e83052cc77524b//签名,weixin-pay这个模块帮助生成}
然后由wxpay为我们生成其余字段,比如nonce_str,符号,当然还少不了p12证书,
这个早选在wxpay初始代码里已经配置了,可以:fs。readFileSync (__dirname +“/. ./. ./. ./证书/apiclient_cert.p12”),//微信商户平台证书
const WXPay=要求(“weixin-pay”);//引入weixin-pay这个第三方模块 const {weapp}=要求(“. ./. ./. ./跑龙套/配置);//我自己的全局配置文件,包括了appid关键等 const fs=要求(fs); const wxpay=wxpay ({ appid: weapp.APPID, mch_id: weapp.MCHID, partner_key: weapp。键,//微信商户平台API秘密,非小程序的秘密 可以:fs。readFileSync (__dirname +“/. ./. ./. ./证书/apiclient_cert.p12 '), }); 模块。出口=wxpay;
用于验证与错误回调
const wxpay=要求('/wxpay。'); const validateSign==结果比;{ const标志=wxpay.sign(结果); 如果(标志!==results.sign) { const错误=new错误(“微信返回参数签名结果不正确的); 错误。代码=癐NVALID_RESULT_SIGN”; 把错误; }; 返回结果; }; const handleError==结果比;{ 如果结果。return_code==='失败'){ 把新的错误(results.return_msg); } 如果结果。result_code !=='成功'){ const错误=new错误(results.err_code_des); 错误。代码=results.err_code; 把错误; } 返回结果; }; 模块。出口={ validateSign, handleError, }; >之前
退款逻辑是这样的,先从自己这边的顺序数据表中查出transaction_id/out_trade_no/total_fee,再拼上自己生成的out_refund_no退款单号,本次退款部分金额refund_fee,最后由weixin-pay这个模块下的wxpay.refund调起就可以了,成功就把订单状态改成“退款成功”
//退款 路由器。帖子(/退款,函数(点播,res) { Order.findById (req.body。_id(呃,顺序)=比;{ 如果(err) { console.log(错); } console.log(秩序);//生成微信设定的订单格式 var=https://www.yisu.com/zixun/{数据 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(数据);//先查询订单,再退订单 wxpay。(呃,结果退款(数据)=比;{ 如果(err) { console.log(错); res.send ( utils.json ({ 代码:500, 味精:“退款失败的 }) ); }//返回退款请求成功后,要将订单状态改成退回 如果结果。result_code==='成功'){ console.log(结果); 秩序。状态=巴嘶埂? 秩序。保存((呃,响应)=比;{ res.send ( utils.json ({ 味精:“退款成功的 }) ); }); 其他}{ res.send ( utils.json ({ 代码:500, 味精:result.err_code_des }) ); } }); }); });
1。这次遇到的坑是refund_fee忘记传值,也就是说微信退款是支持部分退款的,如果是全额退款,那么将它赋值为total_fee相同
2。网上说的op_user_id: weapp.MCHID这个参数是非必选的
基于node . js实现微信支付退款功能