|
|
@@ -1010,6 +1010,7 @@
|
|
|
<div id="staffGroupsMount"></div>
|
|
|
</section>
|
|
|
</div>
|
|
|
+ <pre id="wxDebugBar" style="display:none;position:fixed;left:8px;right:8px;top:8px;z-index:9999;max-height:40vh;overflow:auto;margin:0;padding:8px;font-size:11px;line-height:1.35;background:rgba(0,0,0,.82);color:#0f0;white-space:pre-wrap;word-break:break-all;border-radius:6px;pointer-events:none;"></pre>
|
|
|
<div id="fabDock" class="fab-wrap">
|
|
|
<div class="fab-dock__slot">
|
|
|
<button type="button" class="fab" id="openApp">
|
|
|
@@ -1082,6 +1083,42 @@
|
|
|
var weChatJssdkConfigured = false;
|
|
|
var wxConfigSignRetriedBaseUrl = false;
|
|
|
var wxSignUrlFullBeforeStrip = '';
|
|
|
+ var wxDebugLastStatus = '';
|
|
|
+
|
|
|
+ function isWxDebugOn() {
|
|
|
+ return String(q('wxDebug') || '') === '1';
|
|
|
+ }
|
|
|
+
|
|
|
+ function stringifyWxDebugPayload(obj) {
|
|
|
+ try {
|
|
|
+ return JSON.stringify(obj, null, 2);
|
|
|
+ } catch (eJson) {
|
|
|
+ return String(obj && obj.errMsg ? obj.errMsg : obj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** ?wxDebug=1 时弹窗 + 页内条展示完整 errMsg(微信 debug 弹窗有时信息不全) */
|
|
|
+ function reportWxDebug(stage, payload, extraLines) {
|
|
|
+ var lines = ['【' + stage + '】'];
|
|
|
+ if (extraLines && extraLines.length) {
|
|
|
+ for (var i = 0; i < extraLines.length; i++) lines.push(extraLines[i]);
|
|
|
+ }
|
|
|
+ if (payload != null) {
|
|
|
+ lines.push(stringifyWxDebugPayload(payload));
|
|
|
+ }
|
|
|
+ var text = lines.join('\n');
|
|
|
+ wxDebugLastStatus = text;
|
|
|
+ console.log('[wxDebug]', text);
|
|
|
+ if (!isWxDebugOn()) return;
|
|
|
+ var bar = document.getElementById('wxDebugBar');
|
|
|
+ if (bar) {
|
|
|
+ bar.style.display = 'block';
|
|
|
+ bar.textContent = text;
|
|
|
+ }
|
|
|
+ if (isWeChatInAppBrowser()) {
|
|
|
+ window.alert(text.slice(0, 900));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 关店(businessStatus=99)更多推荐:POST …/ai/multimodal-services/api/v1/search/global/store-recommend
|
|
|
@@ -1322,11 +1359,28 @@
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+ function getWxErrMsg(err) {
|
|
|
+ if (!err) return '';
|
|
|
+ if (err.errMsg) return String(err.errMsg);
|
|
|
+ if (typeof err === 'string') return err;
|
|
|
+ try {
|
|
|
+ return JSON.stringify(err);
|
|
|
+ } catch (e) {
|
|
|
+ return String(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
function formatWxConfigErrorTip(err, signPageUrl) {
|
|
|
- var errMsg = '';
|
|
|
- if (err && err.errMsg) errMsg = String(err.errMsg);
|
|
|
- else if (typeof err === 'string') errMsg = err;
|
|
|
+ var errMsg = getWxErrMsg(err);
|
|
|
var tip = '微信 JSSDK 配置失败';
|
|
|
+ if (/require\s*subscribe/i.test(errMsg)) {
|
|
|
+ return (
|
|
|
+ tip +
|
|
|
+ ':' +
|
|
|
+ errMsg +
|
|
|
+ '。测试号须用当前微信号在 mp.weixin.qq.com/debug.cgi 关注后再打开本页。'
|
|
|
+ );
|
|
|
+ }
|
|
|
if (/invalid signature/i.test(errMsg)) {
|
|
|
var signUrl = signPageUrl || getWxSignUrlFull();
|
|
|
var pageNow = String(location.href || '').split('#')[0];
|
|
|
@@ -1408,6 +1462,13 @@
|
|
|
});
|
|
|
wx.ready(function () {
|
|
|
weChatJssdkConfigured = true;
|
|
|
+ reportWxDebug('wx.ready / config:ok', { errMsg: 'config:ok' }, [
|
|
|
+ 'appId(config)=' + sign.appId,
|
|
|
+ 'openTag appid=' + WECHAT_OPEN_APP_ID,
|
|
|
+ 'signUrl=' + urlForWx,
|
|
|
+ 'page=' + location.href.split('#')[0],
|
|
|
+ '开放标签层=' + (isWeChatInAppBrowser() ? '已启用' : '非微信')
|
|
|
+ ]);
|
|
|
if (wxSignUrlFullBeforeStrip) {
|
|
|
var restore = wxSignUrlFullBeforeStrip + (location.hash || '');
|
|
|
history.replaceState(history.state, document.title, restore);
|
|
|
@@ -1423,8 +1484,14 @@
|
|
|
resolve(true);
|
|
|
});
|
|
|
wx.error(function (err) {
|
|
|
+ var errMsg = getWxErrMsg(err);
|
|
|
console.warn('[wx.config]', err, 'signUrl=', urlForWx);
|
|
|
- var errMsg = err && err.errMsg ? String(err.errMsg) : '';
|
|
|
+ reportWxDebug('wx.error / config:fail', err, [
|
|
|
+ '完整 errMsg=' + errMsg,
|
|
|
+ 'appId(config)=' + sign.appId,
|
|
|
+ 'signUrl=' + urlForWx,
|
|
|
+ 'page=' + location.href.split('#')[0]
|
|
|
+ ]);
|
|
|
var baseUrl = getWxSignUrlBase();
|
|
|
var fullUrl = getWxSignUrlFull();
|
|
|
if (
|
|
|
@@ -1484,12 +1551,24 @@
|
|
|
try {
|
|
|
tag.setAttribute('extinfo', buildWeChatLaunchExtinfo());
|
|
|
} catch (eExt) {}
|
|
|
- tag.addEventListener('launch', function () {
|
|
|
- console.log('[wx-open-launch-app] launch ok');
|
|
|
+ tag.addEventListener('launch', function (e) {
|
|
|
+ console.log('[wx-open-launch-app] launch ok', e && e.detail);
|
|
|
+ reportWxDebug('wx-open-launch-app launch', e && e.detail ? e.detail : { errMsg: 'launch:ok' }, [
|
|
|
+ 'extinfo=' + (tag.getAttribute('extinfo') || '').slice(0, 200)
|
|
|
+ ]);
|
|
|
});
|
|
|
tag.addEventListener('error', function (e) {
|
|
|
var detail = e && e.detail;
|
|
|
console.warn('[wx-open-launch-app]', detail);
|
|
|
+ reportWxDebug('wx-open-launch-app error', detail, [
|
|
|
+ 'openTag appid=' + WECHAT_OPEN_APP_ID,
|
|
|
+ '完整 errMsg=' +
|
|
|
+ (detail && detail.errMsg
|
|
|
+ ? String(detail.errMsg)
|
|
|
+ : detail && detail.errmsg
|
|
|
+ ? String(detail.errmsg)
|
|
|
+ : '(无)')
|
|
|
+ ]);
|
|
|
weChatJssdkConfigured = false;
|
|
|
updateFabOpenLayer();
|
|
|
var errMsg =
|
|
|
@@ -2825,6 +2904,12 @@
|
|
|
});
|
|
|
}
|
|
|
updateFabOpenLayer();
|
|
|
+ if (isWxDebugOn()) {
|
|
|
+ reportWxDebug('page load', { errMsg: 'wxDebug=1 已开启' }, [
|
|
|
+ 'UA=' + (navigator.userAgent || '').slice(0, 120),
|
|
|
+ 'page=' + location.href.split('#')[0]
|
|
|
+ ]);
|
|
|
+ }
|
|
|
initWeChatOpenLaunchApp();
|
|
|
}
|
|
|
|