关于前端调用微信二维码支付,二维码无法显示的问题

时间:2024-04-13 08:23:18

昨天测试提交了一个bug,说是公司网站调用微信支付时无法显示微信二维码,于是去测试环境测试了一下,发现果然有问题:

关于前端调用微信二维码支付,二维码无法显示的问题

 

此时后台日志打印了如下信息,微信接口返回的错误提示是:”invalid spbill_create_ip“,并且未返回code_url,如图:

关于前端调用微信二维码支付,二维码无法显示的问题

 

 

去百度了一下,找了许久才找到问题的关键,原来是本地测试的时候,域名不能使用localhost,而要用:127.0.0.1,请参考:https://ask.****.net/questions/676766 下的评论。

将网站域名修改成127.0.0.1后,果然就行了,看图:

关于前端调用微信二维码支付,二维码无法显示的问题

 

此时后台日志显示能成功获取到code_url,如图:

关于前端调用微信二维码支付,二维码无法显示的问题

 

测试时还发现第二种不显示二维码的情况,我第一次测试时,用的订单号是:180719000000001,改订单的金额是0.01 元,此时订单对应的信息已经提交给了微信后台,但是没有支付。后面我还是用订单号为180719000000001,但是金额为666.00元提交,此时二维码也不能显示,如下图:

关于前端调用微信二维码支付,二维码无法显示的问题

 

查看控制台打印的信息,显示“201 商户订单号重复”的错误提示(如下图):

关于前端调用微信二维码支付,二维码无法显示的问题

 

继续前进,紧接着发现第三种二维码无法显示的情况。场景换到公司生产环境中的网站上,这时域名是公司的域名,金额换成了第一次请求时的0.01元,生成的订单后还是 180719000000001 (虽然生产环境和测试环境的数据库不同,但是后台订单的生成规则却是一致的,以前老同志写的代码,看来有空还得改改啊),结果也无法显示二维码,如下图:

关于前端调用微信二维码支付,二维码无法显示的问题

 

后台打印的日志如下:

关于前端调用微信二维码支付,二维码无法显示的问题

 

综上,可以推测,在第一次请求提交的时候,微信的服务器中就对我的订单信息做了缓存,而第二次提交的时候,订单号、域名、订单金额与第一次不一致,就会报错。

没有深入研究过微信支付开发文档,不知道里面是否有过这种说明,总之这个本来不该发生的错误,却由于设计的缺陷发生了,看到网上没有这种相关错误的文章,特地写一下,希望能帮到那些和我遇到相同问题的朋友。