requestpayment的success回调不点完成按钮不执行的问题
requestpayment的success()回调仅用来显示提示信息和页面跳转,不点完成按钮不执行并不影响业务数据的处理,真正的支付成功回调是在回调函数中完成的,以下是云开发接入微信支付的实操代码:
//拉起微信支付
let payData = {
"functionName": payConf.payCallBack, //支付成功调用的回调函数,主逻辑在这里
"envId": payConf.envId,
"subMchId": payConf.mchid,
nonceStr,
"body": app.globalData.siteName,
"outTradeNo": order._id,
"totalFee": order.total_fee,
"spbillCreateIp": "127.0.0.1", //这个就这样写,可以通过
"tradeType": "JSAPI",
}
console.log('payData:', payData)
wx.cloud.callFunction({
name: 'wxPay',
data: {
payData,
},
success: res => {
const payment = res.result.payment
console.log('payment:', payment)
wx.requestPayment({
...payment,
success(res) {
//支付成功后,开发工具中并不会执行success(),因为开发工具无法感知手机的“完成”按钮操作!!
//在手机上测试完全正确!
console.error('支付成功', res)
setTimeout(function () {
wx.redirectTo({
url: app.globalData.urlPayok + '?act=1',
})
}, 200)
},
fail(err) {
//用户关闭支付窗口,不用跳转页面
console.error('支付失败', err)
},
})
},
fail: (err) => {
console.error('拉起微信支付失败', err)
wx.navigateTo({
url: app.globalData.urlPayok + '?act=3',
})
}
})
还有一点测试时需要注意的是:
支付成功后,开发工具中并不会执行success(),因为开发工具无法感知手机的”完成“按钮的操作。