最近在一个项目中遇到了微信支付的一些问题,顺便写篇笔记记录一下。
1、errcode:48001 api unauthorized
这个问题属实很坑,刚刚收到这个错误的时候我百度了一下,网上很多网友都说是scope的原因,具体不再重复,参考链接:https://blog.csdn.net/xgocn/article/details/100082900
然后花了两天时间排查,直到我拿到前端传过来的code,通过微信官方的调试工具依然报错时才问前端你这code从那里获得的。前端说通过wx.login组件。
我们这个项目微信公众号、小程序、APP是统一的账号系统,但是不同的端口调用的接口不一样。wx.login属于小程序登录组件,获取到的code只能通过code2session接口获取openid。
至此问题得以解决。
当然如果是公众号授权的话,大家参考上述链接内容就可以解决问题了。小程序中获得code有两个组件,要注意区分。
2、微信total_fee下单时要精确到分。
我们经常用的金钱单位是元,因此商品的价格常常是类似10.01这样的格式,微信total_fee单位是分,在下单时我们需要乘以100,具体报的错误忘了,但必须注意这个细节。
而支付宝的金额单位是元。注意区分微信和支付宝。
3、JSAPI缺少参数total_fee。
发生这种问题首先要检查接口返回数据与官方是否一致,可以将相关数据打印输出。
其次是订单编号重复时也会在前端报这个错误。有时候用户对于一个订单发起了支付,但是并未支付,第二次再次发起支付的时候,订单中任何内容发生变更都会报订单重复的错误。
遇到订单重复的时候网友们建议的方法是修改订单号。
4、预支付ID
预支付ID的有效期为两个小时,预支付ID为空的时候往往会发生以下三种情形:
①金额为空
②订单编号重复
③订单编号为空
5、微信获取Openid的所有文档。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_4
其他错误暂时没有遇到过,后续遇到了再补充。