今天突然用户反映用微信公众号支付时返回上面的错误,于是让测试员测试,果然发现用安卓微信版本去进行公众号支付时,100%报这个错误,特么的真是见鬼了,微信支付功能的代码已经1年多没改动过了,莫名其妙啊。
JSAPI的代码交互过程是先通过微信统一下单接口返回预支付prepay_id,然后拿预支付prepay_id去请求支付交易。于是跟踪日志发现当用安卓微信版支付时,在微信统一下单接口就直接返错误spbill_create_ip参数太长,然后么由于报错了没有prepay_id,再去请求交易就返回了标题里写的错误。
spbill_create_ip指的是终端ip,在APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。
可以看出,这里的这个字段仅仅是需要传客户端的IP,那么为什么IOS的微信没有这个问题呢?分别用IOS和安卓的微信发起了交易请求,发现追踪日志的XFF不一样。
上面两条是安卓微信的,第三条是IOS的,于是经过代码处理后,安卓微信版本下提交的spbill_create_ip变成了两个地址,前一个是真实IP,后一个是代理IP,也就导致了上文说的参数太长的错误。解决方法:调整一下ecstore的JSAPI支付代码,将XFF的处理结果只返回第一个IP地址即可。
文章评分2次,平均分3.0:★★★☆☆
两个 IP,是用了 CDN ?
不是,应该是微信自己的针对安卓端的proxy桥
不错,学习了