requestpayment的success回调不点完成按钮不执行的问题
发布于 4 年前 作者 xzhao 2814 次浏览 来自 分享

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,
      },
      successres => {
        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(),因为开发工具无法感知手机的”完成“按钮的操作。

回到顶部