zhuli 3 недель назад
Родитель
Сommit
78cb4ab239
1 измененных файлов с 91 добавлено и 6 удалено
  1. 91 6
      HBuilderProjects/shareIndex.html

+ 91 - 6
HBuilderProjects/shareIndex.html

@@ -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();
 		}