微信小程序开发(七)小程序支付-查询订单

来源:互联网 发布:淘宝联盟下单后失效 编辑:程序博客网 时间:2024/05/21 17:03

应用场景

该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
◆ 调用支付接口后,返回系统错误或未知交易状态情况;
◆ 调用被扫支付API,返回USERPAYING的状态;
◆ 调用关单或撤销接口API之前,需确认支付状态;

接口说明

这里写图片描述
这里如果已经做好了统一下单,《微信小程序开发(五)小程序支付-统一下单》。再做查询订单就是一件很简单的事情了。
但是这里需要注意的是商户订单号-out_trade_no这个,因为我们在统一下单的时候有这个,查村订单也是根据这个区查询,后面的关闭订单,退款都可以根据这个去操作。

代码实现

/* * 根据商户订单号out_trade_no 查询订单 */router.all('/api/wxpay/orderQuery', function(req, res, next) {    var param = req.query || req.params;     var out_trade_no = param.out_trade_no;    var nonce_str = getNonceStr();    var bodyData = '<xml>';    bodyData += '<appid>' + wxConfig.AppID + '</appid>';    bodyData += '<mch_id>' + wxConfig.Mch_id + '</mch_id>';    bodyData += '<nonce_str>' + nonce_str + '</nonce_str>';    bodyData += '<out_trade_no>' + out_trade_no + '</out_trade_no>';    var sign = orderQuerySign(        wxConfig.AppID,        wxConfig.Mch_id,         nonce_str,        out_trade_no    );    bodyData += '<sign>' + sign + '</sign>';    bodyData += '</xml>';    var urlStr = 'https://api.mch.weixin.qq.com/pay/orderquery';    request({        url: urlStr,        method: 'POST',        body: bodyData    }, function (error, response, body) {        if (!error && response.statusCode == 200) {            var returnValue = {};            parseString(body, function (err, result) {                if (result.xml.return_code[0] == 'SUCCESS' && result.xml.result_code[0] == 'SUCCESS') {                    returnValue.msg = '操作成功';                    returnValue.status = '100';                    returnValue.result = result;                    res.end(JSON.stringify(returnValue));                } else{                    returnValue.msg = result.xml.return_msg[0];                    returnValue.status = '102';                    returnValue.result = result;                    res.end(JSON.stringify(returnValue));                }            });        }    })});// 查询/关闭订单 签名算法 function orderQuerySign(appid,mch_id,nonce_str,out_trade_no) {    var ret = {        appid: appid,        mch_id: mch_id,        nonce_str: nonce_str,        out_trade_no: out_trade_no    };    var str = raw(ret);    str = str + '&key='+key;    var md5Str = cryptoMO.createHash('md5').update(str).digest('hex');    md5Str = md5Str.toUpperCase();    return md5Str;};

总结

其实代码实现很简单就是看微信的文档就可以。

原创粉丝点击