node-easywechat 3.7.1 → 3.7.3
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 +8 -0
- package/README.md +9 -5
- package/dist/Core/Http/ServerRequest.js +1 -0
- package/dist/OfficialAccount/Server.d.ts +7 -1
- package/dist/OfficialAccount/Server.js +20 -7
- package/dist/OpenPlatform/Server.js +9 -7
- package/dist/OpenWork/Server.d.ts +1 -1
- package/dist/OpenWork/Server.js +9 -5
- package/dist/Work/Server.d.ts +1 -1
- package/dist/Work/Server.js +9 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -177,13 +177,17 @@ let data = response.toObject();
|
|
|
177
177
|
// 商户号
|
|
178
178
|
mch_id: '',
|
|
179
179
|
// 商户证书路径
|
|
180
|
-
certificate: '',
|
|
180
|
+
certificate: '/path/to/apiclient_cert.pem',
|
|
181
181
|
// 商户证书私钥路径
|
|
182
|
-
private_key: '',
|
|
182
|
+
private_key: '/path/to/apiclient_key.pem',
|
|
183
183
|
// 平台证书(v3接口需要)
|
|
184
184
|
// 持路径列表或者PublicKey对象列表或者,以serial_no为key,证书内容或PublicKey对象为value的对象
|
|
185
185
|
// 下载工具:https://github.com/wechatpay-apiv3/CertificateDownloader
|
|
186
|
-
|
|
186
|
+
// 从 3.5.15 版本开始,node-easywechat 会自动下载并缓存平台证书,开发者可以不再配置该参数,当然配置也还是可以的。
|
|
187
|
+
platform_certs: [
|
|
188
|
+
'/path/to/platform_cert_1.pem',
|
|
189
|
+
'/path/to/platform_cert_2.pem',
|
|
190
|
+
],
|
|
187
191
|
// v3 API密钥
|
|
188
192
|
secret_key: '',
|
|
189
193
|
// v2 API密钥
|
|
@@ -288,7 +292,7 @@ client.setLogger((...args) => {
|
|
|
288
292
|
|
|
289
293
|
#### 缓存模块
|
|
290
294
|
|
|
291
|
-
框架默认使用文件缓存读取到的 `access_token` 等值,如需要改用其他缓存方式(如:redis),请实现接口 `CacheInterface` 并通过 `app.
|
|
295
|
+
框架默认使用文件缓存读取到的 `access_token` 等值,如需要改用其他缓存方式(如:redis),请实现接口 `CacheInterface` 并通过 `app.setCache` 方法进行模块替换。
|
|
292
296
|
|
|
293
297
|
```js
|
|
294
298
|
const { OfficialAccount, CacheInterface } = require('node-easywechat');
|
|
@@ -333,7 +337,7 @@ let app = new OfficialAccount({
|
|
|
333
337
|
});
|
|
334
338
|
|
|
335
339
|
// 替换缓存实例
|
|
336
|
-
app.
|
|
340
|
+
app.setCache(new RedisCacher(new Redis));
|
|
337
341
|
```
|
|
338
342
|
|
|
339
343
|
#### 请求模块
|
|
@@ -33,7 +33,13 @@ declare class Server extends ServerInterface {
|
|
|
33
33
|
* @returns
|
|
34
34
|
*/
|
|
35
35
|
getRequestMessage(request?: ServerRequestInterface): Promise<Message>;
|
|
36
|
-
protected decryptRequestMessage(
|
|
36
|
+
protected decryptRequestMessage(): ServerHandlerClosure<Message>;
|
|
37
|
+
/**
|
|
38
|
+
* 获取解密后的消息
|
|
39
|
+
* @param request 未设置该参数时,则从当前服务端收到的请求中获取
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
getDecryptedMessage(request?: ServerRequestInterface): Promise<import("../Core/Message")>;
|
|
37
43
|
}
|
|
38
44
|
interface Server {
|
|
39
45
|
/**
|
|
@@ -16,14 +16,14 @@ class Server extends ServerInterface_1.default {
|
|
|
16
16
|
* @returns
|
|
17
17
|
*/
|
|
18
18
|
async serve() {
|
|
19
|
-
let
|
|
19
|
+
let query = this.request.getQueryParams();
|
|
20
|
+
let echostr = query['echostr'] || '';
|
|
20
21
|
if (!!echostr) {
|
|
21
22
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
22
23
|
}
|
|
23
24
|
let message = await this.getRequestMessage(this.request);
|
|
24
|
-
let query = this.request.getQueryParams();
|
|
25
25
|
if (this.encryptor && query['msg_signature']) {
|
|
26
|
-
this.prepend(this.decryptRequestMessage(
|
|
26
|
+
this.prepend(this.decryptRequestMessage());
|
|
27
27
|
}
|
|
28
28
|
let response = await this.handle(new Response_1.default(200, {}, 'success'), message);
|
|
29
29
|
if (!(response instanceof Response_1.default)) {
|
|
@@ -64,14 +64,27 @@ class Server extends ServerInterface_1.default {
|
|
|
64
64
|
getRequestMessage(request = null) {
|
|
65
65
|
return Message_1.default.createFromRequest(request || this.request);
|
|
66
66
|
}
|
|
67
|
-
decryptRequestMessage(
|
|
67
|
+
decryptRequestMessage() {
|
|
68
68
|
return async (message, next) => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
|
|
69
|
+
let query = this.request.getQueryParams();
|
|
70
|
+
message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
|
|
72
71
|
return next(message);
|
|
73
72
|
};
|
|
74
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* 获取解密后的消息
|
|
76
|
+
* @param request 未设置该参数时,则从当前服务端收到的请求中获取
|
|
77
|
+
* @returns
|
|
78
|
+
*/
|
|
79
|
+
async getDecryptedMessage(request = null) {
|
|
80
|
+
request = request ?? this.request;
|
|
81
|
+
let message = await this.getRequestMessage(request);
|
|
82
|
+
let query = request.getQueryParams();
|
|
83
|
+
if (!this.encryptor || !query['msg_signature']) {
|
|
84
|
+
return message;
|
|
85
|
+
}
|
|
86
|
+
return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
87
|
+
}
|
|
75
88
|
}
|
|
76
89
|
;
|
|
77
90
|
module.exports = Server;
|
|
@@ -17,12 +17,15 @@ class Server extends ServerInterface_1.default {
|
|
|
17
17
|
* @returns
|
|
18
18
|
*/
|
|
19
19
|
async serve() {
|
|
20
|
-
let
|
|
20
|
+
let query = this.request.getQueryParams();
|
|
21
|
+
let echostr = query['echostr'] || '';
|
|
21
22
|
if (!!echostr) {
|
|
22
23
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
23
24
|
}
|
|
24
25
|
let message = await this.getRequestMessage(this.request);
|
|
25
|
-
|
|
26
|
+
if (this.encryptor && query['msg_signature']) {
|
|
27
|
+
this.prepend(this.decryptRequestMessage());
|
|
28
|
+
}
|
|
26
29
|
let response = await this.handle(new Response_1.default(200, {}, 'success'), message);
|
|
27
30
|
if (!(response instanceof Response_1.default)) {
|
|
28
31
|
response = await this.transformToReply(response, message, this.encryptor);
|
|
@@ -94,9 +97,9 @@ class Server extends ServerInterface_1.default {
|
|
|
94
97
|
});
|
|
95
98
|
}
|
|
96
99
|
decryptRequestMessage() {
|
|
97
|
-
let query = this.request.getQueryParams();
|
|
98
100
|
return async (message, next) => {
|
|
99
|
-
|
|
101
|
+
let query = this.request.getQueryParams();
|
|
102
|
+
message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
|
|
100
103
|
return next(message);
|
|
101
104
|
};
|
|
102
105
|
}
|
|
@@ -114,9 +117,8 @@ class Server extends ServerInterface_1.default {
|
|
|
114
117
|
* @returns
|
|
115
118
|
*/
|
|
116
119
|
async getDecryptedMessage(request = null) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
let message = await Message_1.default.createFromRequest(request);
|
|
120
|
+
request = request ?? this.request;
|
|
121
|
+
let message = await this.getRequestMessage(request);
|
|
120
122
|
let query = request.getQueryParams();
|
|
121
123
|
return this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
|
|
122
124
|
}
|
|
@@ -92,7 +92,7 @@ declare class Server extends ServerInterface {
|
|
|
92
92
|
* @returns
|
|
93
93
|
*/
|
|
94
94
|
getRequestMessage(request?: ServerRequestInterface): Promise<Message>;
|
|
95
|
-
protected decryptRequestMessage(
|
|
95
|
+
protected decryptRequestMessage(): ServerHandlerClosure<Message>;
|
|
96
96
|
/**
|
|
97
97
|
* 获取解密后的消息
|
|
98
98
|
* @param request 未设置该参数时,则从当前服务端收到的请求中获取
|
package/dist/OpenWork/Server.js
CHANGED
|
@@ -24,7 +24,9 @@ class Server extends ServerInterface_1.default {
|
|
|
24
24
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
25
25
|
}
|
|
26
26
|
let message = await this.getRequestMessage(this.request);
|
|
27
|
-
|
|
27
|
+
if (this.encryptor && query['msg_signature']) {
|
|
28
|
+
this.prepend(this.decryptRequestMessage());
|
|
29
|
+
}
|
|
28
30
|
let response = await this.handle(new Response_1.default(200, {}, 'success'), message);
|
|
29
31
|
if (!(response instanceof Response_1.default)) {
|
|
30
32
|
response = await this.transformToReply(response, message, this.encryptor);
|
|
@@ -174,11 +176,10 @@ class Server extends ServerInterface_1.default {
|
|
|
174
176
|
getRequestMessage(request = null) {
|
|
175
177
|
return Message_1.default.createFromRequest(request ?? this.request);
|
|
176
178
|
}
|
|
177
|
-
decryptRequestMessage(
|
|
179
|
+
decryptRequestMessage() {
|
|
178
180
|
return async (message, next) => {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
181
|
+
let query = this.request.getQueryParams();
|
|
182
|
+
message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
182
183
|
return next(message);
|
|
183
184
|
};
|
|
184
185
|
}
|
|
@@ -191,6 +192,9 @@ class Server extends ServerInterface_1.default {
|
|
|
191
192
|
request = request ?? this.request;
|
|
192
193
|
let message = await this.getRequestMessage(request);
|
|
193
194
|
let query = request.getQueryParams();
|
|
195
|
+
if (!this.encryptor || !query['msg_signature']) {
|
|
196
|
+
return message;
|
|
197
|
+
}
|
|
194
198
|
return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
195
199
|
}
|
|
196
200
|
}
|
package/dist/Work/Server.d.ts
CHANGED
|
@@ -79,7 +79,7 @@ declare class Server extends ServerInterface {
|
|
|
79
79
|
*/
|
|
80
80
|
getRequestMessage(request?: ServerRequestInterface): Promise<Message>;
|
|
81
81
|
protected validateUrl(): (message: Message, next: ServerHandlerClosure) => Promise<Response>;
|
|
82
|
-
protected decryptRequestMessage(
|
|
82
|
+
protected decryptRequestMessage(): ServerHandlerClosure;
|
|
83
83
|
/**
|
|
84
84
|
* 获取解密后的消息
|
|
85
85
|
* @param request 未设置该参数时,则从当前服务端收到的请求中获取
|
package/dist/Work/Server.js
CHANGED
|
@@ -22,7 +22,9 @@ class Server extends ServerInterface_1.default {
|
|
|
22
22
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
23
23
|
}
|
|
24
24
|
let message = await this.getRequestMessage(this.request);
|
|
25
|
-
|
|
25
|
+
if (this.encryptor && query['msg_signature']) {
|
|
26
|
+
this.prepend(this.decryptRequestMessage());
|
|
27
|
+
}
|
|
26
28
|
let response = await this.handle(new Response_1.default(200, {}, 'SUCCESS'), message);
|
|
27
29
|
if (!(response instanceof Response_1.default)) {
|
|
28
30
|
response = await this.transformToReply(response, message, this.encryptor);
|
|
@@ -149,11 +151,10 @@ class Server extends ServerInterface_1.default {
|
|
|
149
151
|
return new Response_1.default(200, { 'Content-Type': 'text/html' }, echostr);
|
|
150
152
|
};
|
|
151
153
|
}
|
|
152
|
-
decryptRequestMessage(
|
|
154
|
+
decryptRequestMessage() {
|
|
153
155
|
return async (message, next) => {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
156
|
+
let query = this.request.getQueryParams();
|
|
157
|
+
message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
157
158
|
return next(message);
|
|
158
159
|
};
|
|
159
160
|
}
|
|
@@ -166,6 +167,9 @@ class Server extends ServerInterface_1.default {
|
|
|
166
167
|
request = request ?? this.request;
|
|
167
168
|
let message = await this.getRequestMessage(request);
|
|
168
169
|
let query = request.getQueryParams();
|
|
170
|
+
if (!this.encryptor || !query['msg_signature']) {
|
|
171
|
+
return message;
|
|
172
|
+
}
|
|
169
173
|
return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
|
|
170
174
|
}
|
|
171
175
|
}
|