zhuli 3 недель назад
Родитель
Сommit
2a499547ce
1 измененных файлов с 73 добавлено и 43 удалено
  1. 73 43
      HBuilderProjects/shareIndex.html

+ 73 - 43
HBuilderProjects/shareIndex.html

@@ -984,7 +984,7 @@
 	</div>
 	<!-- 微信内:wx-open-launch-app(需 JSSDK 签名 + 公众号关联 App);非微信见 #fabWrapFallback -->
 	<div id="fabWrapWx" class="fab-wrap" aria-hidden="true">
-		<wx-open-launch-app id="launch-btn" appid="wxf5f1efe3a9f5012e">
+		<wx-open-launch-app id="launch-btn" appid="wxff2fb6413a14a561">
 			<script type="text/wxtag-template">
 				<style>
 					.wx-open-app-btn {
@@ -1040,17 +1040,16 @@
 		var API_BASE = 'https://test.ailien.shop/alienStore';
 
 		/** 微信开放标签:移动应用 AppID(与 wx-open-launch-app appid 一致) */
-		var WECHAT_OPEN_APP_ID = 'wxf5f1efe3a9f5012e';
+		var WECHAT_OPEN_APP_ID = 'wxff2fb6413a14a561';
 		/**
-		 * JSSDK 签名接口路径(相对 API_BASE);后端需返回 appId、timestamp、nonceStr、signature。
-		 * 可用 ?wxSignPath=/your/path 或完整 ?wxSignUrl=https://... 覆盖。
+		 * 进入页 GET {API_BASE}/wx/getWxConfig?url={页面地址,不含 query/hash}
+		 * 例:.../wx/getWxConfig?url=https://test.ailien.shop/h5/HBuilderProjects/shareIndex.html
+		 * 可用 ?wxSignPath= 或 ?wxSignUrl= 覆盖。
 		 */
-		var WECHAT_JSSDK_SIGN_PATHS = [
-			'/wechat/mp/jsapi-signature',
-			'/wechat/jsapi/getSign',
-			'/wx/jsapi/signature'
-		];
+		var WECHAT_GET_WX_CONFIG_PATH = '/wx/getWxConfig';
 		var H5_PAGE_BASE_FALLBACK = 'https://test.ailien.shop/h5/HBuilderProjects/';
+		/** getWxConfig 的 url 参数:仅页面地址,不带 ? 后分享参数 */
+		var WX_GET_CONFIG_SIGN_URL = 'https://test.ailien.shop/h5/HBuilderProjects/shareIndex.html';
 		/** wx.config 已成功(开放标签可展示);与「用户已成功唤起 App」不是同一回事 */
 		var weChatJssdkConfigured = false;
 
@@ -1070,7 +1069,7 @@
 		 * - manifest:app-plus.distribute.android.schemes、ios.urltypes → shopro(即 shopro://)
 		 * - Android 包名:manifest 未写 packagename 时与 App.vue 升级配置 androidPackageName 一致(云打包以 HBuilderX 为准)
 		 */
-		var APP_ANDROID_PACKAGE = 'com.alien.Udianzaizhe';
+		var APP_ANDROID_PACKAGE = 'com.alien.Udianzaina';
 		var APP_IOS_URL_SCHEME = 'shopro://';
 		/** businessSection 未传或其它值时的默认落地页(与 1 相同) */
 		var APP_UNI_STORE_PATH = 'pages/ieisureEntertainment/eightTypeList/delicacyDetails';
@@ -1162,6 +1161,15 @@
 			return API_BASE.replace(/\/$/, '') + (custom.charAt(0) === '/' ? custom : '/' + custom);
 		}
 
+		/** /wx/getWxConfig 签名用 url:不含 query/hash,与后端约定一致 */
+		function getWxConfigSignUrl() {
+			if (location.origin && /^https?:/i.test(location.origin) && location.pathname) {
+				return location.origin + location.pathname;
+			}
+			return WX_GET_CONFIG_SIGN_URL;
+		}
+
+		/** 唤起 App 的 extinfo 等:保留完整分享链(含 query) */
 		function getPageUrlForWxSign() {
 			var u = String(location.href || '').split('#')[0];
 			if (!u || u.indexOf('file:') === 0) {
@@ -1170,6 +1178,16 @@
 			return u;
 		}
 
+		function buildWxGetConfigRequestUrl(signPageUrl) {
+			var base = API_BASE.replace(/\/$/, '');
+			return (
+				base +
+				WECHAT_GET_WX_CONFIG_PATH +
+				'?url=' +
+				encodeURIComponent(signPageUrl || getWxConfigSignUrl())
+			);
+		}
+
 		/**
 		 * 微信开放标签 extinfo:优先传当前 H5 分享链(与 App 解析分享 URL 一致);
 		 * 超长时再传 path+query JSON,最后才用 shopro://。
@@ -1221,22 +1239,14 @@
 		}
 
 		function fetchWeChatJssdkSign() {
-			var signPageUrl = getPageUrlForWxSign();
+			var signPageUrl = getWxConfigSignUrl();
 			var urls = [];
 			var custom = getWeChatJssdkSignRequestUrl();
 			if (custom) {
 				var sep0 = custom.indexOf('?') >= 0 ? '&' : '?';
 				urls.push(custom + sep0 + 'url=' + encodeURIComponent(signPageUrl));
 			} else {
-				var base = API_BASE.replace(/\/$/, '');
-				for (var pi = 0; pi < WECHAT_JSSDK_SIGN_PATHS.length; pi++) {
-					urls.push(
-						base +
-							WECHAT_JSSDK_SIGN_PATHS[pi] +
-							'?url=' +
-							encodeURIComponent(signPageUrl)
-					);
-				}
+				urls.push(buildWxGetConfigRequestUrl(signPageUrl));
 			}
 			function tryUrl(idx) {
 				if (idx >= urls.length) return Promise.resolve(null);
@@ -1322,34 +1332,50 @@
 			});
 		}
 
+		/**
+		 * 进入页即 GET /wx/getWxConfig(任意浏览器都会请求,便于联调);
+		 * 仅微信内且签名成功后再 wx.config + 展示开放标签按钮。
+		 */
 		function initWeChatOpenLaunchApp() {
-			if (!isWeChatInAppBrowser()) {
-				setFabLaunchMode('scheme');
-				return Promise.resolve(false);
-			}
-			var domainHint = checkWxJsSafeDomainHint();
-			if (domainHint) {
-				console.warn('[wx]', domainHint);
-				showAppOpenFailTip(domainHint);
-			}
-			/** 签名完成前不展示 scheme 按钮,避免误点触发无效唤起 */
-			var fbWrap0 = document.getElementById('fabWrapFallback');
-			if (fbWrap0) {
-				fbWrap0.style.display = 'none';
-				fbWrap0.setAttribute('aria-hidden', 'true');
-			}
-			if (typeof wx === 'undefined') {
-				console.warn('[wx] jweixin not loaded');
+			var inWx = isWeChatInAppBrowser();
+			var signPageUrl = getWxConfigSignUrl();
+			var reqUrl = buildWxGetConfigRequestUrl(signPageUrl);
+
+			if (!inWx) {
 				setFabLaunchMode('scheme');
-				return Promise.resolve(false);
+			} else {
+				var domainHint = checkWxJsSafeDomainHint();
+				if (domainHint) {
+					console.warn('[wx]', domainHint);
+					showAppOpenFailTip(domainHint);
+				}
+				var fbWrap0 = document.getElementById('fabWrapFallback');
+				if (fbWrap0) {
+					fbWrap0.style.display = 'none';
+					fbWrap0.setAttribute('aria-hidden', 'true');
+				}
 			}
-			bindWeChatLaunchTagEvents();
+
+			console.log('[wx] GET', reqUrl);
+
 			return fetchWeChatJssdkSign()
 				.then(function (sign) {
+					if (!inWx) {
+						if (!sign) {
+							console.warn('[wx] getWxConfig empty (non-wechat preview)');
+						}
+						return false;
+					}
+					if (typeof wx === 'undefined') {
+						console.warn('[wx] jweixin not loaded');
+						setFabLaunchMode('scheme');
+						return false;
+					}
+					bindWeChatLaunchTagEvents();
 					if (!sign) {
-						console.warn('[wx] JSSDK sign unavailable — check WECHAT_JSSDK_SIGN_PATHS or ?wxSignPath=');
+						console.warn('[wx] GET ' + WECHAT_GET_WX_CONFIG_PATH + ' failed — check url param or ?wxSignPath=');
 						showAppOpenFailTip(
-							'微信打开 App 需后端 JSSDK 签名接口,当前未配置成功,无法使用「APP内打开」。'
+							'微信打开 App 需 GET /wx/getWxConfig 返回签名,当前未配置成功,无法使用「APP内打开」。'
 						);
 						setFabLaunchMode('scheme');
 						return false;
@@ -1386,7 +1412,9 @@
 				})
 				.catch(function (e) {
 					console.warn('[wx] init failed', e);
-					setFabLaunchMode('scheme');
+					if (inWx) {
+						setFabLaunchMode('scheme');
+					}
 					return false;
 				});
 		}
@@ -2652,9 +2680,11 @@
 					tryOpenHBuilderApp();
 				});
 			}
-			initWeChatOpenLaunchApp();
 		}
 
+		/** 进入页立即请求 getWxConfig,不等到 window.onload */
+		initWeChatOpenLaunchApp();
+
 		if (document.readyState === 'complete') {
 			boot();
 		} else {