最近做了一个先签约后支付的项目,一直都很顺利,没有bug反馈。
但是,前几天测试给我提了一个bug说微信签约完成后出现了页面403/404状态,
咦?我试了一下ios手机流程完全没有问题,但是安卓手机签约完成后没有直接跳到我的支付页面,而是直接403了,微信签约大部分都是后台的逻辑多,前端基本上是跳页面,生成业务订单之后,后台会返回一个url,我们只需要跳转到这个url即可。至于签约付款成功后返回我们页面,这些都是微信做好的。
签约文档见下面的链接:微信支付-扣费服务开发者文档
跳转到微信签约的页面url是 xxx.com/a/b.html 这样的链接,理论上签约成功后返回的也应该是这个b.html,而且iOS以及其他安卓设备的微信上确实也是返回b.html。
问题就出在这里,为什么微信返回的是域名,不是完整url,在从网上找了很多资料后,才知道微信通过refer没有获取到完整url,微信端页面获取的refer就是这个域名。通过抓包的数据我发现确实是这样,跳转微信签约的时候,http请求refer里确实只有域名,我的代码里是没有做过相关配置,那么只能是浏览器搞的鬼了。
firefox浏览器也会出现这个问题,不过网上的解决方案是修改浏览器配置,不可取。那么我只能找通过代码控制refer的方式,设置meta标签
使用 Referer Meta 标签控制 referer—详解 referrer-policy
设置为always即可解决我的这个问题了。
<meta name="referrer" content="always" >
在<head> </head>标签中添加上面代码,在安卓手机上试了一下果真微信签约成功后跳到我自己的页面上了,此处微信可真是坑。。。