nodejs微信支付之申请退款
本文继续介绍nodejs接入微信支付,前面说过了统一下单和支付结果通知。下面再来说一下查询订单
查询订单
查询订单其实有了前两篇文章的介绍,基本上也没必要再多说了,基本上就是调用的问题,前面已经封装好了方法,这里说一下基本的步骤:
- 构造参数,生成签名(使用exports.getWechatSign)
- 将对象转换为xml格式(使用exports.json2xml)
- 发起请求,发送xml格式(使用common.post_https_requestXml)
- 接收xml格式数据(使用exports.parseReqXmlData)
- 验签(使用exports.checkPayResultSign)
如此订单查询也就结束了,相关的方法在前两篇文章已经写过了,可自行前往查看。
申请退款
关于申请退款这个方法相对麻烦一点的就是需要双向证书,微信文档里说的是需要安装在本机上,其实使用nodejs并不需要安装,只需要在请求的时候进行相关的配置就可以了。需要注意的是使用nodejs需要的证书是p12后缀的证书。
其实相关的方法在统一下单里面说过了,在这里再介绍一遍:
//封装post请求 exports.post_https_requestXml = function (urlstring, post_data, callback) { callback = callback || function () { }; var urlData = url.parse(urlstring); var hostIP = urlData.host; if (urlData.host.indexOf(":") > 0) { hostIP = urlData.host.substr(0, urlData.host.indexOf(":")); } var options = { hostname: hostIP, port: urlData.port, path: urlData.path, method: 'POST', }; if(post_data.agentOptions){ options.pfx = post_data.agentOptions.pfx; options.passphrase = post_data.agentOptions.passphrase; } var req = https.request(options, function (res) { var body = ""; res.setEncoding('utf8'); res.on('data', function (chunk) { body += chunk; }); res.on('end', function () { callback(body); }); }); req.on('error', function (e) { console.log('error:' + e.message); callback(''); }); req.write(post_data.body); req.end(); };
在请求的参数中添加上一个agentOptions参数,其中pfx为证书内容,passphrase为证书的密码,默认为商户号,调用方法如下:
exports.refundRequest = (requestUrl,jsonxml,pwd)=>{ return new Promise((resolve,reject)=>{ fs.readFile(path.resolve(process.cwd(),"payCert/apiclient_cert.p12"),function(err,data){ if(!err){ let requestOptions = { body:jsonxml, agentOptions:{ pfx:data, passphrase: pwd, } }; common.post_https_requestXml(requestUrl,requestOptions,async (xmlRes)=>{ try{ console.log(xmlRes); if(xmlRes.indexOf("xml")>=0){ let ParaseXml= await exports.parseXml(xmlRes); resolve(ParaseXml); }else{ resolve({ success:false, msg:xmlRes }); } }catch(e){ reject(e) } }) }else{ reject(e) } }); }) };
解决了双向证书的问题之后基本上流程和查询订单流程就差不多了,就不再赘述了。
后续将继续介绍微信支付的退款结果通知
来源https://www.oecom.cn/nodejs-wechat-pay-3/