1. 程式人生 > >微信小程式開發(八)小程式支付-關閉訂單

微信小程式開發(八)小程式支付-關閉訂單

應用場景

以下情況需要呼叫關單介面:商戶訂單支付失敗需要生成新單號重新發起支付,要對原訂單號呼叫關單,避免重複支付;系統下單後,使用者支付超時,系統退出不再受理,避免使用者繼續,請呼叫關單介面。
注意:訂單生成後不能馬上呼叫關單介面,最短呼叫時間間隔為5分鐘。

介面說明

這裡寫圖片描述
這一依然要注意的是商戶訂單號-out_trade_no 這個,因為我們退款是根據這去微信那邊退款的。

程式碼實現

/*
 * 根據商戶訂單號out_trade_no 關閉訂單
 */
router.all('/api/wxpay/closeOrder', 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/closeorder'; 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)); } }); } }) });