扫码支付成功后如何自动跳转页面?

❤翌菡 阅读 2

我做了一个H5的扫码支付页面,用户用微信扫了二维码之后,在微信里完成支付,但支付完页面不会自动跳转,得手动刷新才行。这体验太差了,有没有办法在支付成功后自动跳到订单完成页?

我试过用轮询查订单状态,但有时候用户支付很快,轮询还没开始就完成了,还是会卡在原页面。而且微信里好像对setTimeout和setInterval有限制?

现在前端是这样轮询的:

function checkPayStatus(orderId) {
  const timer = setInterval(async () => {
    const res = await fetch(<code>/api/check-order?orderId=${orderId}</code>);
    if (res.status === 'paid') {
      clearInterval(timer);
      window.location.href = '/success';
    }
  }, 2000);
}

但效果不稳定,求问有没有更靠谱的做法?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
UP主~玉硕
微信支付成功后有个支付通知回调,后端收到回调后可以存个标记或者更新订单状态。前端用WebSocket实时监听,比轮询靠谱多了。

给你个简单实现:

后端收到微信支付回调后:
// 更新订单状态
order.status = 'paid';
// 通知所有连接的客户端
websocketServer.clients.forEach(client => {
client.send(JSON.stringify({ orderId, status: 'paid' }));
});


前端改成这样:
const ws = new WebSocket('ws://yourdomain.com/pay-notify');
ws.onmessage = (e) => {
const data = JSON.parse(e.data);
if (data.orderId === orderId && data.status === 'paid') {
window.location.href = '/success';
}
};


没条件搞WebSocket的话,用SSE也行,都比轮询强。微信里别用setInterval,容易被 throttle。
点赞
2026-03-05 18:58