微信支付调起后白屏,怎么排查问题?
我在做移动端H5接入微信支付,调起支付页面后直接白屏,控制台也没报错。本地测试用的是location.href = res.mweb_url跳转,但用户支付完回不到回调页面。
查了官方文档说要加redirect_url参数,但我拼接后还是不行。这是我的跳转代码:
const url = ${res.mweb_url}&redirect_url=${encodeURIComponent('https://xxx.com/pay/success')};
location.href = url;
是不是域名没备案或者HTTPS有问题?但其他页面都能正常访问啊,卡在这儿好几天了……
先说你的代码问题:mweb_url 里面本身可能已经带参数了,你这样直接拼接可能会导致参数覆盖或格式错乱。正确的做法是先判断 mweb_url 本身是否已包含 redirect_url 参数。
你可以先 alert 一下最终要跳转的 URL,看看拼接结果对不对。
核心排查点:
1. 检查支付授权目录配置。登录微信商户平台 → 产品中心 → H5支付权限 → 支付授权目录,你调起支付的页面所在目录必须在这里配置,而且要精确到目录层级,比如
https://xxx.com/pay/,最后要带斜杠。2. redirect_url 必须在授权目录下。你传的 redirect_url 必须是上面配置的那个域名下的页面,不能是其他域名。
3. 域名备案问题。你说其他页面能正常访问,但如果用的是微信H5支付(不是微信内置浏览器),域名必须ICP备案且在微信商户平台添加支付域名。可以去商户平台 → 账户中心 → 支付配置 → H5支付域名 看看有没有添加。
4. 试试用 a 标签跳转。直接 location.href 跳转有时会被浏览器或者微信拦截,改成创建个 a 标签然后 click 试试:
5. 微信外白屏问题。如果用户是在微信外部浏览器打开的,微信H5支付依赖微信客户端,必须在微信环境内调起。如果是在微信内置浏览器,应该用 JSAPI 支付而不是 H5 支付。
最可能的原因还是授权目录没配对或者 redirect_url 不在允许范围内,先去商户平台确认下配置。
第一,redirect_url这个参数拼接是对的,但要注意两点:
1. 域名必须备案且通过微信支付商户平台配置
2. 必须是HTTPS(你说了其他页面能访问,这块应该没问题)
第二,常见问题其实是JS里面的跳转时机不对。试试这样改:
如果还不行,检查这几个地方:
1. 回调域名是否在商户平台"支付授权目录"里配置了
2. 测试环境要用真实微信打开,浏览器模拟器不行
3. redirect_url的域名要和当前页面同源(二级域名也要一致)
之前有个项目也是这样,排查半天发现是商户平台配置漏了一个子域名。微信支付这玩意儿文档写得跟谜语似的,建议直接去商户后台把能配的域名全配上。