记一次微信支付前端的bug: 商户传入的appid 参数不正确,请联系商户处理
源于一次分公众号支付的需求:
项目默认有一个appidA用来强制授权,如果url上存在另一个appidB,则用appidB再次去静默授权获取用户openid,这个openid是用来区分用户在哪一个公众号支付的
需求做好之后,去测试,发现支付的时候(就是前端调用微信jssdk支付api)微信报错:商户传入的appid 参数不正确,请联系商户处理
去官网查找说可能两个原因导致的:
1、统一下单接口中上传的appid与调起微信客户端进行支付的appid不一致
2、调起微信客户端进行支付的必要参数prepayid有误或者prepayid已经过期(有效期2小时)
首先经过前后端排查,排除了第二个原因,因为下发预订单之后接着支付,肯定没有过期,而且后端查日志prepayid也是正确的木有问题
第一个原因先排查了前半部分 "统一下单接口中上传的appid" 后端查日志确认没问题,然后下一句 "与调起微信客户端进行支付的appid不一致", 我先想到的是前端调用微信支付的sdk:wx.chooseWXPay 但是传给微信的参数里面并没有用到appid呀,并且后端生成预订单也成功了,说明前端wx.chooseWXPay里面传给微信的参数也是没问题的
最后检查到一个地方,之前没有想到 是因为这个地方如果有错后面的支付就不会执行了,结果真是这个原因, 什么原因呢,我们知道调用微信jssdk是需要后端生成一些校验的参数的,前端通过config接口注入权限验证配置,这个地方前端需要传入appid和这些参数,没错,就是这个appid的问题,我是用的是appidA,应该使用appidB,即统一下单接口中上传的appid与调起微信客户端进行支付的appid不一致,这个微信客户端进行支付的appid指的不是调用前端调用微信支付sdk的appid,指的是前端初始化微信jssdk的appid!!
--------------------------分割线-------------------------------------
结论: 上面写的可能只有本人能看懂----- 所以总结一下遇到这个报错的排查方案吧:
1.前端检查初始化微信jssdk的appid是否对应,以及是否可以正常初始化微信jssdk
2.前端检查调用微信支付sdk传参是否正确
2.后端检查下单接口中上传的appid是否对应
3.后端检查prepayid是否有误或者prepayid是否已经过期