收藏
回答

微信JSAPI: choseWXPay中的bug

在调用微信api支付的时候,需要有按钮点击触发才能支付,如果没有用户触发点击事件,支付就会失败;

js直接调起的支付:

用户点击按钮触发的支付:


如果是用微信h5调起的支付,不需要点击也能触发支付也能成功

 function WeixinPay(data, callback) {
      if (typeof WeixinJSBridge == "undefined") {//微信浏览器内置对象。参考微信官方文档
          if(document.addEventListener) {
            document.addEventListener('WeixinJSBridgeReady', onBridgeReady(data, callback), false);
          }
          else if (document.attachEvent) {
            document.attachEvent('WeixinJSBridgeReady', onBridgeReady(data, callback));
            document.attachEvent('onWeixinJSBridgeReady',onBridgeReady(data, callback));
          }
        } 
        else{
          onBridgeReady(data, callback);
        }
    }


    function onBridgeReady(data, callback) {
      WeixinJSBridge.invoke(
          'getBrandWCPayRequest',{
            "appId"data.appId,     //公众号名称,由商户传入
            "timeStamp"data.timeStamp, //时间戳,自1970年以来的秒数
            "nonceStr"data.nonceStr, //随机串
            "package"data.package,
            "signType"data.signType, //微信签名方式:
            "paySign"data.paySign //微信签名
          },(res) => {
            // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
            if(res.err_msg == "get_brand_wcpay_request:ok"){
                callback('success')
            }else{
                callback('error')
            }
          }
        );
    }
最后一次编辑于  2020-05-31
回答关注问题邀请回答
收藏

2 个回答

  • 微信支付技术助手8
    微信支付技术助手8
    2020-06-01

    您好,缺少appid。说明在传入参数的时候appid没有传或者上传错误,按照这里的提示,在这一步注入appid,仔细检查下

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4

    2020-06-01
    有用
    回复
  • 广宝哥
    广宝哥
    2020-05-31
    有可能是这种场景:微信的JSAPI需要签名,注入chooseWXPay权限,页面初始化就去调用改支付api,这时候chooseWXPay权限还没有注册成功就调用微信支付chooseWXPay了。而微信的h5支付不需要chooseWXPay权限,所以可以调用成功!
    
    2020-05-31
    有用
    回复
登录 后发表内容
问题标签