|
|
@@ -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 {
|