最近公司即将开通视频号直播售卖小程序的商品,结果在测试的时候发现以前用于小程序支付的wx.requestPayment方法直接走fail,
wx.requestPayment({
appId: pay_info.appId,
timeStamp: pay_info.timeStamp,
nonceStr: pay_info.nonceStr,
package: pay_info.package,
signType: pay_info.signType,
paySign: pay_info.paySign,
success: function (res) {
...
},
fail: function (res) {
console.log(res)
wx.showToast({
title: '已取消支付',
icon: 'none',
duration: 1200
})
..
}
});
这是原来的代码,后来发现从视频号进入小程序属于特殊场景需要使用requestOrderPayment
wx.requestOrderPayment({
timeStamp: pay_info.timeStamp,
nonceStr: pay_info.nonceStr,
package: pay_info.package,
signType: pay_info.signType,
paySign: pay_info.paySign,
orderInfo,
success: function (res) {
...
},
fail: function (res) {
if (res.errMsg === 'requestOrderPayment:fail cancel') {
wx.showToast({
title: '已取消支付',
icon: 'none',
duration: 1200
})
} else {
wx.showToast({
title: '系统出错',
icon: 'error'
})
}
},
})
其中orderInfo是特殊场景才需要传的,说道这里,需要用到另一个方法来获取scene
var scene = wx.getLaunchOptionsSync().scene
wx.setStorageSync('scene', scene)
在app.js中onLunch方法中加入上面两句即可获取,
if (scene === 1175 || scene === 1176 || scene === 1177) {
orderInfo=pay_info.orderInfo
}
根据scene判断是否需要orderInfo
网友评论