微信支付调起后白屏,怎么排查问题?

程序员艳艳 阅读 346

我在做移动端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有问题?但其他页面都能正常访问啊,卡在这儿好几天了……

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
Air-光星
白屏问题一般是微信H5支付授权目录没配或者redirect_url不在允许范围内。

先说你的代码问题: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 试试:

const url = ${res.mweb_url}&redirect_url=${encodeURIComponent('https://xxx.com/pay/success')};
const a = document.createElement('a');
a.href = url;
a.click();


5. 微信外白屏问题。如果用户是在微信外部浏览器打开的,微信H5支付依赖微信客户端,必须在微信环境内调起。如果是在微信内置浏览器,应该用 JSAPI 支付而不是 H5 支付。

最可能的原因还是授权目录没配对或者 redirect_url 不在允许范围内,先去商户平台确认下配置。
点赞
2026-03-19 00:06
东方芸菡
微信支付调起白屏这个坑我踩过,先说几个关键点:

第一,redirect_url这个参数拼接是对的,但要注意两点:
1. 域名必须备案且通过微信支付商户平台配置
2. 必须是HTTPS(你说了其他页面能访问,这块应该没问题)

第二,常见问题其实是JS里面的跳转时机不对。试试这样改:

const url = ${res.mweb_url}&redirect_url=${encodeURIComponent('https://xxx.com/pay/success')};
// 改用window.location.replace
window.location.replace(url);


如果还不行,检查这几个地方:
1. 回调域名是否在商户平台"支付授权目录"里配置了
2. 测试环境要用真实微信打开,浏览器模拟器不行
3. redirect_url的域名要和当前页面同源(二级域名也要一致)

之前有个项目也是这样,排查半天发现是商户平台配置漏了一个子域名。微信支付这玩意儿文档写得跟谜语似的,建议直接去商户后台把能配的域名全配上。
点赞 1
2026-03-08 21:32