|
@@ -1039,14 +1039,9 @@
|
|
|
*/
|
|
*/
|
|
|
var API_BASE = 'https://test.ailien.shop/alienStore';
|
|
var API_BASE = 'https://test.ailien.shop/alienStore';
|
|
|
|
|
|
|
|
- /** 微信开放标签 wx-open-launch-app 的 appid(移动应用,与开放平台移动应用一致) */
|
|
|
|
|
|
|
+ /** wx-open-launch-app 的 appid(开放平台移动应用;若与公众号不同,只改这里和标签 appid) */
|
|
|
var WECHAT_OPEN_APP_ID = 'wx5598889b28511717';
|
|
var WECHAT_OPEN_APP_ID = 'wx5598889b28511717';
|
|
|
- /** 已知移动应用 AppID;getWxConfig 若只返回此类 id,不能用于 wx.config */
|
|
|
|
|
- var WECHAT_KNOWN_MOBILE_APP_IDS = ['wxf5f1efe3a9f5012e', 'wx5598889b28511717'];
|
|
|
|
|
- /**
|
|
|
|
|
- * wx.config 必须用公众号 AppID(服务号)。若后端在 data 里单独返回 mpAppId / officialAppId 会优先使用。
|
|
|
|
|
- * 也可在分享链接加 ?wxMpAppId=wx公众号appid 临时联调(正式应由后端返回)。
|
|
|
|
|
- */
|
|
|
|
|
|
|
+ /** 可选:强制 wx.config 使用的公众号 appId;默认用 getWxConfig 返回的 data.appId */
|
|
|
var WECHAT_MP_APP_ID = '';
|
|
var WECHAT_MP_APP_ID = '';
|
|
|
/**
|
|
/**
|
|
|
* 进入页 GET {API_BASE}/wx/getWxConfig?url={当前页完整 URL,含 ? 参数,不含 #}
|
|
* 进入页 GET {API_BASE}/wx/getWxConfig?url={当前页完整 URL,含 ? 参数,不含 #}
|
|
@@ -1228,15 +1223,6 @@
|
|
|
return H5_PAGE_BASE_FALLBACK + rel;
|
|
return H5_PAGE_BASE_FALLBACK + rel;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function isWeChatMobileAppId(appId) {
|
|
|
|
|
- var id = String(appId || '').trim();
|
|
|
|
|
- if (!id) return false;
|
|
|
|
|
- for (var i = 0; i < WECHAT_KNOWN_MOBILE_APP_IDS.length; i++) {
|
|
|
|
|
- if (id === WECHAT_KNOWN_MOBILE_APP_IDS[i]) return true;
|
|
|
|
|
- }
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
function resolveWxConfigAppIdFromSignData(d) {
|
|
function resolveWxConfigAppIdFromSignData(d) {
|
|
|
if (!d || typeof d !== 'object') return '';
|
|
if (!d || typeof d !== 'object') return '';
|
|
|
var mp =
|
|
var mp =
|
|
@@ -1251,9 +1237,7 @@
|
|
|
if (fromQuery) return fromQuery;
|
|
if (fromQuery) return fromQuery;
|
|
|
var raw = d.appId || d.appid || d.wxAppId;
|
|
var raw = d.appId || d.appid || d.wxAppId;
|
|
|
if (raw == null || String(raw).trim() === '') return '';
|
|
if (raw == null || String(raw).trim() === '') return '';
|
|
|
- raw = String(raw).trim();
|
|
|
|
|
- if (isWeChatMobileAppId(raw)) return '';
|
|
|
|
|
- return raw;
|
|
|
|
|
|
|
+ return String(raw).trim();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function normalizeWxJssdkSignPayload(res) {
|
|
function normalizeWxJssdkSignPayload(res) {
|
|
@@ -1273,19 +1257,11 @@
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function formatWxConfigErrorTip(err, signPageUrl, rawAppId) {
|
|
|
|
|
|
|
+ function formatWxConfigErrorTip(err, signPageUrl) {
|
|
|
var errMsg = '';
|
|
var errMsg = '';
|
|
|
if (err && err.errMsg) errMsg = String(err.errMsg);
|
|
if (err && err.errMsg) errMsg = String(err.errMsg);
|
|
|
else if (typeof err === 'string') errMsg = err;
|
|
else if (typeof err === 'string') errMsg = err;
|
|
|
var tip = '微信 JSSDK 配置失败';
|
|
var tip = '微信 JSSDK 配置失败';
|
|
|
- if (rawAppId && isWeChatMobileAppId(rawAppId)) {
|
|
|
|
|
- return (
|
|
|
|
|
- tip +
|
|
|
|
|
- ':接口返回的 appId(' +
|
|
|
|
|
- rawAppId +
|
|
|
|
|
- ')是移动应用 ID。wx.config 必须使用公众号 AppID,请后端用公众号 AppSecret 签名并返回公众号 appId(或 data.mpAppId)。'
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
if (/invalid signature/i.test(errMsg)) {
|
|
if (/invalid signature/i.test(errMsg)) {
|
|
|
var signUrl = signPageUrl || getWxConfigSignUrl();
|
|
var signUrl = signPageUrl || getWxConfigSignUrl();
|
|
|
var hasQuery = signUrl.indexOf('?') >= 0;
|
|
var hasQuery = signUrl.indexOf('?') >= 0;
|
|
@@ -1338,19 +1314,10 @@
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
var pack = normalizeWxJssdkSignPayload(res);
|
|
var pack = normalizeWxJssdkSignPayload(res);
|
|
|
- if (!pack) {
|
|
|
|
|
- var rd =
|
|
|
|
|
- res.data != null && typeof res.data === 'object' ? res.data : res;
|
|
|
|
|
- var rawId = rd && (rd.appId || rd.appid) ? String(rd.appId || rd.appid) : '';
|
|
|
|
|
- if (rawId && isWeChatMobileAppId(rawId)) {
|
|
|
|
|
- return Promise.reject({ mobileAppId: rawId });
|
|
|
|
|
- }
|
|
|
|
|
- throw new Error('empty sign payload');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (!pack) throw new Error('empty sign payload');
|
|
|
return pack;
|
|
return pack;
|
|
|
})
|
|
})
|
|
|
- .catch(function (err) {
|
|
|
|
|
- if (err && err.mobileAppId) return Promise.reject(err);
|
|
|
|
|
|
|
+ .catch(function () {
|
|
|
return tryUrl(idx + 1);
|
|
return tryUrl(idx + 1);
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
@@ -1452,9 +1419,9 @@
|
|
|
}
|
|
}
|
|
|
bindWeChatLaunchTagEvents();
|
|
bindWeChatLaunchTagEvents();
|
|
|
if (!sign) {
|
|
if (!sign) {
|
|
|
- console.warn('[wx] GET ' + WECHAT_GET_WX_CONFIG_PATH + ' — invalid sign for wx.config');
|
|
|
|
|
|
|
+ console.warn('[wx] GET ' + WECHAT_GET_WX_CONFIG_PATH + ' — empty or invalid sign payload');
|
|
|
showAppOpenFailTip(
|
|
showAppOpenFailTip(
|
|
|
- formatWxConfigErrorTip(null, signPageUrl, 'wxf5f1efe3a9f5012e')
|
|
|
|
|
|
|
+ '微信 JSSDK:getWxConfig 未返回可用的 appId/timestamp/nonceStr/signature。'
|
|
|
);
|
|
);
|
|
|
setFabLaunchMode('scheme');
|
|
setFabLaunchMode('scheme');
|
|
|
return false;
|
|
return false;
|
|
@@ -1484,7 +1451,7 @@
|
|
|
wx.error(function (err) {
|
|
wx.error(function (err) {
|
|
|
console.warn('[wx.config]', err);
|
|
console.warn('[wx.config]', err);
|
|
|
weChatJssdkConfigured = false;
|
|
weChatJssdkConfigured = false;
|
|
|
- showAppOpenFailTip(formatWxConfigErrorTip(err, signPageUrl, ''));
|
|
|
|
|
|
|
+ showAppOpenFailTip(formatWxConfigErrorTip(err, signPageUrl));
|
|
|
setFabLaunchMode('scheme');
|
|
setFabLaunchMode('scheme');
|
|
|
resolve(false);
|
|
resolve(false);
|
|
|
});
|
|
});
|
|
@@ -1493,11 +1460,6 @@
|
|
|
.catch(function (e) {
|
|
.catch(function (e) {
|
|
|
console.warn('[wx] init failed', e);
|
|
console.warn('[wx] init failed', e);
|
|
|
if (inWx) {
|
|
if (inWx) {
|
|
|
- if (e && e.mobileAppId) {
|
|
|
|
|
- showAppOpenFailTip(
|
|
|
|
|
- formatWxConfigErrorTip(null, signPageUrl, e.mobileAppId)
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
setFabLaunchMode('scheme');
|
|
setFabLaunchMode('scheme');
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|