node-easywechat 3.6.3 → 3.7.1
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/CHANGELOG.md +11 -0
- package/README.md +25 -0
- package/dist/Channel/AccessToken.d.ts +8 -0
- package/dist/Channel/AccessToken.js +15 -0
- package/dist/Channel/Account.d.ts +4 -0
- package/dist/Channel/Account.js +8 -0
- package/dist/Channel/Application.d.ts +60 -0
- package/dist/Channel/Application.js +125 -0
- package/dist/Channel/Contracts/AccountInterface.d.ts +23 -0
- package/dist/Channel/Contracts/AccountInterface.js +25 -0
- package/dist/Channel/Contracts/ApplicationInterface.d.ts +62 -0
- package/dist/Channel/Contracts/ApplicationInterface.js +55 -0
- package/dist/Channel/Message.d.ts +542 -0
- package/dist/Channel/Message.js +9 -0
- package/dist/Channel/Server.d.ts +91 -0
- package/dist/Channel/Server.js +16 -0
- package/dist/Core/Cache/FileCache.js +46 -63
- package/dist/Core/Contracts/AccessTokenInterface.js +2 -15
- package/dist/Core/Contracts/CacheInterface.js +4 -21
- package/dist/Core/Contracts/RefreshableAccessTokenInterface.js +1 -12
- package/dist/Core/Contracts/ServerInterface.d.ts +3 -3
- package/dist/Core/Contracts/ServerInterface.js +4 -15
- package/dist/Core/Http/ServerRequest.js +34 -49
- package/dist/Core/HttpClient/AccessTokenAwareClient.js +6 -17
- package/dist/Core/HttpClient/Contracts/HttpClientInterface.js +1 -12
- package/dist/Core/HttpClient/HttpClient.js +74 -85
- package/dist/Core/HttpClient/HttpClientResponse.js +35 -50
- package/dist/Core/HttpClient/Mixins/HttpClientMethodsMixin.js +34 -59
- package/dist/Core/HttpClient/Mixins/PresetMixin.js +8 -11
- package/dist/Core/Message.js +20 -31
- package/dist/Core/Mixins/{DecryptXmlMessageMixin.d.ts → DecryptMessageMixin.d.ts} +2 -2
- package/dist/Core/Mixins/DecryptMessageMixin.js +34 -0
- package/dist/Core/Mixins/HandlersMixin.d.ts +8 -8
- package/dist/Core/Mixins/HandlersMixin.js +26 -39
- package/dist/Core/Mixins/{ResponseXmlMessageMixin.d.ts → ResponseMessageMixin.d.ts} +4 -3
- package/dist/Core/Mixins/ResponseMessageMixin.js +61 -0
- package/dist/Core/Support/Utils.js +8 -19
- package/dist/MiniApp/Application.js +1 -1
- package/dist/MiniApp/Utils.js +13 -24
- package/dist/OfficialAccount/AccessToken.js +42 -59
- package/dist/OfficialAccount/Application.js +1 -1
- package/dist/OfficialAccount/JsApiTicket.js +31 -44
- package/dist/OfficialAccount/Server.d.ts +24 -0
- package/dist/OfficialAccount/Server.js +25 -37
- package/dist/OfficialAccount/Utils.js +6 -17
- package/dist/OpenPlatform/Application.js +62 -86
- package/dist/OpenPlatform/Authorizer/MiniApp/Utils.js +14 -25
- package/dist/OpenPlatform/AuthorizerAccessToken.js +6 -19
- package/dist/OpenPlatform/ComponentAccessToken.js +27 -42
- package/dist/OpenPlatform/Server.js +31 -54
- package/dist/OpenPlatform/VerifyTicket.js +14 -27
- package/dist/OpenWork/Application.js +61 -84
- package/dist/OpenWork/AuthorizerAccessToken.js +32 -47
- package/dist/OpenWork/JsApiTicket.js +64 -81
- package/dist/OpenWork/ProviderAccessToken.js +26 -41
- package/dist/OpenWork/Server.js +50 -94
- package/dist/OpenWork/SuiteAccessToken.js +27 -42
- package/dist/OpenWork/SuiteTicket.js +14 -27
- package/dist/Pay/Application.js +1 -2
- package/dist/Pay/Client.js +63 -77
- package/dist/Pay/LegacySignature.js +2 -3
- package/dist/Pay/Merchant.js +36 -52
- package/dist/Pay/Server.js +55 -70
- package/dist/Pay/Utils.js +13 -26
- package/dist/Pay/Validator.js +28 -39
- package/dist/Types/global.d.ts +31 -0
- package/dist/Work/AccessToken.js +26 -41
- package/dist/Work/Application.js +21 -32
- package/dist/Work/JsApiTicket.js +60 -77
- package/dist/Work/Server.js +47 -86
- package/dist/Work/Utils.js +12 -25
- package/dist/index.d.ts +14 -2
- package/dist/index.js +19 -1
- package/package.json +1 -1
- package/tsconfig.json +2 -2
- package/dist/Core/Mixins/DecryptXmlMessageMixin.js +0 -38
- package/dist/Core/Mixins/ResponseXmlMessageMixin.js +0 -63
package/dist/Work/JsApiTicket.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -32,25 +23,23 @@ class JsApiTicket extends AccessToken_1.default {
|
|
|
32
23
|
* 获取签名凭证jsapi_ticket
|
|
33
24
|
* @returns
|
|
34
25
|
*/
|
|
35
|
-
getTicket() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return response['ticket'];
|
|
53
|
-
});
|
|
26
|
+
async getTicket() {
|
|
27
|
+
let key = this.getKey();
|
|
28
|
+
let ticket = '';
|
|
29
|
+
if (this.cache) {
|
|
30
|
+
ticket = await this.cache.get(key);
|
|
31
|
+
}
|
|
32
|
+
if (!!ticket && typeof ticket === 'string') {
|
|
33
|
+
return ticket;
|
|
34
|
+
}
|
|
35
|
+
let response = (await this.httpClient.request('get', '/cgi-bin/get_jsapi_ticket', {})).toObject();
|
|
36
|
+
if (!response['ticket']) {
|
|
37
|
+
throw new Error('Failed to get jssdk_ticket: ' + JSON.stringify(response));
|
|
38
|
+
}
|
|
39
|
+
if (this.cache) {
|
|
40
|
+
await this.cache.set(key, response['ticket'], parseInt(response['expires_in']));
|
|
41
|
+
}
|
|
42
|
+
return response['ticket'];
|
|
54
43
|
}
|
|
55
44
|
/**
|
|
56
45
|
* 获取签名配置
|
|
@@ -59,19 +48,17 @@ class JsApiTicket extends AccessToken_1.default {
|
|
|
59
48
|
* @param timestamp 时间长,默认:当前时间
|
|
60
49
|
* @returns
|
|
61
50
|
*/
|
|
62
|
-
createConfigSignature(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
});
|
|
51
|
+
async createConfigSignature(url, nonce = null, timestamp = null) {
|
|
52
|
+
nonce = nonce || (0, Utils_1.randomString)(10);
|
|
53
|
+
timestamp = timestamp || (0, Utils_1.getTimestamp)();
|
|
54
|
+
let ticket = await this.getTicket();
|
|
55
|
+
return {
|
|
56
|
+
url,
|
|
57
|
+
nonceStr: nonce,
|
|
58
|
+
timestamp,
|
|
59
|
+
appId: this.corpId,
|
|
60
|
+
signature: this.getTicketSignature(ticket, nonce, timestamp, url),
|
|
61
|
+
};
|
|
75
62
|
}
|
|
76
63
|
getTicketSignature(ticket, nonce, timestamp, url) {
|
|
77
64
|
return (0, Utils_1.createHash)(`jsapi_ticket=${ticket}&noncestr=${nonce}×tamp=${timestamp}&url=${url}`, 'sha1');
|
|
@@ -84,49 +71,45 @@ class JsApiTicket extends AccessToken_1.default {
|
|
|
84
71
|
* @param timestamp 时间长,默认:当前时间
|
|
85
72
|
* @returns
|
|
86
73
|
*/
|
|
87
|
-
createAgentConfigSignature(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
};
|
|
100
|
-
});
|
|
74
|
+
async createAgentConfigSignature(agentId, url, nonce = null, timestamp = null) {
|
|
75
|
+
nonce = nonce || (0, Utils_1.randomString)(10);
|
|
76
|
+
timestamp = timestamp || (0, Utils_1.getTimestamp)();
|
|
77
|
+
let ticket = await this.getTicket();
|
|
78
|
+
return {
|
|
79
|
+
corpid: this.corpId,
|
|
80
|
+
agentid: agentId,
|
|
81
|
+
url,
|
|
82
|
+
nonceStr: nonce,
|
|
83
|
+
timestamp,
|
|
84
|
+
signature: this.getTicketSignature(ticket, nonce, timestamp, url),
|
|
85
|
+
};
|
|
101
86
|
}
|
|
102
87
|
/**
|
|
103
88
|
* 获取代理应用的签名凭证jsapi_ticket
|
|
104
89
|
* @param agentId 代理应用的id
|
|
105
90
|
* @returns
|
|
106
91
|
*/
|
|
107
|
-
getAgentTicket(agentId) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
type: 'agent_config',
|
|
120
|
-
}
|
|
121
|
-
})).toObject();
|
|
122
|
-
if (!response['ticket']) {
|
|
123
|
-
throw new Error('Failed to get jssdk agentTicket: ' + JSON.stringify(response));
|
|
124
|
-
}
|
|
125
|
-
if (this.cache) {
|
|
126
|
-
yield this.cache.set(key, response['ticket'], parseInt(response['expires_in']));
|
|
92
|
+
async getAgentTicket(agentId) {
|
|
93
|
+
let key = this.getAgentKey(agentId);
|
|
94
|
+
let ticket = '';
|
|
95
|
+
if (this.cache) {
|
|
96
|
+
ticket = await this.cache.get(key);
|
|
97
|
+
}
|
|
98
|
+
if (!!ticket && typeof ticket === 'string') {
|
|
99
|
+
return ticket;
|
|
100
|
+
}
|
|
101
|
+
let response = (await this.httpClient.request('get', '/cgi-bin/ticket/get', {
|
|
102
|
+
params: {
|
|
103
|
+
type: 'agent_config',
|
|
127
104
|
}
|
|
128
|
-
|
|
129
|
-
|
|
105
|
+
})).toObject();
|
|
106
|
+
if (!response['ticket']) {
|
|
107
|
+
throw new Error('Failed to get jssdk agentTicket: ' + JSON.stringify(response));
|
|
108
|
+
}
|
|
109
|
+
if (this.cache) {
|
|
110
|
+
await this.cache.set(key, response['ticket'], parseInt(response['expires_in']));
|
|
111
|
+
}
|
|
112
|
+
return response['ticket'];
|
|
130
113
|
}
|
|
131
114
|
/**
|
|
132
115
|
* 获取代理应用的jsapi_ticket的缓存名称
|
package/dist/Work/Server.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -24,32 +15,27 @@ class Server extends ServerInterface_1.default {
|
|
|
24
15
|
* 服务端消息处理
|
|
25
16
|
* @returns
|
|
26
17
|
*/
|
|
27
|
-
serve() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
return response;
|
|
42
|
-
});
|
|
18
|
+
async serve() {
|
|
19
|
+
let query = this.request.getQueryParams();
|
|
20
|
+
if (!!query['echostr']) {
|
|
21
|
+
let echostr = this.encryptor.decrypt(query['echostr'], query['msg_signature'] ?? '', query['nonce'] ?? '', query['timestamp'] ?? '');
|
|
22
|
+
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
23
|
+
}
|
|
24
|
+
let message = await this.getRequestMessage(this.request);
|
|
25
|
+
this.prepend(this.decryptRequestMessage(query));
|
|
26
|
+
let response = await this.handle(new Response_1.default(200, {}, 'SUCCESS'), message);
|
|
27
|
+
if (!(response instanceof Response_1.default)) {
|
|
28
|
+
response = await this.transformToReply(response, message, this.encryptor);
|
|
29
|
+
}
|
|
30
|
+
return response;
|
|
43
31
|
}
|
|
44
32
|
/**
|
|
45
33
|
* 设置联系人变化的消息处理器
|
|
46
34
|
* @param handler
|
|
47
35
|
*/
|
|
48
36
|
handleContactChanged(handler) {
|
|
49
|
-
return this.with(function (message, next) {
|
|
50
|
-
return
|
|
51
|
-
return message.Event === 'change_contact' ? handler(message, next) : next(message);
|
|
52
|
-
});
|
|
37
|
+
return this.with(async function (message, next) {
|
|
38
|
+
return message.Event === 'change_contact' ? handler(message, next) : next(message);
|
|
53
39
|
});
|
|
54
40
|
}
|
|
55
41
|
/**
|
|
@@ -57,10 +43,8 @@ class Server extends ServerInterface_1.default {
|
|
|
57
43
|
* @param handler
|
|
58
44
|
*/
|
|
59
45
|
handleUserTagUpdated(handler) {
|
|
60
|
-
return this.with(function (message, next) {
|
|
61
|
-
return
|
|
62
|
-
return message.Event === 'change_contact' && message.ChangeType === 'update_tag' ? handler(message, next) : next(message);
|
|
63
|
-
});
|
|
46
|
+
return this.with(async function (message, next) {
|
|
47
|
+
return message.Event === 'change_contact' && message.ChangeType === 'update_tag' ? handler(message, next) : next(message);
|
|
64
48
|
});
|
|
65
49
|
}
|
|
66
50
|
/**
|
|
@@ -68,10 +52,8 @@ class Server extends ServerInterface_1.default {
|
|
|
68
52
|
* @param handler
|
|
69
53
|
*/
|
|
70
54
|
handleUserCreated(handler) {
|
|
71
|
-
return this.with(function (message, next) {
|
|
72
|
-
return
|
|
73
|
-
return message.Event === 'change_contact' && message.ChangeType === 'create_user' ? handler(message, next) : next(message);
|
|
74
|
-
});
|
|
55
|
+
return this.with(async function (message, next) {
|
|
56
|
+
return message.Event === 'change_contact' && message.ChangeType === 'create_user' ? handler(message, next) : next(message);
|
|
75
57
|
});
|
|
76
58
|
}
|
|
77
59
|
/**
|
|
@@ -79,10 +61,8 @@ class Server extends ServerInterface_1.default {
|
|
|
79
61
|
* @param handler
|
|
80
62
|
*/
|
|
81
63
|
handleUserUpdated(handler) {
|
|
82
|
-
return this.with(function (message, next) {
|
|
83
|
-
return
|
|
84
|
-
return message.Event === 'change_contact' && message.ChangeType === 'update_user' ? handler(message, next) : next(message);
|
|
85
|
-
});
|
|
64
|
+
return this.with(async function (message, next) {
|
|
65
|
+
return message.Event === 'change_contact' && message.ChangeType === 'update_user' ? handler(message, next) : next(message);
|
|
86
66
|
});
|
|
87
67
|
}
|
|
88
68
|
/**
|
|
@@ -90,10 +70,8 @@ class Server extends ServerInterface_1.default {
|
|
|
90
70
|
* @param handler
|
|
91
71
|
*/
|
|
92
72
|
handleUserDeleted(handler) {
|
|
93
|
-
return this.with(function (message, next) {
|
|
94
|
-
return
|
|
95
|
-
return message.Event === 'change_contact' && message.ChangeType === 'delete_user' ? handler(message, next) : next(message);
|
|
96
|
-
});
|
|
73
|
+
return this.with(async function (message, next) {
|
|
74
|
+
return message.Event === 'change_contact' && message.ChangeType === 'delete_user' ? handler(message, next) : next(message);
|
|
97
75
|
});
|
|
98
76
|
}
|
|
99
77
|
/**
|
|
@@ -101,10 +79,8 @@ class Server extends ServerInterface_1.default {
|
|
|
101
79
|
* @param handler
|
|
102
80
|
*/
|
|
103
81
|
handlePartyCreated(handler) {
|
|
104
|
-
return this.with(function (message, next) {
|
|
105
|
-
return
|
|
106
|
-
return message.Event === 'change_contact' && message.ChangeType === 'create_party' ? handler(message, next) : next(message);
|
|
107
|
-
});
|
|
82
|
+
return this.with(async function (message, next) {
|
|
83
|
+
return message.Event === 'change_contact' && message.ChangeType === 'create_party' ? handler(message, next) : next(message);
|
|
108
84
|
});
|
|
109
85
|
}
|
|
110
86
|
/**
|
|
@@ -112,10 +88,8 @@ class Server extends ServerInterface_1.default {
|
|
|
112
88
|
* @param handler
|
|
113
89
|
*/
|
|
114
90
|
handlePartyUpdated(handler) {
|
|
115
|
-
return this.with(function (message, next) {
|
|
116
|
-
return
|
|
117
|
-
return message.Event === 'change_contact' && message.ChangeType === 'update_party' ? handler(message, next) : next(message);
|
|
118
|
-
});
|
|
91
|
+
return this.with(async function (message, next) {
|
|
92
|
+
return message.Event === 'change_contact' && message.ChangeType === 'update_party' ? handler(message, next) : next(message);
|
|
119
93
|
});
|
|
120
94
|
}
|
|
121
95
|
/**
|
|
@@ -123,10 +97,8 @@ class Server extends ServerInterface_1.default {
|
|
|
123
97
|
* @param handler
|
|
124
98
|
*/
|
|
125
99
|
handlePartyDeleted(handler) {
|
|
126
|
-
return this.with(function (message, next) {
|
|
127
|
-
return
|
|
128
|
-
return message.Event === 'change_contact' && message.ChangeType === 'delete_party' ? handler(message, next) : next(message);
|
|
129
|
-
});
|
|
100
|
+
return this.with(async function (message, next) {
|
|
101
|
+
return message.Event === 'change_contact' && message.ChangeType === 'delete_party' ? handler(message, next) : next(message);
|
|
130
102
|
});
|
|
131
103
|
}
|
|
132
104
|
/**
|
|
@@ -134,10 +106,8 @@ class Server extends ServerInterface_1.default {
|
|
|
134
106
|
* @param handler
|
|
135
107
|
*/
|
|
136
108
|
handleBatchJobsFinished(handler) {
|
|
137
|
-
return this.with(function (message, next) {
|
|
138
|
-
return
|
|
139
|
-
return message.Event === 'batch_job_result' ? handler(message, next) : next(message);
|
|
140
|
-
});
|
|
109
|
+
return this.with(async function (message, next) {
|
|
110
|
+
return message.Event === 'batch_job_result' ? handler(message, next) : next(message);
|
|
141
111
|
});
|
|
142
112
|
}
|
|
143
113
|
/**
|
|
@@ -147,10 +117,8 @@ class Server extends ServerInterface_1.default {
|
|
|
147
117
|
* @returns
|
|
148
118
|
*/
|
|
149
119
|
addMessageListener(type, handler) {
|
|
150
|
-
return this.withHandler(function (message, next) {
|
|
151
|
-
return
|
|
152
|
-
return message.MsgType === type ? handler(message, next) : next(message);
|
|
153
|
-
});
|
|
120
|
+
return this.withHandler(async function (message, next) {
|
|
121
|
+
return message.MsgType === type ? handler(message, next) : next(message);
|
|
154
122
|
});
|
|
155
123
|
}
|
|
156
124
|
/**
|
|
@@ -160,10 +128,8 @@ class Server extends ServerInterface_1.default {
|
|
|
160
128
|
* @returns
|
|
161
129
|
*/
|
|
162
130
|
addEventListener(event, handler) {
|
|
163
|
-
return this.withHandler(function (message, next) {
|
|
164
|
-
return
|
|
165
|
-
return message.Event === event ? handler(message, next) : next(message);
|
|
166
|
-
});
|
|
131
|
+
return this.withHandler(async function (message, next) {
|
|
132
|
+
return message.Event === event ? handler(message, next) : next(message);
|
|
167
133
|
});
|
|
168
134
|
}
|
|
169
135
|
/**
|
|
@@ -172,40 +138,35 @@ class Server extends ServerInterface_1.default {
|
|
|
172
138
|
* @returns
|
|
173
139
|
*/
|
|
174
140
|
getRequestMessage(request = null) {
|
|
175
|
-
return Message_1.default.createFromRequest(request
|
|
141
|
+
return Message_1.default.createFromRequest(request ?? this.request);
|
|
176
142
|
}
|
|
177
143
|
validateUrl() {
|
|
178
|
-
return (message, next) =>
|
|
179
|
-
var _a, _b, _c;
|
|
144
|
+
return async (message, next) => {
|
|
180
145
|
let query = this.request.getQueryParams();
|
|
181
146
|
if (!this.encryptor)
|
|
182
147
|
return null;
|
|
183
|
-
let echostr = this.encryptor.decrypt(query['echostr'],
|
|
148
|
+
let echostr = this.encryptor.decrypt(query['echostr'], query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
184
149
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
185
|
-
}
|
|
150
|
+
};
|
|
186
151
|
}
|
|
187
152
|
decryptRequestMessage(query) {
|
|
188
|
-
return (message, next) =>
|
|
189
|
-
var _a, _b, _c;
|
|
153
|
+
return async (message, next) => {
|
|
190
154
|
if (!this.encryptor)
|
|
191
155
|
return null;
|
|
192
|
-
|
|
156
|
+
await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
193
157
|
return next(message);
|
|
194
|
-
}
|
|
158
|
+
};
|
|
195
159
|
}
|
|
196
160
|
/**
|
|
197
161
|
* 获取解密后的消息
|
|
198
162
|
* @param request 未设置该参数时,则从当前服务端收到的请求中获取
|
|
199
163
|
* @returns
|
|
200
164
|
*/
|
|
201
|
-
getDecryptedMessage() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
let query = request.getQueryParams();
|
|
207
|
-
return yield this.decryptMessage(message, this.encryptor, (_a = query['msg_signature']) !== null && _a !== void 0 ? _a : '', (_b = query['timestamp']) !== null && _b !== void 0 ? _b : '', (_c = query['nonce']) !== null && _c !== void 0 ? _c : '');
|
|
208
|
-
});
|
|
165
|
+
async getDecryptedMessage(request = null) {
|
|
166
|
+
request = request ?? this.request;
|
|
167
|
+
let message = await this.getRequestMessage(request);
|
|
168
|
+
let query = request.getQueryParams();
|
|
169
|
+
return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
209
170
|
}
|
|
210
171
|
}
|
|
211
172
|
;
|
package/dist/Work/Utils.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -24,14 +15,12 @@ class Utils {
|
|
|
24
15
|
* @param debug 是否开启调试模式,默认:false
|
|
25
16
|
* @returns
|
|
26
17
|
*/
|
|
27
|
-
buildJsSdkConfig(
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}, yield this.app.getTicket().createConfigSignature(url));
|
|
34
|
-
});
|
|
18
|
+
async buildJsSdkConfig(url, jsApiList = [], openTagList = [], debug = false) {
|
|
19
|
+
return (0, merge_1.default)({
|
|
20
|
+
jsApiList,
|
|
21
|
+
openTagList,
|
|
22
|
+
debug,
|
|
23
|
+
}, await this.app.getTicket().createConfigSignature(url));
|
|
35
24
|
}
|
|
36
25
|
/**
|
|
37
26
|
* 构建代理应用的jssdk配置
|
|
@@ -42,14 +31,12 @@ class Utils {
|
|
|
42
31
|
* @param debug 是否开启调试模式,默认:false
|
|
43
32
|
* @returns
|
|
44
33
|
*/
|
|
45
|
-
buildJsSdkAgentConfig(
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}, yield this.app.getTicket().createAgentConfigSignature(agentId, url));
|
|
52
|
-
});
|
|
34
|
+
async buildJsSdkAgentConfig(agentId, url, jsApiList = [], openTagList = [], debug = false) {
|
|
35
|
+
return (0, merge_1.default)({
|
|
36
|
+
jsApiList,
|
|
37
|
+
openTagList,
|
|
38
|
+
debug,
|
|
39
|
+
}, await this.app.getTicket().createAgentConfigSignature(agentId, url));
|
|
53
40
|
}
|
|
54
41
|
}
|
|
55
42
|
;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { OfficialAccountConfig, MiniAppConfig, LogHandler, ServerEventType, ServerHandlerClosure, PayConfig, OpenPlatformConfig, WorkConfig, OpenWorkConfig, HttpClientFailureJudgeClosure, PaymentFailHandler, PaymentAlertHandler, PaymentPaidHandler, PaymentRefundedHandler, PaymentScannedHandler } from './Types/global';
|
|
1
|
+
import { OfficialAccountConfig, MiniAppConfig, LogHandler, ServerEventType, ServerHandlerClosure, PayConfig, OpenPlatformConfig, WorkConfig, OpenWorkConfig, ChannelConfig, HttpClientFailureJudgeClosure, PaymentFailHandler, PaymentAlertHandler, PaymentPaidHandler, PaymentRefundedHandler, PaymentScannedHandler } from './Types/global';
|
|
2
2
|
import OfficialAccount from './OfficialAccount/Application';
|
|
3
3
|
import MiniApp from './MiniApp/Application';
|
|
4
4
|
import Pay from './Pay/Application';
|
|
5
5
|
import OpenPlatform from './OpenPlatform/Application';
|
|
6
6
|
import Work from './Work/Application';
|
|
7
7
|
import OpenWork from './OpenWork/Application';
|
|
8
|
+
import Channel from './Channel/Application';
|
|
8
9
|
import CacheInterface from './Core/Contracts/CacheInterface';
|
|
9
10
|
import ServerRequest from './Core/Http/ServerRequest';
|
|
10
11
|
import FormData from 'form-data';
|
|
@@ -12,9 +13,10 @@ import OfficialAccountMessage from './OfficialAccount/Message';
|
|
|
12
13
|
import WorkMessage from './Work/Message';
|
|
13
14
|
import OpenPlatformMessage from './OpenPlatform/Message';
|
|
14
15
|
import OpenWorkMessage from './OpenWork/Message';
|
|
16
|
+
import ChannelMessage from './Channel/Message';
|
|
15
17
|
import { PublicKey } from './Core/Support/PublicKey';
|
|
16
18
|
import { PrivateKey } from './Core/Support/PrivateKey';
|
|
17
|
-
export { OfficialAccount, OfficialAccountConfig, MiniApp, MiniAppConfig, Pay, PayConfig, OpenPlatform, OpenPlatformConfig, Work, WorkConfig, OpenWork, OpenWorkConfig, CacheInterface, ServerRequest, LogHandler, ServerEventType, ServerHandlerClosure, PublicKey, PrivateKey,
|
|
19
|
+
export { OfficialAccount, OfficialAccountConfig, MiniApp, MiniAppConfig, Pay, PayConfig, OpenPlatform, OpenPlatformConfig, Work, WorkConfig, OpenWork, OpenWorkConfig, Channel, ChannelConfig, CacheInterface, ServerRequest, LogHandler, ServerEventType, ServerHandlerClosure, PublicKey, PrivateKey,
|
|
18
20
|
/**
|
|
19
21
|
* 表单对象
|
|
20
22
|
* @see https://github.com/axios/axios#formdata
|
|
@@ -51,6 +53,11 @@ export declare function defineWorkConfig(config: WorkConfig): WorkConfig;
|
|
|
51
53
|
* @param config
|
|
52
54
|
*/
|
|
53
55
|
export declare function defineOpenWorkConfig(config: OpenWorkConfig): OpenWorkConfig;
|
|
56
|
+
/**
|
|
57
|
+
* 定义视频号配置
|
|
58
|
+
* @param config
|
|
59
|
+
*/
|
|
60
|
+
export declare function defineChannelConfig(config: ChannelConfig): ChannelConfig;
|
|
54
61
|
/**
|
|
55
62
|
* 定义日志处理函数
|
|
56
63
|
* @param func
|
|
@@ -81,6 +88,11 @@ export declare function defineOpenPlatformServerHandler(func: ServerHandlerClosu
|
|
|
81
88
|
* @param func
|
|
82
89
|
*/
|
|
83
90
|
export declare function defineOpenWorkServerHandler(func: ServerHandlerClosure<OpenWorkMessage>): ServerHandlerClosure<OpenWorkMessage>;
|
|
91
|
+
/**
|
|
92
|
+
* 定义视频号服务端消息处理函数
|
|
93
|
+
* @param func
|
|
94
|
+
*/
|
|
95
|
+
export declare function defineChannelServerHandler(func: ServerHandlerClosure<ChannelMessage>): ServerHandlerClosure<ChannelMessage>;
|
|
84
96
|
/**
|
|
85
97
|
* 定义HttpClient错误判定回调
|
|
86
98
|
* @param func
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.definePaymentScannedHandler = exports.definePaymentRefundedHandler = exports.definePaymentPaidHandler = exports.definePaymentAlertHandler = exports.definePaymentFailHandler = exports.defineHttpClientFailureJudgeClosure = exports.defineOpenWorkServerHandler = exports.defineOpenPlatformServerHandler = exports.defineWorkServerHandler = exports.defineMiniAppServerHandler = exports.defineOfficeAccountServerHandler = exports.defineLogHandler = exports.defineOpenWorkConfig = exports.defineWorkConfig = exports.defineOpenPlatformConfig = exports.definePayConfig = exports.defineMiniAppConfig = exports.defineOfficialAccountConfig = exports.FormData = exports.PrivateKey = exports.PublicKey = exports.ServerRequest = exports.CacheInterface = exports.OpenWork = exports.Work = exports.OpenPlatform = exports.Pay = exports.MiniApp = exports.OfficialAccount = void 0;
|
|
6
|
+
exports.definePaymentScannedHandler = exports.definePaymentRefundedHandler = exports.definePaymentPaidHandler = exports.definePaymentAlertHandler = exports.definePaymentFailHandler = exports.defineHttpClientFailureJudgeClosure = exports.defineChannelServerHandler = exports.defineOpenWorkServerHandler = exports.defineOpenPlatformServerHandler = exports.defineWorkServerHandler = exports.defineMiniAppServerHandler = exports.defineOfficeAccountServerHandler = exports.defineLogHandler = exports.defineChannelConfig = exports.defineOpenWorkConfig = exports.defineWorkConfig = exports.defineOpenPlatformConfig = exports.definePayConfig = exports.defineMiniAppConfig = exports.defineOfficialAccountConfig = exports.FormData = exports.PrivateKey = exports.PublicKey = exports.ServerRequest = exports.CacheInterface = exports.Channel = exports.OpenWork = exports.Work = exports.OpenPlatform = exports.Pay = exports.MiniApp = exports.OfficialAccount = void 0;
|
|
7
7
|
const Application_1 = __importDefault(require("./OfficialAccount/Application"));
|
|
8
8
|
exports.OfficialAccount = Application_1.default;
|
|
9
9
|
const Application_2 = __importDefault(require("./MiniApp/Application"));
|
|
@@ -16,6 +16,8 @@ const Application_5 = __importDefault(require("./Work/Application"));
|
|
|
16
16
|
exports.Work = Application_5.default;
|
|
17
17
|
const Application_6 = __importDefault(require("./OpenWork/Application"));
|
|
18
18
|
exports.OpenWork = Application_6.default;
|
|
19
|
+
const Application_7 = __importDefault(require("./Channel/Application"));
|
|
20
|
+
exports.Channel = Application_7.default;
|
|
19
21
|
const CacheInterface_1 = __importDefault(require("./Core/Contracts/CacheInterface"));
|
|
20
22
|
exports.CacheInterface = CacheInterface_1.default;
|
|
21
23
|
const ServerRequest_1 = __importDefault(require("./Core/Http/ServerRequest"));
|
|
@@ -74,6 +76,14 @@ function defineOpenWorkConfig(config) {
|
|
|
74
76
|
return config;
|
|
75
77
|
}
|
|
76
78
|
exports.defineOpenWorkConfig = defineOpenWorkConfig;
|
|
79
|
+
/**
|
|
80
|
+
* 定义视频号配置
|
|
81
|
+
* @param config
|
|
82
|
+
*/
|
|
83
|
+
function defineChannelConfig(config) {
|
|
84
|
+
return config;
|
|
85
|
+
}
|
|
86
|
+
exports.defineChannelConfig = defineChannelConfig;
|
|
77
87
|
/**
|
|
78
88
|
* 定义日志处理函数
|
|
79
89
|
* @param func
|
|
@@ -122,6 +132,14 @@ function defineOpenWorkServerHandler(func) {
|
|
|
122
132
|
return func;
|
|
123
133
|
}
|
|
124
134
|
exports.defineOpenWorkServerHandler = defineOpenWorkServerHandler;
|
|
135
|
+
/**
|
|
136
|
+
* 定义视频号服务端消息处理函数
|
|
137
|
+
* @param func
|
|
138
|
+
*/
|
|
139
|
+
function defineChannelServerHandler(func) {
|
|
140
|
+
return func;
|
|
141
|
+
}
|
|
142
|
+
exports.defineChannelServerHandler = defineChannelServerHandler;
|
|
125
143
|
/**
|
|
126
144
|
* 定义HttpClient错误判定回调
|
|
127
145
|
* @param func
|
package/package.json
CHANGED
package/tsconfig.json
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
|
4
4
|
/* Basic Options */
|
|
5
5
|
// "incremental": true, /* Enable incremental compilation */
|
|
6
|
-
"target": "
|
|
7
|
-
"module": "
|
|
6
|
+
"target": "ES2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
|
|
7
|
+
"module": "node16", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
|
8
8
|
// "lib": [], /* Specify library files to be included in the compilation. */
|
|
9
9
|
"allowJs": true, /* Allow javascript files to be compiled. */
|
|
10
10
|
// "checkJs": true, /* Report errors in .js files. */
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
const Utils_1 = require("../Support/Utils");
|
|
12
|
-
class DecryptXmlMessageMixin {
|
|
13
|
-
/**
|
|
14
|
-
* 解密消息
|
|
15
|
-
* @returns
|
|
16
|
-
*/
|
|
17
|
-
decryptMessage(message, encryptor, signature, timestamp, nonce) {
|
|
18
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
-
let ciphertext = message['Encrypt'];
|
|
20
|
-
this.validateSignature(encryptor.getToken(), ciphertext, signature, timestamp, nonce);
|
|
21
|
-
let attributes = yield (0, Utils_1.parseXml)(encryptor.decrypt(ciphertext, signature, nonce, timestamp));
|
|
22
|
-
message.merge(attributes);
|
|
23
|
-
return message;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
validateSignature(token, ciphertext, signature, timestamp, nonce) {
|
|
27
|
-
if (!signature) {
|
|
28
|
-
throw new Error('Request signature must not be empty.');
|
|
29
|
-
}
|
|
30
|
-
let params = [token, timestamp, nonce, ciphertext];
|
|
31
|
-
params.sort();
|
|
32
|
-
if (signature !== (0, Utils_1.createHash)(params.join(''), 'sha1')) {
|
|
33
|
-
throw new Error('Invalid request signature.');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
;
|
|
38
|
-
module.exports = DecryptXmlMessageMixin;
|