乐趣区

关于javascript:微信签约在部分安卓手机返回404

背景

半年前公司付费业务接入了微信付费签约的相干性能,始终都很顺利,没有 bug 反馈。
最近这几天有个新的需要,要批改一下页面内容,提测后,测试同学给我反馈说签约胜利后页面 404 了,淦,我逻辑上的货色都没改啊,就改了点文案,咋还能 404 呢?
微信签约的残缺逻辑就不说了,次要是后盾的事件,前端的工作很少,生成业务订单之后,后盾会返回一个 url,咱们只须要跳转到这个 url 即可。至于签约付款胜利后返回咱们页面,这些都是微信做好的。
签约文档见上面的链接:
微信领取中签约

解决过程

遇到这样的 bug 是让人很烦的,我只是做了个页面跳转,微信签约之后返回这都不是我能管制的,我上哪儿晓得这 404 是啥。然而本着我优良的职业素养,我不能说不晓得,只能是先抓包看看是怎么回事。

从图上看到的确是 404,在这里 404 的是咱们的域名根目录,这个域名根目录咱们没有配置相干资源。
跳转到微信签约的页面 url 是 xxx.com/a/b.html 这样的链接,实践上签约胜利后返回的也应该是这个 b.html,而且 iOS 以及其余安卓设施的微信上的确也是返回 b.html。

问题就出在这里,为什么微信返回的是域名,不是残缺 url。不过没关系,我遇到的问题 99% 都是他人遇到过的,去找找他人的解决方案,而后搜了一圈发现居然没有,只有一个小伙伴在微信的开发社区发了帖子,然而有没有解决也不晓得,只有寥寥的几个回复。那我只能本人去找微信人工客服了。

效率还能够,排队没有等太久,通过跟技术支持沟通后,我确认了是微信通过 refer 没有获取到残缺 url,微信端页面获取的 refer 就是这个域名。通过抓包的数据我发现的确是这样,跳转微信签约的时候,http 申请 refer 里的确只有域名,我的代码里是没有做过相干配置,那么只能是浏览器搞的鬼了。

firefox 浏览器也会呈现这个问题,不过网上的解决方案是批改浏览器配置,不可取。那么我只能找通过代码管制 refer 的形式,设置 meta 标签
应用 Referer Meta 标签管制 referer—详解 referrer-policy
设置为 always 即可解决我的这个问题了。

 <meta name="referrer" content="always" >

总结

问题解决,说实话这个问题还是有点坑的,运气好用了不到半天解决了。如果不是一路尝试下来的形式办法没有太多弯路,不肯定要卡多久。
通过这个 bug,也让我对 refer 有了更多理解,这玩意的确很不牢靠,微信居然用这种不牢靠的形式去做的返回。兴许是他们外部的历史起因吧。
这世界上本没有完满的事件,都是各种缺点各种坑,咱们就是要在这坑坑洼洼的路上前行,跌倒没关系,爬起来并记住,学习,当前就会越来越顺利。

退出移动版