diff --git a/templates/wechat/h5_jsapi_pay.html b/templates/wechat/h5_jsapi_pay.html
index b55f322..1332b87 100644
--- a/templates/wechat/h5_jsapi_pay.html
+++ b/templates/wechat/h5_jsapi_pay.html
@@ -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('支付成功,正在返回…');
setTimeout(goBack, 500);
- } else if (msg.indexOf('cancel') >= 0) {
- setTip('已取消,可点按钮重试');
- } else {
- setTip('支付失败:' + (msg || '未知') + '
把下方绿色日志整段复制发给技术', 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('微信秒关并返回 cancel(常被误当成取消)
不是「支付成功取消」。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('支付失败:' + (msg || '未知') + '
把下方绿色日志整段复制发给技术', 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;