|
@@ -1076,6 +1076,8 @@
|
|
|
var weChatJssdkConfigured = false;
|
|
var weChatJssdkConfigured = false;
|
|
|
var wxConfigSignRetriedBaseUrl = false;
|
|
var wxConfigSignRetriedBaseUrl = false;
|
|
|
var wxSignUrlFullBeforeStrip = '';
|
|
var wxSignUrlFullBeforeStrip = '';
|
|
|
|
|
+ var wxInitLastError = '';
|
|
|
|
|
+ var wxJssdkInitPromise = null;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 关店(businessStatus=99)更多推荐:POST …/ai/multimodal-services/api/v1/search/global/store-recommend
|
|
* 关店(businessStatus=99)更多推荐:POST …/ai/multimodal-services/api/v1/search/global/store-recommend
|
|
@@ -1291,9 +1293,15 @@
|
|
|
return deep.length <= 1024 ? deep : (pageUrl || deep).slice(0, 1024);
|
|
return deep.length <= 1024 ? deep : (pageUrl || deep).slice(0, 1024);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ function setWxInitError(msg) {
|
|
|
|
|
+ wxInitLastError = String(msg || '').trim();
|
|
|
|
|
+ if (wxInitLastError) console.warn('[wx]', wxInitLastError);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
function fetchWeChatJssdkSign(signPageUrl) {
|
|
function fetchWeChatJssdkSign(signPageUrl) {
|
|
|
signPageUrl = signPageUrl || getWxConfigSignUrl();
|
|
signPageUrl = signPageUrl || getWxConfigSignUrl();
|
|
|
var url = buildWxGetConfigRequestUrl(signPageUrl);
|
|
var url = buildWxGetConfigRequestUrl(signPageUrl);
|
|
|
|
|
+ console.log('[wx] GET getWxConfig →', url);
|
|
|
return fetch(url, {
|
|
return fetch(url, {
|
|
|
method: 'GET',
|
|
method: 'GET',
|
|
|
mode: 'cors',
|
|
mode: 'cors',
|
|
@@ -1301,18 +1309,32 @@
|
|
|
headers: { Accept: 'application/json' }
|
|
headers: { Accept: 'application/json' }
|
|
|
})
|
|
})
|
|
|
.then(function (r) {
|
|
.then(function (r) {
|
|
|
- if (!r.ok) throw new Error('HTTP ' + r.status);
|
|
|
|
|
- return r.json();
|
|
|
|
|
|
|
+ if (r.ok) return r.json();
|
|
|
|
|
+ return r
|
|
|
|
|
+ .text()
|
|
|
|
|
+ .catch(function () {
|
|
|
|
|
+ return '';
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(function (text) {
|
|
|
|
|
+ var hint = '';
|
|
|
|
|
+ try {
|
|
|
|
|
+ var j = JSON.parse(text);
|
|
|
|
|
+ hint = j.msg || j.message || '';
|
|
|
|
|
+ } catch (eP) {
|
|
|
|
|
+ if (text) hint = text.slice(0, 120);
|
|
|
|
|
+ }
|
|
|
|
|
+ throw new Error('getWxConfig HTTP ' + r.status + (hint ? ':' + hint : ''));
|
|
|
|
|
+ });
|
|
|
})
|
|
})
|
|
|
.then(function (res) {
|
|
.then(function (res) {
|
|
|
if (res && res.code != null) {
|
|
if (res && res.code != null) {
|
|
|
var c = Number(res.code);
|
|
var c = Number(res.code);
|
|
|
if (c !== 200 && c !== 0 && res.success !== true) {
|
|
if (c !== 200 && c !== 0 && res.success !== true) {
|
|
|
- throw new Error(res.msg || 'sign rejected');
|
|
|
|
|
|
|
+ throw new Error(res.msg || res.message || 'getWxConfig code ' + c);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
var pack = normalizeWxJssdkSignPayload(res, signPageUrl);
|
|
var pack = normalizeWxJssdkSignPayload(res, signPageUrl);
|
|
|
- if (!pack) throw new Error('empty sign');
|
|
|
|
|
|
|
+ if (!pack) throw new Error('getWxConfig 缺少 appId/timestamp/nonceStr/signature');
|
|
|
return pack;
|
|
return pack;
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
@@ -1348,9 +1370,11 @@
|
|
|
});
|
|
});
|
|
|
wx.error(function (err) {
|
|
wx.error(function (err) {
|
|
|
weChatJssdkConfigured = false;
|
|
weChatJssdkConfigured = false;
|
|
|
|
|
+ wxJssdkInitPromise = null;
|
|
|
updateFabOpenLayer();
|
|
updateFabOpenLayer();
|
|
|
var errMsg = getWxErrMsg(err);
|
|
var errMsg = getWxErrMsg(err);
|
|
|
- if (isWxDebugOn()) window.alert(formatWxConfigErrorTip(err, urlForWx));
|
|
|
|
|
|
|
+ setWxInitError(formatWxConfigErrorTip(err, urlForWx));
|
|
|
|
|
+ if (isWxDebugOn()) window.alert(wxInitLastError);
|
|
|
console.warn('[wx.config]', errMsg, urlForWx);
|
|
console.warn('[wx.config]', errMsg, urlForWx);
|
|
|
var baseUrl = getWxSignUrlBase();
|
|
var baseUrl = getWxSignUrlBase();
|
|
|
var fullUrl = getWxSignUrlFull();
|
|
var fullUrl = getWxSignUrlFull();
|
|
@@ -1438,35 +1462,82 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function initWeChatOpenLaunchApp() {
|
|
function initWeChatOpenLaunchApp() {
|
|
|
- if (!isWeChatInAppBrowser()) return Promise.resolve(false);
|
|
|
|
|
|
|
+ if (!isWeChatInAppBrowser()) {
|
|
|
|
|
+ console.log('[wx] 未调用 getWxConfig:当前不是微信内置浏览器');
|
|
|
|
|
+ return Promise.resolve(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (wxJssdkInitPromise) return wxJssdkInitPromise;
|
|
|
|
|
+
|
|
|
wxConfigSignRetriedBaseUrl = false;
|
|
wxConfigSignRetriedBaseUrl = false;
|
|
|
|
|
+ wxInitLastError = '';
|
|
|
var signPageUrl = getWxConfigSignUrl();
|
|
var signPageUrl = getWxConfigSignUrl();
|
|
|
|
|
+
|
|
|
if (typeof wx === 'undefined') {
|
|
if (typeof wx === 'undefined') {
|
|
|
- console.warn('[wx] jweixin not loaded');
|
|
|
|
|
|
|
+ setWxInitError('jweixin.js 未加载,无法请求 getWxConfig');
|
|
|
|
|
+ console.warn('[wx] 未调用 getWxConfig:wx 对象不存在');
|
|
|
return Promise.resolve(false);
|
|
return Promise.resolve(false);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
bindWeChatLaunchTagEvents();
|
|
bindWeChatLaunchTagEvents();
|
|
|
- return fetchWeChatJssdkSign(signPageUrl)
|
|
|
|
|
|
|
+ wxJssdkInitPromise = fetchWeChatJssdkSign(signPageUrl)
|
|
|
.then(function (sign) {
|
|
.then(function (sign) {
|
|
|
if (!sign) {
|
|
if (!sign) {
|
|
|
- console.warn('[wx] getWxConfig empty');
|
|
|
|
|
|
|
+ setWxInitError('getWxConfig 返回为空');
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
if (sign.appId !== WECHAT_MP_APP_ID) {
|
|
if (sign.appId !== WECHAT_MP_APP_ID) {
|
|
|
- console.warn(
|
|
|
|
|
- '[wx] config appId=' +
|
|
|
|
|
- sign.appId +
|
|
|
|
|
- ' 与 WECHAT_MP_APP_ID=' +
|
|
|
|
|
- WECHAT_MP_APP_ID +
|
|
|
|
|
- ' 不一致,请后端用服务号 ID 签名'
|
|
|
|
|
|
|
+ setWxInitError(
|
|
|
|
|
+ '后端 appId=' + sign.appId + ',应为服务号 ' + WECHAT_MP_APP_ID
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
- return applyWxConfig(sign, signPageUrl);
|
|
|
|
|
|
|
+ return applyWxConfig(sign, signPageUrl).then(function (ok) {
|
|
|
|
|
+ if (!ok && !wxInitLastError) {
|
|
|
|
|
+ setWxInitError('wx.config 失败,可加 ?wxDebug=1');
|
|
|
|
|
+ }
|
|
|
|
|
+ return ok;
|
|
|
|
|
+ });
|
|
|
})
|
|
})
|
|
|
.catch(function (e) {
|
|
.catch(function (e) {
|
|
|
|
|
+ setWxInitError(e && e.message ? e.message : 'getWxConfig 请求失败');
|
|
|
console.warn('[wx] init failed', e);
|
|
console.warn('[wx] init failed', e);
|
|
|
return false;
|
|
return false;
|
|
|
|
|
+ })
|
|
|
|
|
+ .finally(function () {
|
|
|
|
|
+ if (!weChatJssdkConfigured) wxJssdkInitPromise = null;
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ return wxJssdkInitPromise;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /** 进页即尝试拉签名;jweixin 晚到时自动重试 */
|
|
|
|
|
+ function scheduleWeChatJssdkBootstrap() {
|
|
|
|
|
+ if (!isWeChatInAppBrowser()) return;
|
|
|
|
|
+ var attempts = 0;
|
|
|
|
|
+ function tick() {
|
|
|
|
|
+ attempts += 1;
|
|
|
|
|
+ if (weChatJssdkConfigured) return;
|
|
|
|
|
+ initWeChatOpenLaunchApp();
|
|
|
|
|
+ if (!weChatJssdkConfigured && attempts < 8 && typeof wx === 'undefined') {
|
|
|
|
|
+ setTimeout(tick, 400);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ tick();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function ensureWeChatJssdkReadyOnClick() {
|
|
|
|
|
+ wxJssdkInitPromise = null;
|
|
|
|
|
+ return initWeChatOpenLaunchApp().then(function (ok) {
|
|
|
|
|
+ if (ok) {
|
|
|
|
|
+ updateFabOpenLayer();
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ showAppOpenFailTip(
|
|
|
|
|
+ wxInitLastError
|
|
|
|
|
+ ? 'JSSDK 未就绪:' + wxInitLastError
|
|
|
|
|
+ : 'JSSDK 未就绪:未请求到 getWxConfig'
|
|
|
|
|
+ );
|
|
|
|
|
+ return false;
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function showAppOpenFailTip(msg) {
|
|
function showAppOpenFailTip(msg) {
|
|
@@ -1506,9 +1577,7 @@
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
if (inWx && !weChatJssdkConfigured) {
|
|
if (inWx && !weChatJssdkConfigured) {
|
|
|
- showAppOpenFailTip(
|
|
|
|
|
- '微信内请先完成 JSSDK 配置(服务号 wx412792c77f47babd 签名)。可加 ?wxDebug=1 查看报错。'
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ ensureWeChatJssdkReadyOnClick();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2712,9 +2781,6 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function boot() {
|
|
function boot() {
|
|
|
- run();
|
|
|
|
|
- bindMarketingMore();
|
|
|
|
|
- bindStaffSection();
|
|
|
|
|
var launchTag = document.getElementById('launch-btn');
|
|
var launchTag = document.getElementById('launch-btn');
|
|
|
if (launchTag) launchTag.setAttribute('appid', WECHAT_OPEN_APP_ID);
|
|
if (launchTag) launchTag.setAttribute('appid', WECHAT_OPEN_APP_ID);
|
|
|
var openBtn = document.getElementById('openApp');
|
|
var openBtn = document.getElementById('openApp');
|
|
@@ -2723,7 +2789,11 @@
|
|
|
tryOpenHBuilderApp();
|
|
tryOpenHBuilderApp();
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
- initWeChatOpenLaunchApp();
|
|
|
|
|
|
|
+ /* 先于 run(),避免误以为没调 getWxConfig */
|
|
|
|
|
+ scheduleWeChatJssdkBootstrap();
|
|
|
|
|
+ run();
|
|
|
|
|
+ bindMarketingMore();
|
|
|
|
|
+ bindStaffSection();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (document.readyState === 'complete') {
|
|
if (document.readyState === 'complete') {
|