收藏
回答

JSAPI支付,getBrandWCPayRequest方法在未进行支付时就触发了回调?

WeixinJSBridge.invoke(
      'getBrandWCPayRequest',
      {${result}},//josn串
      function (res)
     {
        if(res.err_msg == "get_brand_wcpay_request:ok"){
           location.href="/pay/pay/wxpay?action=h5pay&out_trade_no=${code}";
         }
         else if(res.err_msg == "get_brand_wcpay_request:cancel"){
             alert('支付取消'+res.err_msg);
         }
        else{
            alert("支付未成功!"+res.err_msg+res.err_desc );
        }            
    }
);


在微信公众号中打开页面,页面加载完成后我们就会调用该方法进行支付处理,按照预期,该方法会调起微信支付。

微信支付完成后应进行回调进入js回调方法,res.err_msg 应为:get_brand_wcpay_request:ok或get_brand_wcpay_request:cancel

但是在实际使用中发现会出现页面加载完成未调起微信支付时即调用回调方法 ,回调参数值为

{'err_msg':'pre_verify_jsapi:ok'}

之后能正常弹出支付密码窗口,完成支付后不能正常触发回调方法。


微信支付版本为V2

发现问题的微信app版本为:version 8.0.16





回答关注问题邀请回答
收藏

2 个回答

  • 北望沣渭
    北望沣渭
    2021-11-02
    function onBridgeReady(){
       WeixinJSBridge.invoke(
          'getBrandWCPayRequest', {
             "appId":"wx2421b1c4370ec43b",     //公众号ID,由商户传入     
             "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
             "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
             "package":"prepay_id=u802345jgfjsdfgsdg888",     
             "signType":"MD5",         //微信签名方式:     
             "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
          },
          function(res){
          if(res.err_msg == "get_brand_wcpay_request:ok" ){
          // 使用以上方式判断前端返回,微信团队郑重提示:
                //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
          } 
       }); 
    }
    if (typeof WeixinJSBridge == "undefined"){
       if( document.addEventListener ){
           document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
       }else if (document.attachEvent){
           document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
           document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
       }
    }else{
       onBridgeReady();
    }
    


    https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

    代码比对比对看看,是不是漏了注册 `WeixinJSBridgeReady` Listenner

    2021-11-02
    有用 1
    回复 2
    • hm
      hm
      2021-11-02
      有的,做的时候就是照搬的
      2021-11-02
      回复
    • 北望沣渭
      北望沣渭
      2021-11-02回复hm
      那估计是「微信」有调整了。。。
      2021-11-02
      回复
  • 墨色梧桐
    墨色梧桐
    2021-12-19

    我也遇到了,请问有解决方案吗

    2021-12-19
    有用
    回复 3
    • 墨色梧桐
      墨色梧桐
      2021-12-22
      根据测试,我发现,此现象属于偶发现象,在调起支付的时候会直接返回支付取消的回调,但是支付完成还是会正常进入回调,此现象在ios手机复现,安卓手机未复现。根据现象,我在回调中做出调整,判断取消支付回调,独立处理就可以规避一些异常现象。此方法只能做到规避,不能做到解决。
      2021-12-22
      回复
    • Nᴜʟʟ
      Nᴜʟʟ
      2022-01-14
      可以看看代码段嘛! 我也遇到了,我在安卓上一点问题都没有,就苹果上有
      2022-01-14
      回复
    • 墨色梧桐
      墨色梧桐
      2022-01-18回复Nᴜʟʟ
      在invoke函数的回调里面,你判断状态为cancel的,把这部分独立做个操作就可以规避了
      2022-01-18
      回复
登录 后发表内容