背景半年前,公司支付业务对接了微信支付签约相关功能,进展顺利,无任何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中确实只有域名。我的代码里没有做相关配置,所以只能是浏览器的ghost。firefox浏览器也会出现这个问题,不过网上的解决方法是修改浏览器配置,不可取。那我只能想办法通过代码控制refer,设置meta标签,使用RefererMeta标签来控制referer——详细的referrer-policy设置为always可以解决我的问题。
