node-easywechat 3.7.3 → 3.7.5

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,16 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v3.7.5 (2024-11-16)
5
+
6
+ - Feat: 企业微信开放平台模块,新增生成授权页地址、获取企业永久授权码两个方法
7
+
8
+ - Fix: 更新说明文档
9
+
10
+ ## v3.7.4 (2024-08-14)
11
+
12
+ - Fix: 更新依赖包
13
+
4
14
  ## v3.7.3 (2024-07-26)
5
15
 
6
16
  - Fix: 修复各模块获取服务端消息时,未能获取最新请求导致解密异常的问题。(#88)
package/README.md CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  ### 使用说明
22
22
 
23
- 绝大部分API都可以根据 [EasyWeChat 的文档](https://www.easywechat.com/5.x/) 来使用。小部分(如获取请求相关数据、返回响应数据、支付证书等)的操作,由于语言环境的不同,会有不同处理。具体可以查看 [node-easywechat-demo](https://github.com/hpyer/node-easywechat-demo/) 以及下方的[自定义模块说明](#自定义模块模块替换使用方法) 。如果仍有疑问,请提issue,谢谢~
23
+ 请参考 [文档](https://hpyer.github.io/node-easywechat/) 来使用。如有需要可以查看 [示例代码](https://github.com/hpyer/node-easywechat-demo/)。如果仍有疑问,请提issue,谢谢~
24
24
 
25
25
  从 `3.x` 起 SDK 中不再内置具体业务的接口,仅封装底层基础部分,如认证、授权和 API 客户端。至于为什么不再封装业务接口,可以查看 [EasyWeChat 给出说明](https://easywechat.com/6.x/introduction.html#不再封装业务接口)。
26
26
 
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare class Encryptor {
3
2
  protected appId: string;
4
3
  protected token: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare abstract class MessageInterface {
3
2
  /**
4
3
  * 获取 HTTP 协议版本,如:'1.1', '1.0'
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare class MessageMixin {
3
2
  protected headers: Record<string, any>;
4
3
  protected protocal: string;
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { IncomingMessage } from "http";
4
2
  import ServerRequestInterface from "./Contracts/ServerRequestInterface";
5
3
  import MessageMixin from "./Minxins/MessageMixin";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { AxiosRequestConfig, Method } from "axios";
3
2
  import fs from "fs";
4
3
  declare class PresetMixin {
@@ -1,6 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
1
  import { CipherGCMTypes, BinaryLike, CipherKey } from 'crypto';
5
2
  export declare class AES {
6
3
  /**
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare class PKCS7 {
3
2
  /**
4
3
  * 对需要加密的明文进行填充补位
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class PrivateKey {
3
2
  protected passphrase?: string;
4
3
  protected key: Buffer;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class PublicKey {
3
2
  protected certificate: Buffer;
4
3
  protected serialNo: string;
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import crypto, { BinaryToTextEncoding } from 'crypto';
4
2
  declare class RSA {
5
3
  protected publicKey: crypto.KeyObject;
@@ -1,7 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- /// <reference types="node" />
5
1
  import Crypto from 'crypto';
6
2
  import Stream from 'stream';
7
3
  import Fs from 'fs';
@@ -96,6 +96,23 @@ declare class Application implements ApplicationInterface {
96
96
  * @returns
97
97
  */
98
98
  createPreAuthorizationCode(suiteAccessToken?: SuiteAccessToken): Promise<import("../Types/global").WeixinResponse>;
99
+ /**
100
+ * 生成授权页地址
101
+ * @see https://developer.work.weixin.qq.com/document/path/90597#从服务商网站发起
102
+ * @param callbackUrl 授权后的回调地址
103
+ * @param pre_auth_code 预授权码,不传则系统自动调用 createPreAuthorizationCode 获取
104
+ * @param state
105
+ * @returns
106
+ */
107
+ createPreAuthorizationUrl(callbackUrl: string, pre_auth_code?: string, state?: string): Promise<string>;
108
+ /**
109
+ * 获取企业永久授权码
110
+ * @see https://developer.work.weixin.qq.com/document/path/90603
111
+ * @param authCode 临时授权码
112
+ * @param suiteAccessToken
113
+ * @returns
114
+ */
115
+ getPermanentCode(authCode: string, suiteAccessToken?: SuiteAccessToken): Promise<import("../Types/global").WeixinResponse>;
99
116
  /**
100
117
  * 获取企业授权令牌
101
118
  * @param corpId
@@ -211,6 +211,49 @@ class Application {
211
211
  }
212
212
  return response;
213
213
  }
214
+ /**
215
+ * 生成授权页地址
216
+ * @see https://developer.work.weixin.qq.com/document/path/90597#从服务商网站发起
217
+ * @param callbackUrl 授权后的回调地址
218
+ * @param pre_auth_code 预授权码,不传则系统自动调用 createPreAuthorizationCode 获取
219
+ * @param state
220
+ * @returns
221
+ */
222
+ async createPreAuthorizationUrl(callbackUrl, pre_auth_code, state) {
223
+ let optional = {
224
+ pre_auth_code,
225
+ state,
226
+ };
227
+ if (!optional['pre_auth_code']) {
228
+ optional.pre_auth_code = (await this.createPreAuthorizationCode()).pre_auth_code;
229
+ }
230
+ let queries = (0, merge_1.default)({
231
+ suite_id: this.getAccount().getSuiteId(),
232
+ redirect_uri: callbackUrl,
233
+ }, optional);
234
+ return `https://open.work.weixin.qq.com/3rdapp/install?${(0, Utils_1.buildQueryString)(queries)}`;
235
+ }
236
+ /**
237
+ * 获取企业永久授权码
238
+ * @see https://developer.work.weixin.qq.com/document/path/90603
239
+ * @param authCode 临时授权码
240
+ * @param suiteAccessToken
241
+ * @returns
242
+ */
243
+ async getPermanentCode(authCode, suiteAccessToken = null) {
244
+ if (!suiteAccessToken)
245
+ suiteAccessToken = this.getSuiteAccessToken();
246
+ let response = (await this.getClient().request('post', '/cgi-bin/service/get_permanent_code', {
247
+ params: {
248
+ auth_code: authCode,
249
+ suite_access_token: await suiteAccessToken.getToken(),
250
+ }
251
+ })).toObject();
252
+ if (!response['permanent_code']) {
253
+ throw new Error('Failed to get permanent_code: ' + JSON.stringify(response));
254
+ }
255
+ return response;
256
+ }
214
257
  /**
215
258
  * 获取企业授权令牌
216
259
  * @param corpId
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import BaseEncryptor from '../Core/Encryptor';
3
2
  declare class Encryptor extends BaseEncryptor {
4
3
  protected corpId: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import BaseEncryptor from '../Core/Encryptor';
3
2
  declare class SuiteEncryptor extends BaseEncryptor {
4
3
  protected suiteId: string;
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import fs from 'fs';
4
2
  import { Method, AxiosRequestConfig, AxiosInstance } from "axios";
5
3
  import HttpClientInterface from "../Core/HttpClient/Contracts/HttpClientInterface";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { PrivateKey } from "../Core/Support/PrivateKey";
3
2
  import { PublicKey } from "../Core/Support/PublicKey";
4
3
  import RSA from "../Core/Support/RSA";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import BaseEncryptor from '../Core/Encryptor';
3
2
  declare class Encryptor extends BaseEncryptor {
4
3
  protected corpId: string;
package/dist/index.js CHANGED
@@ -3,7 +3,27 @@ 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.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;
6
+ 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
+ exports.defineOfficialAccountConfig = defineOfficialAccountConfig;
8
+ exports.defineMiniAppConfig = defineMiniAppConfig;
9
+ exports.definePayConfig = definePayConfig;
10
+ exports.defineOpenPlatformConfig = defineOpenPlatformConfig;
11
+ exports.defineWorkConfig = defineWorkConfig;
12
+ exports.defineOpenWorkConfig = defineOpenWorkConfig;
13
+ exports.defineChannelConfig = defineChannelConfig;
14
+ exports.defineLogHandler = defineLogHandler;
15
+ exports.defineOfficeAccountServerHandler = defineOfficeAccountServerHandler;
16
+ exports.defineMiniAppServerHandler = defineMiniAppServerHandler;
17
+ exports.defineWorkServerHandler = defineWorkServerHandler;
18
+ exports.defineOpenPlatformServerHandler = defineOpenPlatformServerHandler;
19
+ exports.defineOpenWorkServerHandler = defineOpenWorkServerHandler;
20
+ exports.defineChannelServerHandler = defineChannelServerHandler;
21
+ exports.defineHttpClientFailureJudgeClosure = defineHttpClientFailureJudgeClosure;
22
+ exports.definePaymentFailHandler = definePaymentFailHandler;
23
+ exports.definePaymentAlertHandler = definePaymentAlertHandler;
24
+ exports.definePaymentPaidHandler = definePaymentPaidHandler;
25
+ exports.definePaymentRefundedHandler = definePaymentRefundedHandler;
26
+ exports.definePaymentScannedHandler = definePaymentScannedHandler;
7
27
  const Application_1 = __importDefault(require("./OfficialAccount/Application"));
8
28
  exports.OfficialAccount = Application_1.default;
9
29
  const Application_2 = __importDefault(require("./MiniApp/Application"));
@@ -35,7 +55,6 @@ Object.defineProperty(exports, "PrivateKey", { enumerable: true, get: function (
35
55
  function defineOfficialAccountConfig(config) {
36
56
  return config;
37
57
  }
38
- exports.defineOfficialAccountConfig = defineOfficialAccountConfig;
39
58
  /**
40
59
  * 定义小程序配置
41
60
  * @param config
@@ -43,7 +62,6 @@ exports.defineOfficialAccountConfig = defineOfficialAccountConfig;
43
62
  function defineMiniAppConfig(config) {
44
63
  return config;
45
64
  }
46
- exports.defineMiniAppConfig = defineMiniAppConfig;
47
65
  /**
48
66
  * 定义支付配置
49
67
  * @param config
@@ -51,7 +69,6 @@ exports.defineMiniAppConfig = defineMiniAppConfig;
51
69
  function definePayConfig(config) {
52
70
  return config;
53
71
  }
54
- exports.definePayConfig = definePayConfig;
55
72
  /**
56
73
  * 定义开放平台配置
57
74
  * @param config
@@ -59,7 +76,6 @@ exports.definePayConfig = definePayConfig;
59
76
  function defineOpenPlatformConfig(config) {
60
77
  return config;
61
78
  }
62
- exports.defineOpenPlatformConfig = defineOpenPlatformConfig;
63
79
  /**
64
80
  * 定义企业微信配置
65
81
  * @param config
@@ -67,7 +83,6 @@ exports.defineOpenPlatformConfig = defineOpenPlatformConfig;
67
83
  function defineWorkConfig(config) {
68
84
  return config;
69
85
  }
70
- exports.defineWorkConfig = defineWorkConfig;
71
86
  /**
72
87
  * 定义企业微信开放平台配置
73
88
  * @param config
@@ -75,7 +90,6 @@ exports.defineWorkConfig = defineWorkConfig;
75
90
  function defineOpenWorkConfig(config) {
76
91
  return config;
77
92
  }
78
- exports.defineOpenWorkConfig = defineOpenWorkConfig;
79
93
  /**
80
94
  * 定义视频号配置
81
95
  * @param config
@@ -83,7 +97,6 @@ exports.defineOpenWorkConfig = defineOpenWorkConfig;
83
97
  function defineChannelConfig(config) {
84
98
  return config;
85
99
  }
86
- exports.defineChannelConfig = defineChannelConfig;
87
100
  /**
88
101
  * 定义日志处理函数
89
102
  * @param func
@@ -91,7 +104,6 @@ exports.defineChannelConfig = defineChannelConfig;
91
104
  function defineLogHandler(func) {
92
105
  return func;
93
106
  }
94
- exports.defineLogHandler = defineLogHandler;
95
107
  /**
96
108
  * 定义公众号服务端消息处理函数
97
109
  * @param func
@@ -99,7 +111,6 @@ exports.defineLogHandler = defineLogHandler;
99
111
  function defineOfficeAccountServerHandler(func) {
100
112
  return func;
101
113
  }
102
- exports.defineOfficeAccountServerHandler = defineOfficeAccountServerHandler;
103
114
  /**
104
115
  * 定义小程序服务端消息处理函数
105
116
  * @param func
@@ -107,7 +118,6 @@ exports.defineOfficeAccountServerHandler = defineOfficeAccountServerHandler;
107
118
  function defineMiniAppServerHandler(func) {
108
119
  return func;
109
120
  }
110
- exports.defineMiniAppServerHandler = defineMiniAppServerHandler;
111
121
  /**
112
122
  * 定义企业微信服务端消息处理函数
113
123
  * @param func
@@ -115,7 +125,6 @@ exports.defineMiniAppServerHandler = defineMiniAppServerHandler;
115
125
  function defineWorkServerHandler(func) {
116
126
  return func;
117
127
  }
118
- exports.defineWorkServerHandler = defineWorkServerHandler;
119
128
  /**
120
129
  * 定义开放平台服务端消息处理函数
121
130
  * @param func
@@ -123,7 +132,6 @@ exports.defineWorkServerHandler = defineWorkServerHandler;
123
132
  function defineOpenPlatformServerHandler(func) {
124
133
  return func;
125
134
  }
126
- exports.defineOpenPlatformServerHandler = defineOpenPlatformServerHandler;
127
135
  /**
128
136
  * 定义企业微信开放平台服务端消息处理函数
129
137
  * @param func
@@ -131,7 +139,6 @@ exports.defineOpenPlatformServerHandler = defineOpenPlatformServerHandler;
131
139
  function defineOpenWorkServerHandler(func) {
132
140
  return func;
133
141
  }
134
- exports.defineOpenWorkServerHandler = defineOpenWorkServerHandler;
135
142
  /**
136
143
  * 定义视频号服务端消息处理函数
137
144
  * @param func
@@ -139,7 +146,6 @@ exports.defineOpenWorkServerHandler = defineOpenWorkServerHandler;
139
146
  function defineChannelServerHandler(func) {
140
147
  return func;
141
148
  }
142
- exports.defineChannelServerHandler = defineChannelServerHandler;
143
149
  /**
144
150
  * 定义HttpClient错误判定回调
145
151
  * @param func
@@ -147,7 +153,6 @@ exports.defineChannelServerHandler = defineChannelServerHandler;
147
153
  function defineHttpClientFailureJudgeClosure(func) {
148
154
  return func;
149
155
  }
150
- exports.defineHttpClientFailureJudgeClosure = defineHttpClientFailureJudgeClosure;
151
156
  /**
152
157
  * 定义支付通知错误处理函数
153
158
  * @param func
@@ -155,7 +160,6 @@ exports.defineHttpClientFailureJudgeClosure = defineHttpClientFailureJudgeClosur
155
160
  function definePaymentFailHandler(func) {
156
161
  return func;
157
162
  }
158
- exports.definePaymentFailHandler = definePaymentFailHandler;
159
163
  /**
160
164
  * 定义支付业务错误处理函数
161
165
  * @param func
@@ -163,7 +167,6 @@ exports.definePaymentFailHandler = definePaymentFailHandler;
163
167
  function definePaymentAlertHandler(func) {
164
168
  return func;
165
169
  }
166
- exports.definePaymentAlertHandler = definePaymentAlertHandler;
167
170
  /**
168
171
  * 定义支付结果处理回调函数
169
172
  * @param func
@@ -171,7 +174,6 @@ exports.definePaymentAlertHandler = definePaymentAlertHandler;
171
174
  function definePaymentPaidHandler(func) {
172
175
  return func;
173
176
  }
174
- exports.definePaymentPaidHandler = definePaymentPaidHandler;
175
177
  /**
176
178
  * 定义退款结果处理回调函数
177
179
  * @param func
@@ -179,7 +181,6 @@ exports.definePaymentPaidHandler = definePaymentPaidHandler;
179
181
  function definePaymentRefundedHandler(func) {
180
182
  return func;
181
183
  }
182
- exports.definePaymentRefundedHandler = definePaymentRefundedHandler;
183
184
  /**
184
185
  * 定义扫码支付结果处理回调函数
185
186
  * @param func
@@ -187,4 +188,3 @@ exports.definePaymentRefundedHandler = definePaymentRefundedHandler;
187
188
  function definePaymentScannedHandler(func) {
188
189
  return func;
189
190
  }
190
- exports.definePaymentScannedHandler = definePaymentScannedHandler;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-easywechat",
3
- "version": "3.7.3",
3
+ "version": "3.7.5",
4
4
  "description": "EasyWechat SDK for Node.js (NOT OFFICIAL)",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -22,19 +22,19 @@
22
22
  "node": ">=15.6.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@types/node": "^20.11.28",
25
+ "@types/node": "^20.14.15",
26
26
  "axios-mock-adapter": "^1.22.0",
27
27
  "mocha": "^9.2.2",
28
28
  "package-release": "^1.0.3",
29
- "typescript": "^5.4.2"
29
+ "typescript": "^5.5.4"
30
30
  },
31
31
  "dependencies": {
32
- "axios": "^1.6.8",
33
- "axios-retry": "^4.0.0",
32
+ "axios": "^1.7.4",
33
+ "axios-retry": "^4.5.0",
34
34
  "form-data": "^4.0.0",
35
35
  "merge": "^2.1.1",
36
36
  "node-socialite": "^1.4.1",
37
- "qs": "^6.12.0",
37
+ "qs": "^6.13.0",
38
38
  "raw-body": "^2.5.2",
39
39
  "xml2js": "^0.6.2"
40
40
  }