微信支付失败后如何正确处理用户取消或网络异常?
我在做移动端H5的微信JSAPI支付,调起支付弹窗后,用户如果点击取消或者网络突然断了,页面就卡住没反应。官方文档说要监听getBrandWCPayRequest的回调,但我试了好像没生效。
目前我的代码是这样写的:
WeixinJSBridge.invoke('getBrandWCPayRequest', payData, function(res) {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
// 支付成功
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
alert('用户取消了支付');
} else {
alert('支付失败,请重试');
}
});
但有时候用户点取消,回调根本不触发,页面直接白屏。是不是还要加其他容错逻辑?比如超时处理或者手动关闭加载状态?
你现在的写法本身没问题,但必须加兜底逻辑,不然页面真会卡死。
首先,调起支付前一定要开个loading状态,比如显示个遮罩+转圈动画,别直接白屏等。
然后,回调里处理成功和失败,但别只依赖回调——加个定时器,比如5秒后自动清理状态,假设“支付流程已结束”,让用户能继续操作。
举个例子,你这样改:
关键点有三个:
1. 一定要有loading状态,且必须有清除逻辑,别让页面卡死
2. 回调里记得clearTimeout,不然5秒后弹个“超时”提示,用户明明已支付成功,会骂娘
3. 最好配合后端轮询订单状态,因为前端回调不可信,微信可能成功扣款但前端回调没触发,用户刷新页面发现订单还没变“已支付”,那才是真坑
我之前项目就栽在这儿:用户点了取消,但钱扣了,订单没更新,客服电话被打爆。后来加了轮询+超时兜底才稳住。
别嫌麻烦,支付这玩意儿宁可多写点容错代码,也别让用户干等白屏。