微信支付JSAPI 部分手机调不起支付原因

4 篇文章 0 订阅

最近在研究调起微信支付,遇到了利用微信JSAPI提供中的wx.chooseWXPay()的方法,发现部分手机调不起支付,一直没有响应,但是部分苹果手机却调起成功了。

本菜鸟查询了整个发起支付的流程,都没有找到问题的原因,统一下单没有任何报错,证明提供给这个方法的参数是没有错误的。那么问题就是出现在这个方法,首先查看的是wx.config是不是报错了,不debug这个参数改成true,弹出的结果也是config:ok,这证明配置也没有问题,在没有解决方法的头绪的时候,只能百度,发现上面没有跟我遇到一样问题的,只有说调不起的原因是因为参数有错,但是我这个问题是在于有部分手机是可以调起,而且统一下单也没有报错,证明是没有问题。

于是只能回去从最原始的地方找解决方案,就是看微信开发文档,emmmm,发现上面提供的实例是旧版本的调用方法,对应的新版本的方法也只是介绍了怎么调用,并没有具体的实例,于是这个问题还是没有办法解决。只好用微信提供的检验JSAPI方法去测试,发现会报缺少APPID,但是这个wx.chooseWXPay()方法的参数并不需要用到APPID,再次陷入了困境,只能在网上继续浏览搜索,看看别人是怎么调用的,结果还真的发现一个有用的方法wx.ready()。

wx.ready()是在wx.config执行完后,才会执行里面的内容,于是我尝试把x.chooseWXPay()放进wx.ready()里面,发现真的可以修复这个bug了,所有手机都可以成功调起支付,问题解决了。

个人猜测:由于部分手机加载速度问题,导致wx.chooseWXPay()的执行比wx.config()要快多了,导致config都还没配置好,wx.chooseWXPay()就会没有反应。这跟手机性能有关,所以才会出现部分手机调起了。利用wx.ready()就可以判断config是否执行完了,执行完才会调用里面的内容,可以保证一定能够调起支付。

附上对应代码:

wx.ready(function(config){
    wx.chooseWXPay({
        timestamp: config.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
        nonceStr: config.nonceStr, // 支付签名随机串,不长于 32 位
        package: config.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
        signType: config.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
        paySign: config.sign, // 支付签名
        success: function (res) {
            // 支付成功后的回调函数
        }
    });
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bo_b

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值