前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs微信支付之申请退款

nodejs微信支付之申请退款

作者头像
OECOM
发布2020-07-01 16:53:41
1.2K0
发布2020-07-01 16:53:41
举报
文章被收录于专栏:OECOMOECOM

本文继续介绍nodejs接入微信支付,前面说过了统一下单和支付结果通知。下面再来说一下查询订单

查询订单

查询订单其实有了前两篇文章的介绍,基本上也没必要再多说了,基本上就是调用的问题,前面已经封装好了方法,这里说一下基本的步骤: - 构造参数,生成签名(使用exports.getWechatSign) - 将对象转换为xml格式(使用exports.json2xml) - 发起请求,发送xml格式(使用common.post_https_requestXml) - 接收xml格式数据(使用exports.parseReqXmlData) - 验签(使用exports.checkPayResultSign)

如此订单查询也就结束了,相关的方法在前两篇文章已经写过了,可自行前往查看。

申请退款

关于申请退款这个方法相对麻烦一点的就是需要双向证书,微信文档里说的是需要安装在本机上,其实使用nodejs并不需要安装,只需要在请求的时候进行相关的配置就可以了。需要注意的是使用nodejs需要的证书是p12后缀的证书。

其实相关的方法在统一下单里面说过了,在这里再介绍一遍:

代码语言:javascript
复制
//封装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为证书的密码,默认为商户号,调用方法如下:

代码语言:javascript
复制
 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)
            }
        });
    })

};

解决了双向证书的问题之后基本上流程和查询订单流程就差不多了,就不再赘述了。

后续将继续介绍微信支付的退款结果通知

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查询订单
  • 申请退款
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档