1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【愚公系列】10月 微信小程序-电商项目-微信支付小程序确认支付结果和退款功能

【愚公系列】10月 微信小程序-电商项目-微信支付小程序确认支付结果和退款功能

时间:2020-08-09 08:39:20

相关推荐

【愚公系列】10月 微信小程序-电商项目-微信支付小程序确认支付结果和退款功能

文章目录

前言一、微信支付小程序确认支付结果和退款功能实现1.确认支付结果2.退款功能实现

前言

微信小程序在支付成功后会给注册的接口发消息来通知订单支付成功的状态,下面是微信和接口通信的数据格式:

微信通知频率为:

15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h-总计24h4m。

一、微信支付小程序确认支付结果和退款功能实现

1.确认支付结果

const getRawBody = require( 'raw-body')// all /apis/pay_notify// 本地测试:http://localhost:3000/apis/pay_notify?test=true// 微信支付成功通知接口defaultRouter.all('/apis/pay_notify', async ctx=>{const testInLocal = !!ctx.request.query.test// console.log('testInLocal',testInLocal);var rawText = await getRawBody(ctx.req, {encoding: 'utf-8'});if (testInLocal){rawText = `<xml><appid><![CDATA[小程序appid]]></appid><attach><![CDATA[支付测试]]></attach><bank_type><![CDATA[OTHERS]]></bank_type><cash_fee><![CDATA[1]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[1410138302]]></mch_id><nonce_str><![CDATA[1eTp670VVN04aRlpGBpHH0fKbEUgqMwK]]></nonce_str><openid><![CDATA[o-hrq0EVYOTJHX9MWqk-LF-_KL0o]]></openid><out_trade_no><![CDATA[vEPk8sib229F1rDkRgGhPh]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[92AB862CF14B22193DDE9D86DC2D3701]]></sign><time_end><![CDATA[2009140319]]></time_end><total_fee>1</total_fee><trade_type><![CDATA[JSAPI]]></trade_type><transaction_id><![CDATA[420000072820097892062758]]></transaction_id></xml>`}try {var retobj = await wepay.notifyParse(rawText);console.log ("payNotify parsed:", retobj);/* retobj示例{appid: 'wxc3db312ddf9bcb01',attach: '附加信息',bank_type: 'OTHERS',cash_fee: '1',fee_type: 'CNY',is_subscribe: 'Y',mch_id: '1410138302',nonce_str: '6ma2Wk08YBGkvAaFAtSYP4el6wDBB4hd',openid: 'o-hrq0EVYOTJHX9MWqk-LF-_KL0o',out_trade_no: '1aB6PprMLnwu7ev6aBgSZzw',result_code: 'SUCCESS',return_code: 'SUCCESS',sign: 'BDCFDAD06CCF5254C88F29D69B871FAE',time_end: '2031173616',total_fee: '1',trade_type: 'JSAPI',transaction_id: '420000072720317871404188'}// return_code SUCCESS/FAIL此字段是通信标识,非交易标识// 业务结果result_code SUCCESS/FAIL*/// emitter.wechatSendOut({cmd:'payNotify', payload: retobj});if (retobj){// 商户单号let outTradeNo = retobj.out_trade_nolet resultCode = retobj.result_codelet payState = 0if (resultCode === 'SUCCESS'){// 支付成功,设置订单状态console.log("SUCCESS",resultCode, outTradeNo);payState = 1}else{payState = 2}// 存储交易单号备用let transactionId = retobj.transaction_id// 成功与失败都要同步订单状态let res = await Order.update({payState,transactionId},{where:{outTradeNo}})console.log(`支付状态更新${res[0] > 0?'成功':'失败'}`)}var xml = wepay.notifyResult({return_code: 'SUCCESS', return_msg: 'OK'});console.log("payNotify process ok: ", xml);ctx.body = xml;} catch (e) {console.log ("payNotify error: ", e);var xml = wepay.notifyResult({return_code: 'FAILURE', return_msg: 'FAIL'});ctx.body = xml;}})

2.退款功能实现

// 这个接口不好使,使用koa3-weixin// http://localhost:3000/apis/pay_refund?no=1aB6PprMLnwu7ev6aBgSZzwdefaultRouter.get("/apis/pay_refund",async ctx=>{let {no:out_trade_no} = ctx.request.querydebug('pay_refund....')// 尝试退款var retobj = await wepay.refund({out_trade_no,out_refund_no: short().new(),total_fee: 1,refund_fee: 1});ctx.status = 200ctx.body = retobj;})// 这个可以,使用weixin-paydefaultRouter.get("/apis/pay_refund2",async ctx=>{let {no:out_trade_no} = ctx.request.queryvar data = {out_trade_no,out_refund_no: short().new(),total_fee: 1,refund_fee: 1};// 尝试退款,封装原方法let res = await (()=>{return new Promise((resolve, reject)=>{wepay2.refund(data,(err, result) => {if (err) reject(err)else resolve(result)});})})()console.log('res',res);ctx.status = 200ctx.body = res;})

【愚公系列】10月 微信小程序-电商项目-微信支付小程序确认支付结果和退款功能实现(node)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。