zhuli 1 неделя назад
Родитель
Сommit
997ff78720
1 измененных файлов с 42 добавлено и 17 удалено
  1. 42 17
      HBuilderProjects/shareDynamic.html

+ 42 - 17
HBuilderProjects/shareDynamic.html

@@ -730,7 +730,10 @@
 		var APP_IOS_URL_SCHEME = 'shopro://';
 		var APP_IOS_URL_SCHEME = 'shopro://';
 		var APP_UNI_STORE_PATH = 'pages/newdetails/index';
 		var APP_UNI_STORE_PATH = 'pages/newdetails/index';
 
 
-		/** 微信 JSSDK — 与 shareIndex.html 一致 */
+		/**
+		 * 微信 JSSDK — 与 shareIndex.html 一致
+		 * 后端 POST {API_BASE}/wx/getWxConfig,body 传 url(当前页完整地址,不含 #)
+		 */
 		var WECHAT_MP_APP_ID = 'wx412792c77f47babd';
 		var WECHAT_MP_APP_ID = 'wx412792c77f47babd';
 		var WECHAT_OPEN_APP_ID = 'wxf5f1efe3a9f5012e';
 		var WECHAT_OPEN_APP_ID = 'wxf5f1efe3a9f5012e';
 		var WECHAT_GET_WX_CONFIG_PATH = '/wx/getWxConfig';
 		var WECHAT_GET_WX_CONFIG_PATH = '/wx/getWxConfig';
@@ -1146,13 +1149,14 @@
 			return getWxSignPageUrlForApi();
 			return getWxSignPageUrlForApi();
 		}
 		}
 
 
-		function buildWxGetConfigRequestUrl(htmlUrl) {
-			return (
-				API_BASE.replace(/\/$/, '') +
-				WECHAT_GET_WX_CONFIG_PATH +
-				'?url=' +
-				encodeURIComponent(htmlUrl || getWxConfigSignUrl())
-			);
+		function getWxGetConfigApiUrl() {
+			return API_BASE.replace(/\/$/, '') + WECHAT_GET_WX_CONFIG_PATH;
+		}
+
+		function buildWxGetConfigRequestBody(htmlUrl) {
+			return {
+				url: String(htmlUrl || '').split('#')[0].trim()
+			};
 		}
 		}
 
 
 		function resolveWxConfigAppIdFromSignData(d) {
 		function resolveWxConfigAppIdFromSignData(d) {
@@ -1176,14 +1180,25 @@
 			if (!d || typeof d !== 'object') return null;
 			if (!d || typeof d !== 'object') return null;
 			var appId = resolveWxConfigAppIdFromSignData(d);
 			var appId = resolveWxConfigAppIdFromSignData(d);
 			var timestamp = d.timestamp != null ? d.timestamp : d.timeStamp;
 			var timestamp = d.timestamp != null ? d.timestamp : d.timeStamp;
-			var nonceStr = d.nonceStr || d.noncestr || d.nonce;
+			var nonceStr =
+				d.nonceStr != null && String(d.nonceStr) !== ''
+					? d.nonceStr
+					: d.noncestr != null && String(d.noncestr) !== ''
+						? d.noncestr
+						: d.nonce;
 			var signature = d.signature || d.sign;
 			var signature = d.signature || d.sign;
-			if (!appId || timestamp == null || !nonceStr || !signature) return null;
+			if (!appId || timestamp == null || nonceStr == null || nonceStr === '' || !signature) {
+				return null;
+			}
+			var signedUrl = String(signUrlUsed || '')
+				.split('#')[0]
+				.trim();
 			return {
 			return {
 				appId: String(appId),
 				appId: String(appId),
 				timestamp: Number(timestamp),
 				timestamp: Number(timestamp),
 				nonceStr: String(nonceStr),
 				nonceStr: String(nonceStr),
-				signature: String(signature)
+				signature: String(signature),
+				signUrl: signedUrl
 			};
 			};
 		}
 		}
 
 
@@ -1221,6 +1236,10 @@
 			if (wxInitLastError) console.warn('[wx]', wxInitLastError);
 			if (wxInitLastError) console.warn('[wx]', wxInitLastError);
 		}
 		}
 
 
+		/**
+		 * htmlUrl = location.href.split('#')[0]
+		 * POST getWxConfig,body: { url: htmlUrl }
+		 */
 		function requestWeChatJssdkSignAndConfig(htmlUrlOptional) {
 		function requestWeChatJssdkSignAndConfig(htmlUrlOptional) {
 			var htmlUrl = String(
 			var htmlUrl = String(
 				htmlUrlOptional != null ? htmlUrlOptional : getWxConfigSignUrl()
 				htmlUrlOptional != null ? htmlUrlOptional : getWxConfigSignUrl()
@@ -1232,17 +1251,22 @@
 			}
 			}
 			if (isWxDebugOn()) {
 			if (isWxDebugOn()) {
 				try {
 				try {
-					window.alert('htmlUrl(签名用):\n' + htmlUrl);
+					window.alert('htmlUrl(签名用,应与地址栏一致):\n' + htmlUrl);
 				} catch (eDbg) {}
 				} catch (eDbg) {}
 			}
 			}
-			var requestUrl = buildWxGetConfigRequestUrl(htmlUrl);
+			var requestUrl = getWxGetConfigApiUrl();
+			var requestBody = buildWxGetConfigRequestBody(htmlUrl);
 			console.log('[wx] htmlUrl=', htmlUrl);
 			console.log('[wx] htmlUrl=', htmlUrl);
-			console.log('[wx] GET getWxConfig →', requestUrl);
+			console.log('[wx] POST getWxConfig →', requestUrl, requestBody);
 			return fetch(requestUrl, {
 			return fetch(requestUrl, {
-				method: 'GET',
+				method: 'POST',
 				mode: 'cors',
 				mode: 'cors',
 				credentials: 'omit',
 				credentials: 'omit',
-				headers: { Accept: 'application/json' }
+				headers: {
+					Accept: 'application/json',
+					'Content-Type': 'application/json;charset=UTF-8'
+				},
+				body: JSON.stringify(requestBody)
 			})
 			})
 				.then(function (r) {
 				.then(function (r) {
 					if (r.ok) return r.json();
 					if (r.ok) return r.json();
@@ -1271,8 +1295,9 @@
 					}
 					}
 					var sign = normalizeWxJssdkSignPayload(res, htmlUrl);
 					var sign = normalizeWxJssdkSignPayload(res, htmlUrl);
 					if (!sign) {
 					if (!sign) {
+						console.warn('[wx] getWxConfig 响应字段不全', res, 'htmlUrl=', htmlUrl);
 						throw new Error(
 						throw new Error(
-							'getWxConfig 缺少 appId/timestamp/nonceStr/signature'
+							'getWxConfig 缺少 appId/timestamp/nonceStr/signature(见控制台)'
 						);
 						);
 					}
 					}
 					if (sign.appId !== WECHAT_MP_APP_ID) {
 					if (sign.appId !== WECHAT_MP_APP_ID) {