fix: 支付诊断页对秒关 cancel 强制告警并记录耗时

This commit is contained in:
XingQue committed 2026-08-12 20:32:28 +08:00
1 parent 4f3a826481
commit 2f6ce60013
1 file changed
+44 -12
+44 -12
View File
@@ -145,6 +145,8 @@
history.length > 1 ? history.back() : setTip('支付完成,请返回点单页');
}
var invokeAt = 0;
function invokePay() {
dumpEnv('点击/自动调起前');
if (!pay || !pay.timeStamp || !pay.nonceStr || !pay.package || !pay.paySign) {
@@ -181,10 +183,13 @@
});
setTip('正在调起微信支付…');
btn.disabled = true;
invokeAt = Date.now();
try {
WeixinJSBridge.invoke('getBrandWCPayRequest', req, function (res) {
btn.disabled = false;
var costMs = Date.now() - invokeAt;
dumpEnv('微信回调时');
push('调起到回调耗时ms', costMs);
push('微信回调 res 完整对象', res);
push('微信回调 JSON', (function () {
try { return JSON.stringify(res); } catch (e) { return String(res); }
@@ -193,7 +198,6 @@
var errDesc = (res && (res.err_desc || res.errMsg || res.err_msg)) || '';
push('err_msg', msg);
push('err_desc/其它', errDesc);
// 把所有可枚举字段打出来
try {
var keys = [];
for (var k in res) {
@@ -204,21 +208,49 @@
push('res 所有字段', keys.join(' | '));
} catch (e) {}
var checkUrl = String(location.href || '').split('#')[0];
if (msg === 'get_brand_wcpay_request:ok') {
setTip('<span class="ok">支付成功,正在返回…</span>');
setTimeout(goBack, 500);
} else if (msg.indexOf('cancel') >= 0) {
setTip('已取消,可点按钮重试');
} else {
setTip('<span class="err">支付失败:' + (msg || '未知') + '</span><br/>把下方绿色日志整段复制发给技术', true);
push('!!!! 支付失败,请把本页全部绿色日志复制发送 !!!!');
push('若含「URL未注册」,对照:微信校验 URL 必须落在商户 JSAPI 授权目录前缀下');
push('当前校验 URL', String(location.href || '').split('#')[0]);
push('调起用的 appId', appId);
try {
alert('支付失败诊断\n\n' + msg + '\n\nappId=' + appId + '\nURL=' + String(location.href || '').split('#')[0] + '\n\n完整日志在页面绿色区域,点「复制」');
} catch (e) {}
return;
}
// cancel:真正取消,或微信秒关(常见于未注册等,却只回 cancel)
if (msg.indexOf('cancel') >= 0) {
var quick = costMs < 2500;
push('判定', quick ? '疑似秒关/失败(耗时<2.5s)' : '用户取消(耗时较长)');
push('当前校验 URL', checkUrl);
push('调起用的 appId', appId);
if (quick) {
setTip('<span class="err">微信秒关并返回 cancel(常被误当成取消)</span><br/>不是「支付成功取消」。URL/appId 见下方,点重试或复制日志', true);
try {
alert(
'支付未完成(微信返回 cancel,且秒关)\n\n' +
'这经常不是你手动取消,而是微信直接关掉收银台。\n' +
'若屏幕曾闪过「URL未注册」,就是目录/商户仍不对。\n\n' +
'appId=' + appId + '\n' +
'URL=' + checkUrl + '\n' +
'耗时=' + costMs + 'ms\n\n' +
'完整日志在绿字区,点「复制」发给技术'
);
} catch (e) {}
} else {
setTip('已取消支付。可点「立即支付」重试');
try {
alert('已取消支付\n\n若其实没点取消、只看到「未注册」,请把绿字日志复制发给技术\n\nappId=' + appId + '\nURL=' + checkUrl);
} catch (e) {}
}
return;
}
setTip('<span class="err">支付失败:' + (msg || '未知') + '</span><br/>把下方绿色日志整段复制发给技术', true);
push('!!!! 支付失败,请把本页全部绿色日志复制发送 !!!!');
push('当前校验 URL', checkUrl);
push('调起用的 appId', appId);
try {
alert('支付失败诊断\n\n' + msg + '\n\nappId=' + appId + '\nURL=' + checkUrl + '\n\n完整日志在页面绿色区域,点「复制」');
} catch (e) {}
});
} catch (e) {
btn.disabled = false;