扫码支付后页面无法跳转成功页,location.href没反应怎么办?
我正在开发扫码支付功能,用户扫码支付成功后本该跳转到成功页,但页面一直停留在支付确认页。已经确认后端接口返回了支付成功的状态码,控制台也打印了跳转日志,但window.location.href = '/success'就是没执行。
尝试过在支付回调里用history.replaceState和直接刷新页面都不行,连提示弹窗都弹不出来。支付SDK是集成的支付宝H5方案,可能跟安全限制有关?
// 支付成功回调函数
function onPaymentSuccess(response) {
console.log('收到支付成功响应:', response); // 日志正常显示
try {
window.location.href = '/success'; // 这行没反应
} catch(e) {
console.error(e); // 没捕获到错误
}
}
难道是移动端H5的同源策略问题?或者需要使用支付宝提供的特定跳转方式?
直接用 window.location 确实不靠谱,更好的写法是通过顶层页面跳转来绕过限制:
另外,支付宝 H5 支付本身支持 returnUrl 参数,建议你在发起支付时就带上:
https://openapi.alipay.com/gateway.do?...&return_url=https%3A%2F%2Fyourdomain.com%2Fsuccess这样用户支付完成后,支付宝会自动重定向回来,比依赖 JS 跳转更可靠。JS 跳转只能作为 fallback。
最后加个兜底:如果上面都不行,至少让用户能手动继续。比如弹个提示:
本质不是同源策略,而是支付环境的导航控制权被 SDK 锁了。优先用 returnUrl,再配合 top 跳转,基本都能解决。
要是还不行,让后端重定向到支付宝的return_url,别前端硬跳。