baja-lite 1.0.36 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baja-lite",
3
- "version": "1.0.36",
3
+ "version": "1.1.0",
4
4
  "description": "some util for self",
5
5
  "homepage": "https://github.com/void-soul/util-man",
6
6
  "repository": {
@@ -15,8 +15,10 @@
15
15
  "types": "./index.d.ts",
16
16
  "import": "./index.js"
17
17
  },
18
- "./boot.js":"./boot.js",
19
- "./boot-remote.js":"./boot-remote.js"
18
+ "./boot.js": "./boot.js",
19
+ "./boot-remote.js": "./boot-remote.js",
20
+ "./wx/mini.js": "./wx/mini.js",
21
+ "./wx/organ.js": "./wx/organ.js"
20
22
  },
21
23
  "types": "./index.d.ts",
22
24
  "bin": {
@@ -34,6 +36,8 @@
34
36
  },
35
37
  "dependencies": {
36
38
  "@msgpack/msgpack": "3.0.0-beta3",
39
+ "@types/request-promise": "^4.1.51",
40
+ "axios": "1.7.9",
37
41
  "decimal.js": "10.5.0",
38
42
  "html-parse-stringify": "3.0.1",
39
43
  "iterare": "1.2.1",
@@ -42,6 +46,7 @@
42
46
  "pino": "9.6.0",
43
47
  "pino-pretty": "13.0.0",
44
48
  "reflect-metadata": "0.2.2",
49
+ "request-promise": "^4.2.6",
45
50
  "sql-formatter": "15.4.10",
46
51
  "sqlstring": "2.3.3",
47
52
  "tslib": "2.8.1"
package/wx/base.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export declare abstract class BaseWx {
2
+ protected authErrorCodes: number[];
3
+ protected name: string;
4
+ protected tokenUrl: string;
5
+ private tokenData;
6
+ protected mock: boolean;
7
+ protected getToken(force?: boolean): Promise<string>;
8
+ protected fetch(uri: (token: string) => string, method: 'get' | 'post', data: {
9
+ [key: string]: any;
10
+ }, needToken?: boolean, buffer?: boolean): Promise<any>;
11
+ }
package/wx/base.js ADDED
@@ -0,0 +1,78 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
2
+ import * as rp from 'request-promise';
3
+ import { Throw } from '../error.js';
4
+ import pino from 'pino';
5
+ const logger = process.env['NODE_ENV'] !== 'production' ? pino({
6
+ name: 'wx',
7
+ transport: {
8
+ target: 'pino-pretty'
9
+ }
10
+ }) : pino({ name: 'wx' });
11
+ export class BaseWx {
12
+ constructor() {
13
+ this.authErrorCodes = [40001, 40014, 41001, 42001];
14
+ this.name = '';
15
+ this.tokenUrl = '';
16
+ this.tokenData = '';
17
+ this.mock = false;
18
+ }
19
+ async getToken(force) {
20
+ let token = '';
21
+ const now = +new Date();
22
+ let need = force === true;
23
+ if (this.tokenData) {
24
+ const datas = this.tokenData.split('^_^');
25
+ token = datas[0];
26
+ const lastTime = datas[1];
27
+ const spliceTime = datas[2];
28
+ if (now - parseInt(lastTime, 10) - parseInt(spliceTime, 10) > 0) {
29
+ need = true;
30
+ }
31
+ }
32
+ else {
33
+ need = true;
34
+ }
35
+ if (need === true) {
36
+ const data = await this.fetch(() => this.tokenUrl, 'get', {}, false);
37
+ token = data.access_token;
38
+ this.tokenData = `${token}^_^${now}^_^${data.expires_in * 1000}`;
39
+ }
40
+ return token;
41
+ }
42
+ async fetch(uri, method, data, needToken = true, buffer = false) {
43
+ if (this.mock === true) {
44
+ return {};
45
+ }
46
+ let token = needToken ? await this.getToken() : '';
47
+ if (!needToken || token) {
48
+ const start = +new Date();
49
+ let url = uri(token);
50
+ const param = method === 'get' ? {
51
+ method,
52
+ json: buffer ? false : true,
53
+ qs: data,
54
+ encoding: buffer ? null : undefined
55
+ } : {
56
+ json: data,
57
+ method,
58
+ encoding: buffer ? null : undefined
59
+ };
60
+ let response = await rp.default({
61
+ uri: url,
62
+ ...param
63
+ });
64
+ if (this.authErrorCodes.includes(response.errcode)) {
65
+ token = await this.getToken(true);
66
+ url = uri(token);
67
+ response = await rp.default({
68
+ uri: url,
69
+ ...param
70
+ });
71
+ Throw.if(response.errcode && response.errcode - 0 !== 0, `${url}-${response.errcode}-${response.errmsg}`);
72
+ }
73
+ Throw.if(response.errcode && response.errcode - 0 !== 0, `${url}-${response.errcode}-${response.errmsg}`);
74
+ logger.info(`fetch data ${+new Date() - start} ms`);
75
+ return response;
76
+ }
77
+ }
78
+ }
package/wx/mini.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { BaseWx } from './base';
2
+ import { WxMiniConfig, WxLiveInfo, WxLiveReplay } from './types.js';
3
+ export declare class WxMini extends BaseWx {
4
+ protected name: string;
5
+ private config;
6
+ private templNameCache;
7
+ private templKeyCache;
8
+ constructor(config: WxMiniConfig);
9
+ getUnlimited({ scene, model, page, fullpath, png, width, lineColor }: {
10
+ scene: string;
11
+ model?: string;
12
+ page?: string;
13
+ fullpath?: string;
14
+ png?: '0' | '1' | 0 | 1 | true | false | 'true' | 'false';
15
+ width?: number;
16
+ lineColor?: {
17
+ r: number;
18
+ g: number;
19
+ b: number;
20
+ };
21
+ }): Promise<any>;
22
+ sendMs({ openids, name, data, scene }: {
23
+ openids: string[];
24
+ name: string;
25
+ data: {
26
+ [key: string]: string | number;
27
+ };
28
+ scene: string;
29
+ }): Promise<void>;
30
+ code2session(code: string): Promise<{
31
+ openid: string;
32
+ session_key: string;
33
+ unionid?: string;
34
+ }>;
35
+ getTemplIds(): {
36
+ [key: string]: string[];
37
+ };
38
+ decrypt<T>({ sessionKey, encryptedData, iv }: {
39
+ iv: string;
40
+ sessionKey: string;
41
+ encryptedData: string;
42
+ }): T | undefined;
43
+ getLiveInfo(start: number, limit: number): Promise<WxLiveInfo[]>;
44
+ getLiveReplay(room_id: number, start: number, limit: number): Promise<WxLiveReplay[]>;
45
+ }
package/wx/mini.js ADDED
@@ -0,0 +1,102 @@
1
+ import { BaseWx } from './base';
2
+ import crypto from 'crypto';
3
+ import { Throw } from '../error.js';
4
+ export class WxMini extends BaseWx {
5
+ constructor(config) {
6
+ super();
7
+ this.name = 'wxMini';
8
+ this.config = config;
9
+ this.tokenUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${this.config.appId}&secret=${this.config.appSecret}`;
10
+ this.templNameCache = {};
11
+ this.templKeyCache = {};
12
+ if (this.config.messages) {
13
+ for (const item of this.config.messages) {
14
+ if (!this.templNameCache[item.name]) {
15
+ this.templNameCache[item.name] = [];
16
+ }
17
+ this.templNameCache[item.name].push({
18
+ tmplId: item.tmplId,
19
+ page: `pages/${item.model}/${item.page}/${item.page}`
20
+ });
21
+ for (const key of item.keys) {
22
+ if (!this.templKeyCache[key]) {
23
+ this.templKeyCache[key] = [];
24
+ }
25
+ this.templKeyCache[key].push(item.tmplId);
26
+ }
27
+ }
28
+ }
29
+ }
30
+ async getUnlimited({ scene, model, page, fullpath, png, width, lineColor }) {
31
+ Throw.if(!fullpath && (!model || !page), '路径不完整,fullpath或者model+page必须传一个');
32
+ const pageto = fullpath ?? `pages/${model}/${page}/${page}`;
33
+ return await this.fetch((token) => `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${token}`, 'post', {
34
+ scene,
35
+ page: pageto,
36
+ line_color: lineColor ?? this.config.qrcode?.lineColor,
37
+ is_hyaline: png === 'true' || png === '1' || png === true || png === 1,
38
+ width: width ?? this.config.qrcode?.width ?? 500
39
+ }, true, true);
40
+ }
41
+ async sendMs({ openids, name, data, scene }) {
42
+ const temps = this.templNameCache[name];
43
+ const dataSend = {};
44
+ for (const [key, value] of Object.entries(data)) {
45
+ dataSend[key] = { value: value ?? '' };
46
+ }
47
+ if (scene) {
48
+ scene = `?${scene}`;
49
+ }
50
+ else {
51
+ scene = '';
52
+ }
53
+ for (const temp of temps) {
54
+ for (const touser of openids) {
55
+ await this.fetch((token) => `https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${token}`, 'post', {
56
+ touser,
57
+ data: dataSend,
58
+ template_id: temp.tmplId,
59
+ page: `${temp.page}${scene}`
60
+ });
61
+ }
62
+ }
63
+ }
64
+ async code2session(code) {
65
+ const data = await this.fetch(() => `https://api.weixin.qq.com/sns/jscode2session?appid=${this.config.appId}&secret=${this.config.appSecret}&js_code=${code}&grant_type=authorization_code`, 'get', {}, false);
66
+ return {
67
+ openid: data.openid,
68
+ session_key: data.session_key,
69
+ unionid: data.unionid
70
+ };
71
+ }
72
+ getTemplIds() {
73
+ return this.templKeyCache;
74
+ }
75
+ decrypt({ sessionKey, encryptedData, iv }) {
76
+ Throw.if(!sessionKey, '会话过期,请重新登陆!');
77
+ const sessionKeyBuf = Buffer.from(sessionKey, 'base64');
78
+ const encryptedDataBuf = Buffer.from(encryptedData, 'base64');
79
+ const ivBuf = Buffer.from(iv, 'base64');
80
+ try {
81
+ // 解密
82
+ const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKeyBuf, ivBuf);
83
+ // 设置自动 padding 为 true,删除填充补位
84
+ decipher.setAutoPadding(true);
85
+ const decoded = decipher.update(encryptedDataBuf, undefined, 'utf8') + decipher.final('utf8');
86
+ const decodedData = JSON.parse(decoded);
87
+ Throw.if(decodedData.watermark.appid !== this.config.appId, '加密验证失败');
88
+ return decodedData;
89
+ }
90
+ catch (err) {
91
+ throw new Error('加密验证失败');
92
+ }
93
+ }
94
+ async getLiveInfo(start, limit) {
95
+ const data = await this.fetch((token) => `https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=${token}`, 'post', { start, limit });
96
+ return data.room_info;
97
+ }
98
+ async getLiveReplay(room_id, start, limit) {
99
+ const data = await this.fetch((token) => `https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=${token}`, 'post', { room_id, start, limit, action: 'get_replay' });
100
+ return data.live_replay;
101
+ }
102
+ }
package/wx/organ.d.ts ADDED
@@ -0,0 +1,65 @@
1
+ import { BaseWx } from './base';
2
+ import { WxOrganConfig, WxDepartment, WxOrganUser, WxOrganUserSimply, WxOrganText, WxOrganImage, WxOrganVoice, WxOrganVideo, WxOrganFile, WxOrganTextCard, WxOrganNews, WxOrganMpNews, WxOrganMarkDown, WxOrganTaskCard, WxOrganMini } from './types.js';
3
+ export declare class WxOrgan extends BaseWx {
4
+ protected name: string;
5
+ private config;
6
+ private miniMessCache;
7
+ private messCache;
8
+ constructor(config: WxOrganConfig);
9
+ createDepartment(param: WxDepartment): Promise<number>;
10
+ updateDepartment(param: WxDepartment): Promise<void>;
11
+ deleteDepartment(id: number): Promise<void>;
12
+ getDepartmentList(id?: number): Promise<WxDepartment[]>;
13
+ createUser(param: WxOrganUser): Promise<string | number>;
14
+ getUser(userid: number | string): Promise<WxOrganUser>;
15
+ updateUser(param: WxOrganUser): Promise<void>;
16
+ deleteUser(userid: number | string): Promise<void>;
17
+ batchDeleteUser(useridlist: Array<number | string>): Promise<void>;
18
+ getDeptUserSimply(department_id: number, fetch_child: boolean): Promise<WxOrganUserSimply[]>;
19
+ getDeptUser(department_id: number, fetch_child: boolean): Promise<WxOrganUser[]>;
20
+ userid2openid(userid: number | string): Promise<string>;
21
+ openid2userid(openid: string): Promise<number | string>;
22
+ authsucc(userid: string): Promise<void>;
23
+ inviteUsers({ user, party, tag }: {
24
+ user?: Array<number | string>;
25
+ party?: number[];
26
+ tag?: number[];
27
+ }): Promise<{
28
+ invaliduser?: Array<number | string>;
29
+ invalidparty?: number[];
30
+ invalidtag?: number[];
31
+ }>;
32
+ createTag(tagname: string, tagid: number): Promise<number>;
33
+ updateTag(tagname: string, tagid: number): Promise<void>;
34
+ deleteTag(tagid: number): Promise<void>;
35
+ createTagUser(tagid: number, userlist: Array<string | number>): Promise<void>;
36
+ deleteTagUser(tagid: number, userlist: Array<string | number>): Promise<void>;
37
+ getTagUser(tagid: number): Promise<{
38
+ tagname: string;
39
+ userlist: Array<{
40
+ userid: string | number;
41
+ name: string;
42
+ }>;
43
+ partylist: number[];
44
+ }>;
45
+ getTag(): Promise<Array<{
46
+ tagid: number;
47
+ tagname: string;
48
+ }>>;
49
+ updateTaskCard(userids: Array<string | number>, task_id: string, clicked_key: string): Promise<void>;
50
+ sendMiniMs({ touser, toparty, totag, name, scene, ms }: {
51
+ touser?: Array<number | string>;
52
+ toparty?: number[];
53
+ totag?: number[];
54
+ name: string;
55
+ scene?: string;
56
+ ms: WxOrganMini;
57
+ }): Promise<void>;
58
+ sendMs({ touser, toparty, totag, name, ms }: {
59
+ touser?: Array<number | string>;
60
+ toparty?: number[];
61
+ totag?: number[];
62
+ name: string;
63
+ ms: WxOrganText | WxOrganImage | WxOrganVoice | WxOrganVideo | WxOrganFile | WxOrganTextCard | WxOrganNews | WxOrganMpNews | WxOrganMarkDown | WxOrganTaskCard;
64
+ }): Promise<void>;
65
+ }
package/wx/organ.js ADDED
@@ -0,0 +1,171 @@
1
+ import { BaseWx } from './base';
2
+ export class WxOrgan extends BaseWx {
3
+ // private aesKey: Buffer | undefined;
4
+ // private iv: Buffer | undefined;
5
+ constructor(config) {
6
+ super();
7
+ this.name = 'wxOrgan';
8
+ this.config = config;
9
+ this.tokenUrl = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${this.config.corpid}&corpsecret=${this.config.corpsecret}`;
10
+ this.miniMessCache = {};
11
+ this.messCache = {};
12
+ // if (this.config.msHook) {
13
+ // this.aesKey = Buffer.from(this.config.encodingAESKey + '=', 'base64');
14
+ // this.iv = this.aesKey.slice(0, 16);
15
+ // }
16
+ if (this.config.miniMessages) {
17
+ for (const item of this.config.miniMessages) {
18
+ if (!this.miniMessCache[item.name]) {
19
+ this.miniMessCache[item.name] = [];
20
+ }
21
+ this.miniMessCache[item.name].push({
22
+ appid: this.config.appid,
23
+ page: `pages/${item.model}/${item.page}/${item.page}`
24
+ });
25
+ }
26
+ }
27
+ if (this.config.messages) {
28
+ for (const item of this.config.messages) {
29
+ if (!this.messCache[item.name]) {
30
+ this.messCache[item.name] = [];
31
+ }
32
+ this.messCache[item.name].push({
33
+ agentid: this.config.agentid,
34
+ ...item
35
+ });
36
+ }
37
+ }
38
+ this.mock = this.config.mock === true;
39
+ }
40
+ async createDepartment(param) {
41
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=${token}`, 'post', param);
42
+ return data.id;
43
+ }
44
+ async updateDepartment(param) {
45
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token=${token}`, 'post', param);
46
+ }
47
+ async deleteDepartment(id) {
48
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token=${token}`, 'get', { id });
49
+ }
50
+ async getDepartmentList(id) {
51
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=${token}`, 'get', { id });
52
+ return data.department;
53
+ }
54
+ async createUser(param) {
55
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=${token}`, 'post', param);
56
+ return data.id;
57
+ }
58
+ async getUser(userid) {
59
+ return await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=${token}`, 'get', { userid });
60
+ }
61
+ async updateUser(param) {
62
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=${token}`, 'post', param);
63
+ }
64
+ async deleteUser(userid) {
65
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token=${token}`, 'get', { userid });
66
+ }
67
+ async batchDeleteUser(useridlist) {
68
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/batchdelete?access_token=${token}`, 'post', { useridlist });
69
+ }
70
+ async getDeptUserSimply(department_id, fetch_child) {
71
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=${token}`, 'get', { department_id, fetch_child: fetch_child ? 'FETCH_CHILD' : undefined });
72
+ return data.userlist;
73
+ }
74
+ async getDeptUser(department_id, fetch_child) {
75
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=${token}`, 'get', { department_id, fetch_child: fetch_child ? 'FETCH_CHILD' : undefined });
76
+ return data.userlist;
77
+ }
78
+ async userid2openid(userid) {
79
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=${token}`, 'post', { userid });
80
+ return data.openid;
81
+ }
82
+ async openid2userid(openid) {
83
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_userid?access_token=${token}`, 'post', { openid });
84
+ return data.userid;
85
+ }
86
+ async authsucc(userid) {
87
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token=${token}`, 'get', { userid });
88
+ }
89
+ async inviteUsers({ user, party, tag }) {
90
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/batch/invite?access_token=${token}`, 'post', { user, party, tag });
91
+ return {
92
+ invaliduser: data.invaliduser,
93
+ invalidparty: data.invalidparty,
94
+ invalidtag: data.invalidtag
95
+ };
96
+ }
97
+ async createTag(tagname, tagid) {
98
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/create?access_token=${token}`, 'post', { tagname, tagid });
99
+ return data.id;
100
+ }
101
+ async updateTag(tagname, tagid) {
102
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/update?access_token=${token}`, 'post', { tagname, tagid });
103
+ }
104
+ async deleteTag(tagid) {
105
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/delete?access_token=${token}`, 'get', { tagid });
106
+ }
107
+ async createTagUser(tagid, userlist) {
108
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/addtagusers?access_token=${token}`, 'post', { tagid, userlist });
109
+ }
110
+ async deleteTagUser(tagid, userlist) {
111
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/deltagusers?access_token=${token}`, 'post', { tagid, userlist });
112
+ }
113
+ async getTagUser(tagid) {
114
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/get?access_token=${token}`, 'get', { tagid });
115
+ return data;
116
+ }
117
+ async getTag() {
118
+ const data = await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/tag/list?access_token=${token}`, 'get', {});
119
+ return data.taglist;
120
+ }
121
+ async updateTaskCard(userids, task_id, clicked_key) {
122
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/message/update_taskcard?access_token=${token}`, 'post', { userids, task_id, clicked_key });
123
+ }
124
+ async sendMiniMs({ touser, toparty, totag, name, scene, ms }) {
125
+ const touser_ = touser ? touser.join('|') : undefined;
126
+ const toparty_ = toparty ? toparty.join('|') : undefined;
127
+ const totag_ = totag ? totag.join('|') : undefined;
128
+ if (scene) {
129
+ scene = `?${scene}`;
130
+ }
131
+ else {
132
+ scene = '';
133
+ }
134
+ if (ms.content_item) {
135
+ for (const [key, value] of Object.entries(ms.content_item)) {
136
+ ms.content_item[key] = value ?? '';
137
+ }
138
+ }
139
+ const temps = this.miniMessCache[name];
140
+ for (const item of temps) {
141
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}`, 'post', {
142
+ touser: touser_,
143
+ toparty: toparty_,
144
+ totag: totag_,
145
+ 'msgtype': 'miniprogram_notice',
146
+ miniprogram_notice: {
147
+ ...item,
148
+ page: `${item.page}${scene}`,
149
+ ...ms
150
+ },
151
+ enable_id_trans: 0
152
+ });
153
+ }
154
+ }
155
+ async sendMs({ touser, toparty, totag, name, ms }) {
156
+ const touser_ = touser ? touser.join('|') : undefined;
157
+ const toparty_ = toparty ? toparty.join('|') : undefined;
158
+ const totag_ = totag ? totag.join('|') : undefined;
159
+ const temps = this.messCache[name];
160
+ for (const item of temps) {
161
+ await this.fetch((token) => `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${token}`, 'post', {
162
+ touser: touser_,
163
+ toparty: toparty_,
164
+ totag: totag_,
165
+ ...item,
166
+ [item.msgtype]: ms,
167
+ enable_id_trans: 0
168
+ });
169
+ }
170
+ }
171
+ }
package/wx/types.d.ts ADDED
@@ -0,0 +1,844 @@
1
+ /**
2
+ * 企业微信员工
3
+ */
4
+ export interface WxOrganUser {
5
+ userid: number;
6
+ name: string;
7
+ alias?: string;
8
+ mobile: string;
9
+ department: number[];
10
+ order?: number[];
11
+ is_leader_in_dept?: Array<0 | 1>;
12
+ position?: string;
13
+ gender?: 1 | 0;
14
+ email?: string;
15
+ telephone?: string;
16
+ avatar_mediaid?: string;
17
+ enable?: 1 | 0;
18
+ extattr?: {
19
+ [key: string]: string | number;
20
+ };
21
+ to_invite?: boolean;
22
+ external_profile?: {
23
+ [key: string]: string | number;
24
+ };
25
+ external_position?: string;
26
+ address?: string;
27
+ }
28
+ export interface WxOrganUserRead extends WxOrganUser {
29
+ status?: 1 | 2 | 4;
30
+ avatar?: string;
31
+ thumb_avatar?: string;
32
+ qr_code?: string;
33
+ }
34
+ export interface WxOrganUserSimply {
35
+ userid: number;
36
+ name: string;
37
+ department: number[];
38
+ }
39
+ /**
40
+ *
41
+ * 企业微信部门
42
+ * @interface WxDepartment
43
+ */
44
+ export interface WxDepartment {
45
+ name: string;
46
+ parentid: number;
47
+ order?: number;
48
+ id: number;
49
+ }
50
+ export interface WxLiveReplay {
51
+ expire_time: string;
52
+ create_time: string;
53
+ media_url: string;
54
+ }
55
+ export interface WxOrgan {
56
+ /**
57
+ *
58
+ * https://work.weixin.qq.com/api/doc#90000/90135/90205
59
+ * @param {WxDepartment} param
60
+ * @returns {Promise<number>}
61
+ * @memberof WxOrgan
62
+ */
63
+ createDepartment(param: WxDepartment): Promise<number>;
64
+ /**
65
+ * https://work.weixin.qq.com/api/doc#90000/90135/90206
66
+ * @param {WxDepartment} param
67
+ * @returns {Promise<void>}
68
+ * @memberof WxOrgan
69
+ */
70
+ updateDepartment(param: WxDepartment): Promise<void>;
71
+ /**
72
+ * https://work.weixin.qq.com/api/doc#90000/90135/90207
73
+ * @param {number} id
74
+ * @returns {Promise<void>}
75
+ * @memberof WxOrgan
76
+ */
77
+ deleteDepartment(id: number): Promise<void>;
78
+ /**
79
+ * https://work.weixin.qq.com/api/doc#90000/90135/90208
80
+ * @param {number} [id]
81
+ * @returns {Promise<WxDepartment[]>}
82
+ * @memberof WxOrgan
83
+ */
84
+ getDepartmentList(id?: number): Promise<WxDepartment[]>;
85
+ /**
86
+ *
87
+ * https://work.weixin.qq.com/api/doc#90000/90135/90195
88
+ * @param {WxOrganUser} param
89
+ * @returns {Promise<number>}
90
+ * @memberof WxOrgan
91
+ */
92
+ createUser(param: WxOrganUser): Promise<number | string>;
93
+ /**
94
+ *
95
+ * https://work.weixin.qq.com/api/doc#90000/90135/90197
96
+ * @param {WxOrganUser} param
97
+ * @returns {Promise<void>}
98
+ * @memberof WxOrgan
99
+ */
100
+ updateUser(param: WxOrganUser): Promise<void>;
101
+ /**
102
+ *
103
+ * https://work.weixin.qq.com/api/doc#90000/90135/90198
104
+ * @param {(number | string)} userid
105
+ * @returns {Promise<void>}
106
+ * @memberof WxOrgan
107
+ */
108
+ deleteUser(userid: number | string): Promise<void>;
109
+ /**
110
+ * https://work.weixin.qq.com/api/doc#90000/90135/90199
111
+ * @param {(Array<number | string>)} useridlist
112
+ * @returns {Promise<void>}
113
+ * @memberof WxOrgan
114
+ */
115
+ batchDeleteUser(useridlist: Array<number | string>): Promise<void>;
116
+ /**
117
+ * https://work.weixin.qq.com/api/doc#90000/90135/90196
118
+ * @param {(number | string)} userid
119
+ * @returns {Promise<WxOrganUser>}
120
+ * @memberof WxOrgan
121
+ */
122
+ getUser(userid: number | string): Promise<WxOrganUserRead>;
123
+ /**
124
+ *
125
+ * https://work.weixin.qq.com/api/doc#90000/90135/90200
126
+ * @param {number} department_id
127
+ * @param {boolean} fetch_child
128
+ * @returns {Promise<WxOrganUserSimply[]>}
129
+ * @memberof WxOrgan
130
+ */
131
+ getDeptUserSimply(department_id: number, fetch_child: boolean): Promise<WxOrganUserSimply[]>;
132
+ /**
133
+ *
134
+ * https://work.weixin.qq.com/api/doc#90000/90135/90201
135
+ * @param {number} department_id
136
+ * @param {boolean} fetch_child
137
+ * @returns {Promise<WxOrganUser[]>}
138
+ * @memberof WxOrgan
139
+ */
140
+ getDeptUser(department_id: number, fetch_child: boolean): Promise<WxOrganUserRead[]>;
141
+ /**
142
+ *
143
+ * https://work.weixin.qq.com/api/doc#90000/90135/90975
144
+ * @param {({user?: Array<number | string>, party?: number[], tag?: number[]})} {user, party, tag}
145
+ * @returns {(Promise<{invaliduser?: Array<number | string>, invalidparty?: number[], invalidtag?: number[]}>)}
146
+ * @memberof WxOrgan
147
+ */
148
+ inviteUsers({ user, party, tag }: {
149
+ user?: Array<number | string>;
150
+ party?: number[];
151
+ tag?: number[];
152
+ }): Promise<{
153
+ invaliduser?: Array<number | string>;
154
+ invalidparty?: number[];
155
+ invalidtag?: number[];
156
+ }>;
157
+ /**
158
+ *
159
+ * https://work.weixin.qq.com/api/doc#90000/90135/90202
160
+ * @param {(number | string)} userid
161
+ * @returns {Promise<string>}
162
+ * @memberof WxOrgan
163
+ */
164
+ userid2openid(userid: number | string): Promise<string>;
165
+ /**
166
+ *
167
+ * https://work.weixin.qq.com/api/doc#90000/90135/90202
168
+ * @param {string} openid
169
+ * @returns {(Promise<number | string>)}
170
+ * @memberof WxOrgan
171
+ */
172
+ openid2userid(openid: string): Promise<number | string>;
173
+ /**
174
+ *
175
+ * https://work.weixin.qq.com/api/doc#90000/90135/90203
176
+ * @param {string} userid
177
+ * @returns {Promise<void>}
178
+ * @memberof WxOrgan
179
+ */
180
+ authsucc(userid: string): Promise<void>;
181
+ /**
182
+ *
183
+ * https://work.weixin.qq.com/api/doc#90000/90135/90205
184
+ * @param {string} tagname
185
+ * @param {number} tagid
186
+ * @returns {Promise<number>}
187
+ * @memberof WxOrgan
188
+ */
189
+ createTag(tagname: string, tagid: number): Promise<number>;
190
+ /**
191
+ * https://work.weixin.qq.com/api/doc#90000/90135/90211
192
+ *
193
+ * @param {string} tagname
194
+ * @param {number} tagid
195
+ * @returns {Promise<void>}
196
+ * @memberof WxOrgan
197
+ */
198
+ updateTag(tagname: string, tagid: number): Promise<void>;
199
+ /**
200
+ * https://work.weixin.qq.com/api/doc#90000/90135/90212
201
+ *
202
+ * @param {number} tagid
203
+ * @returns {Promise<void>}
204
+ * @memberof WxOrgan
205
+ */
206
+ deleteTag(tagid: number): Promise<void>;
207
+ /**
208
+ *
209
+ * https://work.weixin.qq.com/api/doc#90000/90135/90214
210
+ * @param {number} tagid
211
+ * @param {(Array<string | number>)} userlist
212
+ * @returns {Promise<void>}
213
+ * @memberof WxOrgan
214
+ */
215
+ createTagUser(tagid: number, userlist: Array<string | number>): Promise<void>;
216
+ /**
217
+ * https://work.weixin.qq.com/api/doc#90000/90135/90215
218
+ *
219
+ * @param {number} tagid
220
+ * @param {(Array<string | number>)} userlist
221
+ * @returns {Promise<void>}
222
+ * @memberof WxOrgan
223
+ */
224
+ deleteTagUser(tagid: number, userlist: Array<string | number>): Promise<void>;
225
+ /**
226
+ *https://work.weixin.qq.com/api/doc#90000/90135/90213
227
+ *
228
+ * @param {number} tagid
229
+ * @returns {(Promise<{tagname: string; userlist: Array<{userid: string | number; name: string}>; partylist: number[]}>)}
230
+ * @memberof WxOrgan
231
+ */
232
+ getTagUser(tagid: number): Promise<{
233
+ tagname: string;
234
+ userlist: Array<{
235
+ userid: string | number;
236
+ name: string;
237
+ }>;
238
+ partylist: number[];
239
+ }>;
240
+ /**
241
+ * https://work.weixin.qq.com/api/doc#90000/90135/90216
242
+ *
243
+ * @returns {Promise<Array<{tagid: number; tagname: string}>>}
244
+ * @memberof WxOrgan
245
+ */
246
+ getTag(): Promise<Array<{
247
+ tagid: number;
248
+ tagname: string;
249
+ }>>;
250
+ /**
251
+ *
252
+ * https://work.weixin.qq.com/api/doc#90000/90135/91579
253
+ * @param {(Array<string | number>)} userids
254
+ * @param {string} task_id
255
+ * @param {string} clicked_key
256
+ * @returns {Promise<void>}
257
+ * @memberof WxOrgan
258
+ */
259
+ updateTaskCard(userids: Array<string | number>, task_id: string, clicked_key: string): Promise<void>;
260
+ /**
261
+ *
262
+ * https://work.weixin.qq.com/api/doc#90000/90135/90236/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E9%80%9A%E7%9F%A5%E6%B6%88%E6%81%AF
263
+ * @returns {Promise<void>}
264
+ * @memberof WxOrgan
265
+ */
266
+ sendMiniMs(param: {
267
+ touser?: Array<number | string>;
268
+ toparty?: number[];
269
+ totag?: number[];
270
+ name: string;
271
+ scene?: string;
272
+ ms: WxOrganMini;
273
+ }): Promise<void>;
274
+ /**
275
+ *
276
+ * https://work.weixin.qq.com/api/doc#90000/90135/90236
277
+ * @returns {Promise<void>}
278
+ * @memberof WxOrgan
279
+ */
280
+ sendMs(param: {
281
+ touser?: Array<number | string>;
282
+ toparty?: number[];
283
+ totag?: number[];
284
+ name: string;
285
+ ms: WxOrganText | WxOrganImage | WxOrganVoice | WxOrganVideo | WxOrganFile | WxOrganTextCard | WxOrganNews | WxOrganMpNews | WxOrganMarkDown | WxOrganTaskCard;
286
+ }): Promise<void>;
287
+ }
288
+ export interface WxConfig {
289
+ corpid: string;
290
+ appSecret: string;
291
+ }
292
+ export type WxPayType = 'JSAPI' | 'NATIVE' | 'APP' | 'MWEB';
293
+ export interface WxPayOption {
294
+ /** 小程序id、公众号id、企业微信id */
295
+ appid: string;
296
+ /** 商户号 */
297
+ mch_id: string;
298
+ /** 商户平台密钥 */
299
+ appSecret: string;
300
+ /** 证书名称(文件名+后缀),需要放在 app/cert 目录中 */
301
+ cert: string;
302
+ /** 支付方式:微信内网页环境使用JSAPI,微信外网页环境使用MWEB;用户扫码使用NATIVE */
303
+ trade_type: WxPayType;
304
+ }
305
+ export interface WxCreatedorder {
306
+ device_info?: string;
307
+ body: string;
308
+ detail?: string;
309
+ out_trade_no: string;
310
+ total_fee: number;
311
+ spbill_create_ip: string;
312
+ time_start?: string;
313
+ time_expire?: string;
314
+ goods_tag?: string;
315
+ product_id?: string;
316
+ limit_pay?: string;
317
+ openid: string;
318
+ receipt?: string;
319
+ scene_info?: {
320
+ store_info: {
321
+ id: string;
322
+ name: string;
323
+ area_code: string;
324
+ address: string;
325
+ };
326
+ };
327
+ }
328
+ export interface WxPayToUserResponse {
329
+ payment_no: string;
330
+ partner_trade_no: string;
331
+ payment_time: string;
332
+ }
333
+ export interface WxPayToUser {
334
+ partner_trade_no: string;
335
+ openid: string;
336
+ check_name: 'NO_CHECK' | 'FORCE_CHECK';
337
+ re_user_name?: string;
338
+ amount: number;
339
+ desc?: string;
340
+ spbill_create_ip?: string;
341
+ }
342
+ export interface WxCreateOrderJSAPI {
343
+ appId: string;
344
+ timeStamp: string;
345
+ nonceStr: string;
346
+ package: string;
347
+ signType: string;
348
+ paySign: string;
349
+ }
350
+ export interface WxCreateOrderAPP {
351
+ appid: string;
352
+ partnerid: string;
353
+ prepayid: string;
354
+ package: string;
355
+ noncestr: string;
356
+ timestamp: string;
357
+ sign: string;
358
+ }
359
+ /** 微信支付预创建订单返回结果 */
360
+ export interface WxCreateOrderResult {
361
+ /** jsapi支付方式 */
362
+ jsapi?: WxCreateOrderJSAPI;
363
+ /** app支付方式 */
364
+ app?: WxCreateOrderAPP;
365
+ prepay_id: string;
366
+ code_url?: string;
367
+ mweb_url?: string;
368
+ dataCacheId?: string;
369
+ devCacheId?: string;
370
+ } /** 微信退款返回结果 */
371
+ export interface WxRefResult {
372
+ dataCacheId?: string;
373
+ devCacheId?: string;
374
+ }
375
+ export interface WxOrderQuery {
376
+ transaction_id?: string;
377
+ out_trade_no?: string;
378
+ }
379
+ export interface WxOrder {
380
+ device_info?: string;
381
+ openid: string;
382
+ is_subscribe: 'Y' | 'N';
383
+ trade_type: WxPayType;
384
+ trade_state: 'SUCCESS' | 'REFUND' | 'NOTPAY' | 'CLOSED' | 'REVOKED' | 'USERPAYING' | 'PAYERROR';
385
+ bank_type: string;
386
+ total_fee: number;
387
+ settlement_total_fee?: number;
388
+ fee_type?: string;
389
+ cash_fee: number;
390
+ cash_fee_type?: string;
391
+ coupon_fee?: number;
392
+ coupon_count?: number;
393
+ transaction_id: string;
394
+ out_trade_no: string;
395
+ attach?: string;
396
+ time_end: string;
397
+ trade_state_desc: string;
398
+ children?: Array<{
399
+ coupon_type: string;
400
+ coupon_id: string;
401
+ coupon_fee: number;
402
+ }>;
403
+ }
404
+ export interface WxCreateRefundOrder {
405
+ transaction_id?: string;
406
+ out_trade_no?: string;
407
+ out_refund_no: string;
408
+ total_fee: number;
409
+ refund_fee: number;
410
+ refund_desc: string;
411
+ refund_account?: 'REFUND_SOURCE_UNSETTLED_FUNDS' | 'REFUND_SOURCE_RECHARGE_FUNDS';
412
+ }
413
+ export interface WxRefundOrderQuery {
414
+ transaction_id?: string;
415
+ out_trade_no?: string;
416
+ out_refund_no?: string;
417
+ refund_id?: string;
418
+ offset?: number;
419
+ }
420
+ export interface WxRefundOrder {
421
+ total_refund_count?: number;
422
+ transaction_id: string;
423
+ out_trade_no: string;
424
+ total_fee: number;
425
+ settlement_total_fee?: number;
426
+ fee_type?: string;
427
+ cash_fee: number;
428
+ refund_count: number;
429
+ children?: Array<{
430
+ out_refund_no: string;
431
+ refund_id: string;
432
+ refund_channel?: 'ORIGINAL' | 'BALANCE' | 'OTHER_BALANCE' | 'OTHER_BANKCARD';
433
+ refund_fee: number;
434
+ settlement_refund_fee?: number;
435
+ coupon_refund_fee?: number;
436
+ coupon_refund_count?: number;
437
+ refund_status: 'SUCCESS' | 'REFUNDCLOSE' | 'PROCESSING' | 'CHANGE';
438
+ refund_account?: 'REFUND_SOURCE_RECHARGE_FUNDS' | 'REFUND_SOURCE_UNSETTLED_FUNDS';
439
+ refund_recv_accout: string;
440
+ refund_success_time?: string;
441
+ children?: Array<{
442
+ coupon_type: string;
443
+ coupon_refund_id: string;
444
+ coupon_refund_fee: number;
445
+ }>;
446
+ }>;
447
+ }
448
+ export interface WxPayHook {
449
+ device_info?: string;
450
+ openid: string;
451
+ is_subscribe: 'Y' | 'N';
452
+ bank_type: string;
453
+ total_fee: number;
454
+ settlement_total_fee?: number;
455
+ fee_type?: string;
456
+ cash_fee: number;
457
+ cash_fee_type?: string;
458
+ coupon_fee?: string;
459
+ coupon_count?: number;
460
+ children?: Array<{
461
+ coupon_type: string;
462
+ coupon_id: string;
463
+ coupon_fee: number;
464
+ }>;
465
+ transaction_id: string;
466
+ out_trade_no: string;
467
+ attach?: string;
468
+ time_end: string;
469
+ }
470
+ export interface WxRefHook {
471
+ transaction_id: string;
472
+ out_trade_no: string;
473
+ refund_id: string;
474
+ out_refund_no: string;
475
+ total_fee: number;
476
+ settlement_total_fee?: number;
477
+ refund_fee: number;
478
+ settlement_refund_fee: string;
479
+ refund_status: 'SUCCESS' | 'CHANGE' | 'REFUNDCLOSE';
480
+ success_time?: string;
481
+ refund_recv_accout: string;
482
+ refund_account: 'REFUND_SOURCE_RECHARGE_FUNDS' | 'REFUND_SOURCE_UNSETTLED_FUNDS';
483
+ refund_request_source: 'API' | 'VENDOR_PLATFORM';
484
+ }
485
+ export interface WxPay {
486
+ /**
487
+ * 企业付款到零钱
488
+ * https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
489
+ *
490
+ * option中的amount单位是元
491
+ * 处理失败时返回异常
492
+ * @memberof WxPay
493
+ */
494
+ transfers(option: WxPayToUser): Promise<WxPayToUserResponse>;
495
+ /**
496
+ * 统一下单接口参数定义
497
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
498
+ * 其中未定义到此处的参数,说明框架会给出默认值
499
+ *
500
+ * 会将dataCache存放到redis中
501
+ * 在支付回调中将dataCache取出传回业务方法
502
+ *
503
+ * 每一个支付应用都有自己的:支付成功、支付失败、退款成功、退款失败回调
504
+ * 所以如果有不同的业务,最好将这些业务都分层不同的支付应用
505
+ * 每个应用实现独立的同步消息通知(sub-async)
506
+ *
507
+ * devid 是当前支付发起的用户token
508
+ * 在支付回调时,由于请求是由微信服务器发起的,因此上下文中不存在 用户对象
509
+ * 通过这个参数可以将 当前支付发起时用户 追加到回调的上下文中
510
+ * @memberof WxPay
511
+ */
512
+ unifiedorder(wxOrderOption: WxCreatedorder, dataCache?: {
513
+ [key: string]: any;
514
+ }, devid?: string): Promise<WxCreateOrderResult>;
515
+ /**
516
+ *
517
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2
518
+ * @param {WxOrderQuery} option
519
+ * @returns {Promise<WxOrder>}
520
+ * @memberof WxPay
521
+ */
522
+ orderquery(option: WxOrderQuery): Promise<WxOrder>;
523
+ /**
524
+ *
525
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3
526
+ * @param {string} out_trade_no
527
+ * @returns {Promise<void>}
528
+ * @memberof WxPay
529
+ */
530
+ closeorder(out_trade_no: string): Promise<void>;
531
+ /**
532
+ * 取消订单
533
+ * 用于用户取消支付导致的取消订单场景
534
+ * 此方法会清除调起支付时缓存的dataCache
535
+ * 同时会向微信提交关闭订单的申请
536
+ * @param {string} out_trade_no
537
+ * @returns {Promise<void>}
538
+ * @memberof WxPay
539
+ */
540
+ cancelorder(out_trade_no: string): Promise<void>;
541
+ /**
542
+ *
543
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
544
+ *
545
+ * 会将dataCache存放到redis中
546
+ * 在回调中将dataCache取出传回业务方法
547
+ *
548
+ * devid 是当前退款发起的用户token
549
+ * 在退款回调时,由于请求是由微信服务器发起的,因此上下文中不存在 用户对象
550
+ * 通过这个参数可以将 当前退款发起时用户 追加到回调的上下文中
551
+ *
552
+ * @param {WxCreateRefundOrder} option
553
+ * @returns {Promise<void>}
554
+ * @memberof WxPay
555
+ */
556
+ refund(option: WxCreateRefundOrder, dataCache?: {
557
+ [key: string]: any;
558
+ }, devid?: string): Promise<WxRefResult>;
559
+ /**
560
+ *
561
+ * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
562
+ * @param {WxRefundOrderQuery} option
563
+ * @returns {Promise<void>}
564
+ * @memberof WxPay
565
+ */
566
+ refundquery(option: WxRefundOrderQuery): Promise<WxRefundOrder>;
567
+ /**
568
+ * 修改支付、退款时缓存的业务对象
569
+ * @param dataCache
570
+ * @param dataCacheId
571
+ */
572
+ resetDataCache(dataCache: {
573
+ [key: string]: any;
574
+ }, dataCacheId: string): Promise<void>;
575
+ /**
576
+ * 修改支付、退款时缓存的会话id
577
+ * @param devid
578
+ * @param devCacheId
579
+ */
580
+ resetDevIdCache(devid: string, devCacheId: string): Promise<void>;
581
+ }
582
+ export interface WxMiniConfig {
583
+ appId: string;
584
+ appSecret: string;
585
+ /** 小程序二维码设置 */
586
+ qrcode?: {
587
+ /** 线条颜色 */
588
+ lineColor?: {
589
+ r: number;
590
+ g: number;
591
+ b: number;
592
+ };
593
+ /** 宽度 */
594
+ width?: number;
595
+ };
596
+ /**
597
+ *
598
+ * 微信订阅消息场景
599
+ * 当传递此参数后,会自动创建路由
600
+ *
601
+ * keys 表示场景,在前端申请订阅场景权限时使用,同一个key将一次性申请订阅权限
602
+ * 每一个模板可以在不同的场景中被申请
603
+ * model=页面所在分包名
604
+ * page=页面名称
605
+ * name=模板消息标识符,调用this.app.wxSendMs时使用,同一个name将同时发出
606
+ * tmplId=模板id
607
+ *
608
+ * /wx-mini-ms-id.json 得到所有模板消息id数组
609
+ * 返回 {key: [模板id数组]}
610
+ */
611
+ messages?: Array<{
612
+ keys: string[];
613
+ name: string;
614
+ tmplId: string;
615
+ model: string;
616
+ page: string;
617
+ }>;
618
+ }
619
+ export interface WxMini {
620
+ /**
621
+ *
622
+ * 路径传递: model+page 或者 fullpath
623
+ * @param {{scene: string, model?: string, page?: string, fullpath?: string, png?: boolean, width?: number, lineColor?: {r: number; g: number; b: number}}} param
624
+ * @returns {Promise<Buffer>}
625
+ * @memberof WxMini
626
+ */
627
+ getUnlimited(param: {
628
+ scene: string;
629
+ model?: string;
630
+ page?: string;
631
+ fullpath?: string;
632
+ png?: boolean;
633
+ width?: number;
634
+ lineColor?: {
635
+ r: number;
636
+ g: number;
637
+ b: number;
638
+ };
639
+ }): Promise<Buffer>;
640
+ /** https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html */
641
+ sendMs(param: {
642
+ openids: string[];
643
+ name: string;
644
+ data: {
645
+ [key: string]: string | number;
646
+ };
647
+ scene: string;
648
+ }): Promise<void>;
649
+ /** https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html */
650
+ code2session(code: string): Promise<{
651
+ openid: string;
652
+ session_key: string;
653
+ unionid?: string;
654
+ }>;
655
+ /** 获取提前配置好的订阅消息id */
656
+ getTemplIds(): {
657
+ [key: string]: string[];
658
+ };
659
+ /** https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95 */
660
+ decrypt<T>({ sessionKey, encryptedData, iv }: {
661
+ iv: string;
662
+ sessionKey: string;
663
+ encryptedData: string;
664
+ }): T | undefined;
665
+ /** https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/live-player-plugin.html */
666
+ getLiveInfo(start: number, limit: number): Promise<WxLiveInfo[]>;
667
+ /** https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/live-player-plugin.html */
668
+ getLiveReplay(room_id: number, start: number, limit: number): Promise<WxLiveReplay[]>;
669
+ }
670
+ export interface WxOrganConfig {
671
+ /**
672
+ *
673
+ * 应用自定义编码
674
+ * 用于消息回调的url拼接
675
+ * @type {string}
676
+ * @memberof WxOrganConfig
677
+ */
678
+ appCode?: string;
679
+ /**
680
+ *
681
+ * 企业编号 或者 suiteid
682
+ * @type {string}
683
+ * @memberof WxOrganConfig
684
+ */
685
+ corpid: string;
686
+ /**
687
+ *
688
+ * 应用密钥
689
+ * @type {string}
690
+ * @memberof WxOrganConfig
691
+ */
692
+ corpsecret: string;
693
+ /**
694
+ *
695
+ * 当应用是小程序应用,并需要发送小程序消息时,需要指定appid
696
+ * @type {string}
697
+ * @memberof WxOrganConfig
698
+ */
699
+ appid?: string;
700
+ /**
701
+ *
702
+ * 当应用是自建应用,且需要发送应用消息时,需要指定应用id
703
+ * @type {string}
704
+ * @memberof WxOrganConfig
705
+ */
706
+ agentid?: number;
707
+ /**
708
+ *
709
+ * 是否开启消息回调?
710
+ * 当开启时,必须指定token\encodingAesKey
711
+ * 访问地址: /wx-organ/appCode.json
712
+ * @type {boolean}
713
+ * @memberof WxOrganConfig
714
+ */
715
+ msHook?: boolean;
716
+ /**
717
+ *
718
+ * 消息回调解密token
719
+ * @type {string}
720
+ * @memberof WxOrganConfig
721
+ */
722
+ token?: string;
723
+ /**
724
+ *
725
+ * 消息回调解密 key
726
+ * @type {string}
727
+ * @memberof WxOrganConfig
728
+ */
729
+ encodingAESKey?: string;
730
+ /**
731
+ *
732
+ * 小程序消息模板
733
+ * 发送时只要指定name即可
734
+ * 一个name可以有多个消息
735
+ * @memberof WxOrganConfig
736
+ */
737
+ miniMessages?: Array<{
738
+ name: string;
739
+ model: string;
740
+ page: string;
741
+ }>;
742
+ /**
743
+ *
744
+ * 非小程序消息模板
745
+ * 发送时只要指定name即可
746
+ * 一个name可以有多个消息
747
+ * https://work.weixin.qq.com/api/doc#90000/90135/90236
748
+ * @memberof WxOrganConfig
749
+ */
750
+ messages?: Array<{
751
+ name: string;
752
+ msgtype: 'text' | 'image' | 'voice' | 'video' | 'file' | 'textcard' | 'news' | 'mpnews' | 'markdown' | 'taskcard';
753
+ safe?: 0 | 1;
754
+ }>;
755
+ /**
756
+ *
757
+ * 接口模拟调用?
758
+ * 默认false
759
+ * @type {boolean}
760
+ * @memberof WxOrganConfig
761
+ */
762
+ mock?: boolean;
763
+ }
764
+ export interface WxOrganMini {
765
+ title: string;
766
+ description?: string;
767
+ content_item?: {
768
+ [key: string]: string;
769
+ };
770
+ emphasis_first_item?: boolean;
771
+ }
772
+ export interface WxOrganText {
773
+ content: string;
774
+ }
775
+ export interface WxOrganImage {
776
+ media_id: string;
777
+ }
778
+ export interface WxOrganVoice {
779
+ media_id: string;
780
+ }
781
+ export interface WxOrganVideo {
782
+ media_id: string;
783
+ title?: string;
784
+ description?: string;
785
+ }
786
+ export interface WxOrganFile {
787
+ media_id: string;
788
+ }
789
+ export interface WxOrganTextCard {
790
+ url: string;
791
+ title: string;
792
+ description: string;
793
+ btntxt?: string;
794
+ }
795
+ export interface WxOrganNews {
796
+ articles: Array<{
797
+ title: string;
798
+ description?: string;
799
+ url: string;
800
+ picurl?: string;
801
+ }>;
802
+ }
803
+ export interface WxOrganMpNews {
804
+ articles: Array<{
805
+ title: string;
806
+ thumb_media_id: string;
807
+ author?: string;
808
+ content_source_url?: string;
809
+ content: string;
810
+ digest?: string;
811
+ }>;
812
+ }
813
+ export interface WxOrganMarkDown {
814
+ content: string;
815
+ }
816
+ export interface WxOrganTaskCard {
817
+ title: string;
818
+ description: string;
819
+ url?: string;
820
+ task_id: string;
821
+ btn: Array<{
822
+ key: string;
823
+ name: string;
824
+ replace_name?: string;
825
+ color?: 'red' | 'blue';
826
+ is_bold?: boolean;
827
+ }>;
828
+ }
829
+ export interface WxLiveInfo {
830
+ name: string;
831
+ roomid: number;
832
+ cover_img: string;
833
+ live_satus: number;
834
+ start_time: number;
835
+ end_time: number;
836
+ anchor_name: string;
837
+ anchor_img: string;
838
+ goods: Array<{
839
+ cover_img: string;
840
+ url: string;
841
+ price: number;
842
+ name: string;
843
+ }>;
844
+ }
package/wx/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};