修正了cos中的低级问题,endpoint/wechat中的低级问题

This commit is contained in:
Xu Chang 2024-05-21 19:54:07 +08:00
parent bb82308678
commit de17a65848
16 changed files with 124 additions and 87 deletions

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -473,15 +473,15 @@ async function onWeChatPublicEvent(data, context) {
const event = Event.toLowerCase();
switch (event) {
case 'subscribe':
setUserSubscribed(FromUserName, EventKey, context);
await setUserSubscribed(FromUserName, EventKey, context);
evt = `用户${FromUserName}关注公众号`;
break;
case 'scan':
setUserSubscribed(FromUserName, EventKey, context);
await setUserSubscribed(FromUserName, EventKey, context);
evt = `用户${FromUserName}再次扫描带${EventKey}键值的二维码`;
break;
case 'unsubscribe': {
setUserUnsubscribed(FromUserName, context);
await setUserUnsubscribed(FromUserName, context);
evt = `用户${FromUserName}取关`;
break;
}
@ -490,7 +490,7 @@ async function onWeChatPublicEvent(data, context) {
break;
}
case 'click': {
setClickEventKey(FromUserName, EventKey, context);
await setClickEventKey(FromUserName, EventKey, context);
evt = `用户${FromUserName}点击菜单【${EventKey}`;
break;
}

View File

@ -13,25 +13,22 @@ type ConfigOptions = {
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
};
type ParamOptions = wx.IcheckJsApi | wx.IaddCard | wx.IchooseCard | wx.IonMenuShareTimeline | wx.IonMenuShareAppMessage | wx.IonMenuShareQQ | wx.IonMenuShareWeibo | wx.IonMenuShareQZone | wx.IchooseImage | wx.IpreviewImage | wx.IgetLocalImgData | wx.IplaypausestopVoice | wx.IopenLocation | wx.IgetLocation | wx.IscanQRCode | wx.IopenProductSpecificView | wx.IchooseCard | wx.IopenCard | wx.IchooseWXPay;
export declare class WechatSdk<ED extends EntityDict> extends Feature {
private cache;
private storage;
private environment;
private landingUrl?;
private lastConfigUrl?;
constructor(cache: Cache<ED>, storage: LocalStorage, environment: Environment);
signatureJsSDK(url: string): Promise<any>;
getConfig(config: ConfigOptions): Promise<unknown>;
setLandingUrl(url?: string): void;
init(options?: {
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
debug?: boolean;
}): Promise<unknown>;
private initedApiList;
private init;
/**
* jssdk
*/
loadWxAPi(name: wx.ApiMethod, options?: ParamOptions, jsApiList?: wx.jsApiList, openTagList?: wx.openTagList): Promise<object>;
loadWxAPi<T extends wx.ApiMethod>(name: T, options?: Parameters<(typeof wx)[T]>[0]): Promise<object>;
subscribeMpMessage(messageTypes: string[], haveToAccept?: boolean, tip?: string): Promise<boolean>;
}
export {};

View File

@ -8,6 +8,7 @@ export class WechatSdk extends Feature {
storage;
environment;
landingUrl; //解决在IOS上无论路由切换到哪个页面实际真正有效的的签名URL是【第一次进入应用时的URL】;
lastConfigUrl;
constructor(cache, storage, environment) {
super();
this.cache = cache;
@ -41,20 +42,24 @@ export class WechatSdk extends Feature {
this.landingUrl = url;
}
}
initedApiList = [];
async init(options) {
if (!isWeiXin) {
console.warn('只能在微信客户端初始化JSSDK');
return;
}
const { jsApiList, openTagList, debug = process.env.NODE_ENV === 'development', } = options || {};
const { name } = options || {};
let url = window.location.href;
//在ios上 实际真正有效的的签名URL是【第一次进入应用时的URL】
if (isIos && !isWeiXinDevTools && this.landingUrl) {
url = this.landingUrl;
}
if (this.initedApiList.includes(name) && this.lastConfigUrl === url) {
return;
}
const splitUrl = url.split('#')[0];
const result = await this.signatureJsSDK(splitUrl); // 接口回来的是noncestr 不是nonceStr
let jsApiList2 = [
const dftApiList = [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareTimeline',
@ -70,28 +75,35 @@ export class WechatSdk extends Feature {
'uploadImage',
'downloadImage',
];
if (jsApiList && jsApiList instanceof Array) {
jsApiList2 = uniq(jsApiList2.concat(jsApiList));
}
let openTagList2 = ['wx-open-launch-weapp'];
if (openTagList && openTagList instanceof Array) {
openTagList2 = uniq(openTagList2.concat(openTagList));
}
return this.getConfig({
debug: debug,
const jsApiList = uniq(this.initedApiList.length > 0 ? this.initedApiList.concat([name]) : dftApiList.concat([name]));
/**
* https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html
* 文档中有四个ts声明可能不及时
* by Xc 20240321
*/
const openTagList = [
'wx-open-launch-weapp',
'wx-open-launch-app',
'wx-open-subscribe',
'wx-open-audio'
];
await this.getConfig({
debug: process.env.NODE_ENV === 'development',
appId: result.appId,
timestamp: result.timestamp,
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
openTagList: openTagList2,
jsApiList,
openTagList,
});
this.initedApiList = jsApiList;
this.lastConfigUrl = url;
}
/**
* 微信jssdk 传入方法名
*/
async loadWxAPi(name, options, jsApiList, openTagList) {
await this.init({ jsApiList, openTagList });
async loadWxAPi(name, options) {
await this.init({ name });
const wxFn = wxPromisify(wx[name]);
const result = await wxFn(options);
return result;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<1 | 0>;
}, userIds?: string[]): Promise<0 | 1>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -14,6 +14,10 @@ export function getCos(origin) {
}
export function composeFileUrl(extraFile, config, style) {
const { origin } = extraFile;
if (origin === 'unknown') {
// 扯淡的代码 by Xc 20240521
return extraFile.extra1;
}
const cos = CosDict[origin];
return cos.composeFileUrl(extraFile, config, style);
}

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -478,15 +478,15 @@ async function onWeChatPublicEvent(data, context) {
const event = Event.toLowerCase();
switch (event) {
case 'subscribe':
setUserSubscribed(FromUserName, EventKey, context);
await setUserSubscribed(FromUserName, EventKey, context);
evt = `用户${FromUserName}关注公众号`;
break;
case 'scan':
setUserSubscribed(FromUserName, EventKey, context);
await setUserSubscribed(FromUserName, EventKey, context);
evt = `用户${FromUserName}再次扫描带${EventKey}键值的二维码`;
break;
case 'unsubscribe': {
setUserUnsubscribed(FromUserName, context);
await setUserUnsubscribed(FromUserName, context);
evt = `用户${FromUserName}取关`;
break;
}
@ -495,7 +495,7 @@ async function onWeChatPublicEvent(data, context) {
break;
}
case 'click': {
setClickEventKey(FromUserName, EventKey, context);
await setClickEventKey(FromUserName, EventKey, context);
evt = `用户${FromUserName}点击菜单【${EventKey}`;
break;
}

View File

@ -13,25 +13,22 @@ type ConfigOptions = {
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
};
type ParamOptions = wx.IcheckJsApi | wx.IaddCard | wx.IchooseCard | wx.IonMenuShareTimeline | wx.IonMenuShareAppMessage | wx.IonMenuShareQQ | wx.IonMenuShareWeibo | wx.IonMenuShareQZone | wx.IchooseImage | wx.IpreviewImage | wx.IgetLocalImgData | wx.IplaypausestopVoice | wx.IopenLocation | wx.IgetLocation | wx.IscanQRCode | wx.IopenProductSpecificView | wx.IchooseCard | wx.IopenCard | wx.IchooseWXPay;
export declare class WechatSdk<ED extends EntityDict> extends Feature {
private cache;
private storage;
private environment;
private landingUrl?;
private lastConfigUrl?;
constructor(cache: Cache<ED>, storage: LocalStorage, environment: Environment);
signatureJsSDK(url: string): Promise<any>;
getConfig(config: ConfigOptions): Promise<unknown>;
setLandingUrl(url?: string): void;
init(options?: {
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
debug?: boolean;
}): Promise<unknown>;
private initedApiList;
private init;
/**
* jssdk
*/
loadWxAPi(name: wx.ApiMethod, options?: ParamOptions, jsApiList?: wx.jsApiList, openTagList?: wx.openTagList): Promise<object>;
loadWxAPi<T extends wx.ApiMethod>(name: T, options?: Parameters<(typeof wx)[T]>[0]): Promise<object>;
subscribeMpMessage(messageTypes: string[], haveToAccept?: boolean, tip?: string): Promise<boolean>;
}
export {};

View File

@ -12,6 +12,7 @@ class WechatSdk extends Feature_1.Feature {
storage;
environment;
landingUrl; //解决在IOS上无论路由切换到哪个页面实际真正有效的的签名URL是【第一次进入应用时的URL】;
lastConfigUrl;
constructor(cache, storage, environment) {
super();
this.cache = cache;
@ -45,20 +46,24 @@ class WechatSdk extends Feature_1.Feature {
this.landingUrl = url;
}
}
initedApiList = [];
async init(options) {
if (!utils_1.isWeiXin) {
console.warn('只能在微信客户端初始化JSSDK');
return;
}
const { jsApiList, openTagList, debug = process.env.NODE_ENV === 'development', } = options || {};
const { name } = options || {};
let url = window.location.href;
//在ios上 实际真正有效的的签名URL是【第一次进入应用时的URL】
if (utils_1.isIos && !utils_1.isWeiXinDevTools && this.landingUrl) {
url = this.landingUrl;
}
if (this.initedApiList.includes(name) && this.lastConfigUrl === url) {
return;
}
const splitUrl = url.split('#')[0];
const result = await this.signatureJsSDK(splitUrl); // 接口回来的是noncestr 不是nonceStr
let jsApiList2 = [
const dftApiList = [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareTimeline',
@ -74,28 +79,35 @@ class WechatSdk extends Feature_1.Feature {
'uploadImage',
'downloadImage',
];
if (jsApiList && jsApiList instanceof Array) {
jsApiList2 = (0, lodash_1.uniq)(jsApiList2.concat(jsApiList));
}
let openTagList2 = ['wx-open-launch-weapp'];
if (openTagList && openTagList instanceof Array) {
openTagList2 = (0, lodash_1.uniq)(openTagList2.concat(openTagList));
}
return this.getConfig({
debug: debug,
const jsApiList = (0, lodash_1.uniq)(this.initedApiList.length > 0 ? this.initedApiList.concat([name]) : dftApiList.concat([name]));
/**
* https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html
* 文档中有四个ts声明可能不及时
* by Xc 20240321
*/
const openTagList = [
'wx-open-launch-weapp',
'wx-open-launch-app',
'wx-open-subscribe',
'wx-open-audio'
];
await this.getConfig({
debug: process.env.NODE_ENV === 'development',
appId: result.appId,
timestamp: result.timestamp,
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
openTagList: openTagList2,
jsApiList,
openTagList,
});
this.initedApiList = jsApiList;
this.lastConfigUrl = url;
}
/**
* 微信jssdk 传入方法名
*/
async loadWxAPi(name, options, jsApiList, openTagList) {
await this.init({ jsApiList, openTagList });
async loadWxAPi(name, options) {
await this.init({ name });
const wxFn = (0, promisify_1.promisify)(weixin_js_sdk_1.default[name]);
const result = await wxFn(options);
return result;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<1 | 0>;
}, userIds?: string[]): Promise<0 | 1>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -19,6 +19,10 @@ function getCos(origin) {
exports.getCos = getCos;
function composeFileUrl(extraFile, config, style) {
const { origin } = extraFile;
if (origin === 'unknown') {
// 扯淡的代码 by Xc 20240521
return extraFile.extra1;
}
const cos = CosDict[origin];
return cos.composeFileUrl(extraFile, config, style);
}

View File

@ -627,15 +627,15 @@ async function onWeChatPublicEvent(data: WechatPublicEventData, context: BRC<Ent
const event = Event.toLowerCase();
switch (event) {
case 'subscribe':
setUserSubscribed(FromUserName, EventKey!, context);
await setUserSubscribed(FromUserName, EventKey!, context);
evt = `用户${FromUserName}关注公众号`;
break;
case 'scan':
setUserSubscribed(FromUserName, EventKey!, context);
await setUserSubscribed(FromUserName, EventKey!, context);
evt = `用户${FromUserName}再次扫描带${EventKey}键值的二维码`;
break;
case 'unsubscribe': {
setUserUnsubscribed(FromUserName, context);
await setUserUnsubscribed(FromUserName, context);
evt = `用户${FromUserName}取关`;
break;
}
@ -644,7 +644,7 @@ async function onWeChatPublicEvent(data: WechatPublicEventData, context: BRC<Ent
break;
}
case 'click': {
setClickEventKey(FromUserName, EventKey!, context);
await setClickEventKey(FromUserName, EventKey!, context);
evt = `用户${FromUserName}点击菜单【${EventKey}`;
break;
}

View File

@ -50,7 +50,8 @@ export class WechatSdk<ED extends EntityDict> extends Feature {
private cache: Cache<ED>;
private storage: LocalStorage;
private environment: Environment;
private landingUrl?: string; //解决在IOS上无论路由切换到哪个页面实际真正有效的的签名URL是【第一次进入应用时的URL】;
private landingUrl?: string; //解决在IOS上无论路由切换到哪个页面实际真正有效的的签名URL是【第一次进入应用时的URL】;
private lastConfigUrl?: string;
constructor(
cache: Cache<ED>,
@ -97,19 +98,17 @@ export class WechatSdk<ED extends EntityDict> extends Feature {
}
}
async init(options?: {
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
debug?: boolean;
private initedApiList: wx.ApiMethod[] = [];
private async init(options: {
name: wx.ApiMethod
}) {
if (!isWeiXin) {
console.warn('只能在微信客户端初始化JSSDK');
return;
}
const {
jsApiList,
openTagList,
debug = process.env.NODE_ENV === 'development',
name
} = options || {};
let url = window.location.href;
@ -117,10 +116,14 @@ export class WechatSdk<ED extends EntityDict> extends Feature {
if (isIos && !isWeiXinDevTools && this.landingUrl) {
url = this.landingUrl;
}
if (this.initedApiList.includes(name) && this.lastConfigUrl === url) {
return;
}
const splitUrl = url.split('#')[0];
const result = await this.signatureJsSDK(splitUrl); // 接口回来的是noncestr 不是nonceStr
let jsApiList2: wx.jsApiList = [
const dftApiList: wx.jsApiList = [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareTimeline',
@ -136,36 +139,40 @@ export class WechatSdk<ED extends EntityDict> extends Feature {
'uploadImage',
'downloadImage',
];
if (jsApiList && jsApiList instanceof Array) {
jsApiList2 = uniq(jsApiList2.concat(jsApiList));
}
const jsApiList = uniq(this.initedApiList.length > 0 ? this.initedApiList.concat([name]) : dftApiList.concat([name]));
let openTagList2: wx.openTagList = ['wx-open-launch-weapp'];
if (openTagList && openTagList instanceof Array) {
openTagList2 = uniq(openTagList2.concat(openTagList));
}
/**
* https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html
* ts声明可能不及时
* by Xc 20240321
*/
const openTagList: wx.openTagList = [
'wx-open-launch-weapp',
'wx-open-launch-app',
'wx-open-subscribe',
'wx-open-audio'] as any;
return this.getConfig({
debug: debug,
await this.getConfig({
debug: process.env.NODE_ENV === 'development',
appId: result.appId,
timestamp: result.timestamp,
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
openTagList: openTagList2,
jsApiList,
openTagList,
});
this.initedApiList = jsApiList;
this.lastConfigUrl = url;
}
/**
* jssdk
*/
async loadWxAPi(
name: wx.ApiMethod,
options?: ParamOptions,
jsApiList?: wx.jsApiList,
openTagList?: wx.openTagList
async loadWxAPi<T extends wx.ApiMethod>(
name: T,
options?: Parameters<(typeof wx)[T]>[0],
) {
await this.init({ jsApiList, openTagList });
await this.init({ name });
const wxFn = wxPromisify(wx[name]);
const result = await wxFn(options);
return result;

View File

@ -27,6 +27,10 @@ export function composeFileUrl<ED extends EntityDict>(
style?: string
) {
const { origin } = extraFile;
if (origin === 'unknown') {
// 扯淡的代码 by Xc 20240521
return extraFile.extra1!;
}
const cos = CosDict[origin];
return cos.composeFileUrl(extraFile, config, style);
}