node-easywechat 3.7.1 → 3.7.2

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 CHANGED
@@ -1,6 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v3.7.2 (2024-07-22)
5
+
6
+ - Fix: 补充公众号和小程序服务端缺失的获取解密消息的方法,并优化其它模块该方法的逻辑;(#86)
7
+
4
8
  ## v3.7.1 (2024-06-07)
5
9
 
6
10
  - Fix: 调整ts编译目标版本为ES2020 (#79)
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
- platform_certs: '',
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密钥
@@ -34,6 +34,12 @@ declare class Server extends ServerInterface {
34
34
  */
35
35
  getRequestMessage(request?: ServerRequestInterface): Promise<Message>;
36
36
  protected decryptRequestMessage(query: Record<string, any>): 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,12 +16,12 @@ class Server extends ServerInterface_1.default {
16
16
  * @returns
17
17
  */
18
18
  async serve() {
19
- let echostr = this.request.getQueryParams()['echostr'] || '';
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
26
  this.prepend(this.decryptRequestMessage(query));
27
27
  }
@@ -66,12 +66,24 @@ class Server extends ServerInterface_1.default {
66
66
  }
67
67
  decryptRequestMessage(query) {
68
68
  return async (message, next) => {
69
- if (!this.encryptor)
70
- return null;
71
- await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
69
+ message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
72
70
  return next(message);
73
71
  };
74
72
  }
73
+ /**
74
+ * 获取解密后的消息
75
+ * @param request 未设置该参数时,则从当前服务端收到的请求中获取
76
+ * @returns
77
+ */
78
+ async getDecryptedMessage(request = null) {
79
+ request = request ?? this.request;
80
+ let message = await this.getRequestMessage(request);
81
+ let query = request.getQueryParams();
82
+ if (!this.encryptor || !query['msg_signature']) {
83
+ return message;
84
+ }
85
+ return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
86
+ }
75
87
  }
76
88
  ;
77
89
  module.exports = Server;
@@ -50,7 +50,7 @@ declare class Server extends ServerInterface {
50
50
  * @returns
51
51
  */
52
52
  handleThirdFastRegister(handler: ServerHandlerClosure<Message>): this;
53
- protected decryptRequestMessage(): ServerHandlerClosure<Message>;
53
+ protected decryptRequestMessage(query: Record<string, any>): ServerHandlerClosure<Message>;
54
54
  /**
55
55
  * 获取来自微信服务器的推送消息
56
56
  * @param request 未设置该参数时,则从当前服务端收到的请求中获取
@@ -17,12 +17,15 @@ class Server extends ServerInterface_1.default {
17
17
  * @returns
18
18
  */
19
19
  async serve() {
20
- let echostr = this.request.getQueryParams()['echostr'] || '';
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
- this.prepend(this.decryptRequestMessage());
26
+ if (this.encryptor && query['msg_signature']) {
27
+ this.prepend(this.decryptRequestMessage(query));
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);
@@ -93,10 +96,9 @@ class Server extends ServerInterface_1.default {
93
96
  return message.InfoType === 'notify_third_fasteregister' ? handler(message, next) : next(message);
94
97
  });
95
98
  }
96
- decryptRequestMessage() {
97
- let query = this.request.getQueryParams();
99
+ decryptRequestMessage(query) {
98
100
  return async (message, next) => {
99
- await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
101
+ message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
100
102
  return next(message);
101
103
  };
102
104
  }
@@ -114,9 +116,8 @@ class Server extends ServerInterface_1.default {
114
116
  * @returns
115
117
  */
116
118
  async getDecryptedMessage(request = null) {
117
- if (!request)
118
- request = this.request;
119
- let message = await Message_1.default.createFromRequest(request);
119
+ request = request ?? this.request;
120
+ let message = await this.getRequestMessage(request);
120
121
  let query = request.getQueryParams();
121
122
  return this.decryptMessage(message, this.encryptor, query['msg_signature'] || '', query['timestamp'] || '', query['nonce'] || '');
122
123
  }
@@ -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
- this.prepend(this.decryptRequestMessage(query));
27
+ if (this.encryptor && query['msg_signature']) {
28
+ this.prepend(this.decryptRequestMessage(query));
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);
@@ -176,9 +178,7 @@ class Server extends ServerInterface_1.default {
176
178
  }
177
179
  decryptRequestMessage(query) {
178
180
  return async (message, next) => {
179
- if (!this.encryptor)
180
- return null;
181
- await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
181
+ message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
182
182
  return next(message);
183
183
  };
184
184
  }
@@ -191,6 +191,9 @@ class Server extends ServerInterface_1.default {
191
191
  request = request ?? this.request;
192
192
  let message = await this.getRequestMessage(request);
193
193
  let query = request.getQueryParams();
194
+ if (!this.encryptor || !query['msg_signature']) {
195
+ return message;
196
+ }
194
197
  return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
195
198
  }
196
199
  }
@@ -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
- this.prepend(this.decryptRequestMessage(query));
25
+ if (this.encryptor && query['msg_signature']) {
26
+ this.prepend(this.decryptRequestMessage(query));
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);
@@ -151,9 +153,7 @@ class Server extends ServerInterface_1.default {
151
153
  }
152
154
  decryptRequestMessage(query) {
153
155
  return async (message, next) => {
154
- if (!this.encryptor)
155
- return null;
156
- await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
156
+ message = await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
157
157
  return next(message);
158
158
  };
159
159
  }
@@ -166,6 +166,9 @@ class Server extends ServerInterface_1.default {
166
166
  request = request ?? this.request;
167
167
  let message = await this.getRequestMessage(request);
168
168
  let query = request.getQueryParams();
169
+ if (!this.encryptor || !query['msg_signature']) {
170
+ return message;
171
+ }
169
172
  return await this.decryptMessage(message, this.encryptor, query['msg_signature'] ?? '', query['timestamp'] ?? '', query['nonce'] ?? '');
170
173
  }
171
174
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-easywechat",
3
- "version": "3.7.1",
3
+ "version": "3.7.2",
4
4
  "description": "EasyWechat SDK for Node.js (NOT OFFICIAL)",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {