feat: H5支付诊断打印收款商户号 mch_id

This commit is contained in:
XingQue committed 2026-08-12 20:40:05 +08:00
1 parent 2f6ce60013
commit 45a9508ed4
2 files changed
+37 -10

No files matched your search

+8 -1
View File
@@ -1318,13 +1318,20 @@ class CreateOrderView(APIView):
pay_sign = hashlib.md5(pay_sign_string.encode('utf-8')).hexdigest().upper()
# 返回支付参数(H5 JSAPI 必须带 appId;小程序可忽略)
# _diag 仅给 H5 诊断页展示商户号,调起支付时前端不会传给微信
result = {
'appId': APPID,
'timeStamp': timestamp,
'nonceStr': nonce_str,
'package': package,
'signType': 'MD5',
'paySign': pay_sign
'paySign': pay_sign,
'_diag': {
'mch_id': str(MCHID or ''),
'club_id': str(club_id or ''),
'appid': str(APPID or ''),
'app_source': str(source or ''),
},
}
return result
+29 -9
View File
@@ -24,11 +24,17 @@
}
.ok { color: #07c160; }
.err { color: #ff5a5a; }
.banner {
margin: 0 0 16px; padding: 14px 12px; border-radius: 10px;
background: #3a0000; border: 2px solid #ff2d2d; color: #ffe0e0;
font-size: 15px; font-weight: 700; line-height: 1.5; word-break: break-all;
}
</style>
</head>
<body>
<div class="wrap">
<div class="title">微信支付(诊断模式)</div>
<div class="banner" id="banner">收款商户号加载中…</div>
<div class="sub" id="tip">初始化…</div>
<button class="btn" type="button" id="payBtn">立即支付 / 重试</button>
<button class="btn gray" type="button" id="copyBtn">复制下方全部诊断到剪贴板</button>
@@ -41,10 +47,23 @@
var btn = document.getElementById('payBtn');
var copyBtn = document.getElementById('copyBtn');
var logEl = document.getElementById('log');
var banner = document.getElementById('banner');
var lines = [];
var payload = null;
var pay = null;
var returnUrl = '';
var diag = {};
function setBanner() {
var mch = (diag && diag.mch_id) || '(未知,请看下方日志 payload.debug)';
var app = (pay && (pay.appId || pay.appid)) || (diag && diag.backendAppId) || '(未知)';
var club = (diag && diag.club_id) || '(未知)';
banner.innerHTML =
'【必须看】收款商户号 mch_id = <span style="color:#0f0">' + mch + '</span><br/>' +
'appId = ' + app + '<br/>' +
'club_id = ' + club + '<br/>' +
'请到<strong>这个商户号</strong>的后台配 JSAPI 目录:https://www.abas.asia/hqhd/dingdan/';
}
function now() {
try { return new Date().toISOString(); } catch (e) { return String(Date.now()); }
@@ -118,6 +137,10 @@
pay = payload && payload.pay ? payload.pay : null;
returnUrl = (payload && payload.returnUrl) || '';
diag = (payload && payload.debug) || {};
setBanner();
push('!!!! 收款商户号 mch_id', diag.mch_id || '(空——后端未返回 _diag,请先部署后端)');
push('payload.debug 完整', diag);
dumpEnv('页面加载');
push('payload.orderId', payload && payload.orderId);
@@ -223,22 +246,19 @@
push('当前校验 URL', checkUrl);
push('调起用的 appId', appId);
if (quick) {
setTip('<span class="err">微信秒关并返回 cancel(常被误当成取消)</span><br/>不是「支付成功取消」。URL/appId 见下方,点重试或复制日志', true);
setTip('<span class="err">微信秒关并返回 cancel</span><br/>顶部红框的 mch_id 才是要配目录的商户号', true);
try {
alert(
'支付未完成(微信返回 cancel,且秒关)\n\n' +
'这经常不是你手动取消,而是微信直接关掉收银台。\n' +
'若屏幕曾闪过「URL未注册」,就是目录/商户仍不对。\n\n' +
'appId=' + appId + '\n' +
'URL=' + checkUrl + '\n' +
'耗时=' + costMs + 'ms\n\n' +
'完整日志在绿字区,点「复制」发给技术'
'支付未完成(cancel 秒关)\n\n' +
'【收款商户号 mch_id】\n' + ((diag && diag.mch_id) || '(未知,先部署后端)') + '\n\n' +
'必须在这个商户后台配:\nhttps://www.abas.asia/hqhd/dingdan/\n\n' +
'appId=' + appId + '\nURL=' + checkUrl + '\nms=' + costMs
);
} catch (e) {}
} else {
setTip('已取消支付。可点「立即支付」重试');
try {
alert('已取消支付\n\n若其实没点取消、只看到「未注册」,请把绿字日志复制发给技术\n\nappId=' + appId + '\nURL=' + checkUrl);
alert('已取消\nmch_id=' + ((diag && diag.mch_id) || '(未知)') + '\nappId=' + appId + '\nURL=' + checkUrl);
} catch (e) {}
}
return;