weixin-server-sdk 1.0.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.
Files changed (73) hide show
  1. package/dist/Error.d.ts +5 -0
  2. package/dist/Error.d.ts.map +1 -0
  3. package/dist/Error.js +8 -0
  4. package/dist/Error.js.map +1 -0
  5. package/dist/index.d.ts +34 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +37 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/types/global.d.ts +4 -0
  10. package/dist/types/global.d.ts.map +1 -0
  11. package/dist/types/global.js +2 -0
  12. package/dist/types/global.js.map +1 -0
  13. package/dist/utils/callMaybeAsync.d.ts +3 -0
  14. package/dist/utils/callMaybeAsync.d.ts.map +1 -0
  15. package/dist/utils/callMaybeAsync.js +11 -0
  16. package/dist/utils/callMaybeAsync.js.map +1 -0
  17. package/dist/utils/isPromise.d.ts +7 -0
  18. package/dist/utils/isPromise.d.ts.map +1 -0
  19. package/dist/utils/isPromise.js +9 -0
  20. package/dist/utils/isPromise.js.map +1 -0
  21. package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.d.ts +37 -0
  22. package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.d.ts.map +1 -0
  23. package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.js +104 -0
  24. package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.js.map +1 -0
  25. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.d.ts +17 -0
  26. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.d.ts.map +1 -0
  27. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.js +36 -0
  28. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.js.map +1 -0
  29. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.d.ts +11 -0
  30. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.d.ts.map +1 -0
  31. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.js +26 -0
  32. package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.js.map +1 -0
  33. package/dist//345/260/217/347/250/213/345/272/217/WXMP.d.ts +11 -0
  34. package/dist//345/260/217/347/250/213/345/272/217/WXMP.d.ts.map +1 -0
  35. package/dist//345/260/217/347/250/213/345/272/217/WXMP.js +14 -0
  36. package/dist//345/260/217/347/250/213/345/272/217/WXMP.js.map +1 -0
  37. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.d.ts +17 -0
  38. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.d.ts.map +1 -0
  39. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.js +30 -0
  40. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.js.map +1 -0
  41. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.d.ts +51 -0
  42. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.d.ts.map +1 -0
  43. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.js +86 -0
  44. package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.js.map +1 -0
  45. package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.d.ts +22 -0
  46. package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.d.ts.map +1 -0
  47. package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.js +31 -0
  48. package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.js.map +1 -0
  49. package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.d.ts +2 -0
  50. package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.d.ts.map +1 -0
  51. package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.js +4 -0
  52. package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.js.map +1 -0
  53. package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.d.ts +2 -0
  54. package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.d.ts.map +1 -0
  55. package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.js +2 -0
  56. package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.js.map +1 -0
  57. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.d.ts +120 -0
  58. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.d.ts.map +1 -0
  59. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.js +87 -0
  60. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.js.map +1 -0
  61. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.d.ts +11 -0
  62. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.d.ts.map +1 -0
  63. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.js +13 -0
  64. package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.js.map +1 -0
  65. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.d.ts +382 -0
  66. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.d.ts.map +1 -0
  67. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.js +343 -0
  68. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.js.map +1 -0
  69. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.d.ts +82 -0
  70. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.d.ts.map +1 -0
  71. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.js +132 -0
  72. package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.js.map +1 -0
  73. package/package.json +28 -0
@@ -0,0 +1,5 @@
1
+ declare class WeixinSDKErr extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export { WeixinSDKErr };
5
+ //# sourceMappingURL=Error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Error.d.ts","sourceRoot":"","sources":["../src/Error.ts"],"names":[],"mappings":"AAAA,cAAM,YAAa,SAAQ,KAAK;gBAClB,OAAO,EAAE,MAAM;CAK5B;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/Error.js ADDED
@@ -0,0 +1,8 @@
1
+ class WeixinSDKErr extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "weixinSDKErr";
5
+ }
6
+ }
7
+ export { WeixinSDKErr };
8
+ //# sourceMappingURL=Error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Error.js","sourceRoot":"","sources":["../src/Error.ts"],"names":[],"mappings":"AAAA,MAAM,YAAa,SAAQ,KAAK;IAC9B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CAEF;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import PublicUtils from './公共方法/PublicUtils.js';
2
+ import Pay from './微信支付/Pay.js';
3
+ import WXMP from './小程序/WXMP.js';
4
+ export interface WeixinSDKConfig {
5
+ WXMP_APPID: string;
6
+ WXMP_APPSECRET: string;
7
+ WXPAY_MCHID: string;
8
+ WXPAY_mchApiCert_serialNo: string;
9
+ WXPAY_mchApiCert_privateKeyPem: string;
10
+ WXPAY_publicKeyID: string;
11
+ WXPAY_publicKeyPem: string;
12
+ WXPAY_APIV3_privateKey: string;
13
+ }
14
+ type getConfigFunc = (() => WeixinSDKConfig) | (() => Promise<WeixinSDKConfig>);
15
+ export declare class WeixinSDK {
16
+ config: WeixinSDKConfig;
17
+ getConfigFunc: getConfigFunc;
18
+ publicUtils: PublicUtils;
19
+ wxmp: WXMP;
20
+ pay: Pay;
21
+ constructor(config: WeixinSDKConfig, func: getConfigFunc);
22
+ /**
23
+ * 创建实例
24
+ * @param func 获取配置的函数,可以是同步或异步函数
25
+ * @returns WeixinSDK实例
26
+ */
27
+ static create(func: getConfigFunc): Promise<WeixinSDK>;
28
+ /**
29
+ * 刷新配置
30
+ */
31
+ refreshConfig(): Promise<void>;
32
+ }
33
+ export default WeixinSDK;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,IAAI,MAAM,eAAe,CAAC;AAKjC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB,EAAE,MAAM,CAAC;IAClC,8BAA8B,EAAE,MAAM,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,KAAK,aAAa,GAAG,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAE/E,qBAAa,SAAS;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,GAAG,CAAC;gBACJ,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa;IASxD;;;;OAIG;WACU,MAAM,CAAC,IAAI,EAAE,aAAa;IAKvC;;OAEG;IACG,aAAa;CAMpB;AAcD,eAAe,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ import PublicUtils from './公共方法/PublicUtils.js';
2
+ import Pay from './微信支付/Pay.js';
3
+ import WXMP from './小程序/WXMP.js';
4
+ import isPromise from './utils/isPromise.js';
5
+ import { callMaybeAsync } from './utils/callMaybeAsync.js';
6
+ export class WeixinSDK {
7
+ config;
8
+ getConfigFunc;
9
+ publicUtils;
10
+ wxmp;
11
+ pay;
12
+ constructor(config, func) {
13
+ this.config = config;
14
+ this.getConfigFunc = func;
15
+ this.publicUtils = new PublicUtils(this);
16
+ this.wxmp = new WXMP(this);
17
+ this.pay = new Pay(this);
18
+ }
19
+ /**
20
+ * 创建实例
21
+ * @param func 获取配置的函数,可以是同步或异步函数
22
+ * @returns WeixinSDK实例
23
+ */
24
+ static async create(func) {
25
+ let config = await callMaybeAsync(func);
26
+ return new WeixinSDK(config, func);
27
+ }
28
+ /**
29
+ * 刷新配置
30
+ */
31
+ async refreshConfig() {
32
+ this.config = await callMaybeAsync(this.getConfigFunc);
33
+ }
34
+ }
35
+ // 默认导出(可选)
36
+ export default WeixinSDK;
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAgB3D,MAAM,OAAO,SAAS;IACb,MAAM,CAAkB;IACxB,aAAa,CAAgB;IAC7B,WAAW,CAAc;IACzB,IAAI,CAAO;IACX,GAAG,CAAM;IAChB,YAAY,MAAuB,EAAE,IAAmB;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAE3B,CAAC;IACD;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAmB;QACrC,IAAI,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;CAIF;AAaD,WAAW;AACX,eAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type cent = number;
2
+ export type RFC3339DateStr = string;
3
+ export type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
4
+ //# sourceMappingURL=global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../src/types/global.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAC1B,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../src/types/global.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { UnwrapPromise } from "../types/global.js";
2
+ export declare function callMaybeAsync<F extends () => any>(fn: F): Promise<UnwrapPromise<ReturnType<F>>>;
3
+ //# sourceMappingURL=callMaybeAsync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callMaybeAsync.d.ts","sourceRoot":"","sources":["../../src/utils/callMaybeAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAStG"}
@@ -0,0 +1,11 @@
1
+ import isPromise from "./isPromise.js";
2
+ // 统一处理:无论同步/异步,都返回 Promise<Result>
3
+ export async function callMaybeAsync(fn) {
4
+ const result = fn();
5
+ // 运行时判断是否是 Promise(注意:不能只靠 instanceof)
6
+ if (result != null && typeof result === 'object' && typeof result.then === 'function') {
7
+ return await result;
8
+ }
9
+ return result;
10
+ }
11
+ //# sourceMappingURL=callMaybeAsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callMaybeAsync.js","sourceRoot":"","sources":["../../src/utils/callMaybeAsync.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAIvC,mCAAmC;AACnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAsB,EAAK;IAC3D,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;IAEpB,uCAAuC;IACvC,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACpF,OAAO,MAAM,MAAM,CAAC;IACxB,CAAC;IAED,OAAO,MAAsC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * //判断参数是否为 Promise 对象
3
+ * @param value
4
+ * @returns boolean
5
+ */
6
+ export default function isPromise<T>(value: any): value is Promise<T>;
7
+ //# sourceMappingURL=isPromise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPromise.d.ts","sourceRoot":"","sources":["../../src/utils/isPromise.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAEpE"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * //判断参数是否为 Promise 对象
3
+ * @param value
4
+ * @returns boolean
5
+ */
6
+ export default function isPromise(value) {
7
+ return value != null && typeof value.then === 'function';
8
+ }
9
+ //# sourceMappingURL=isPromise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../../src/utils/isPromise.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAI,KAAU;IAC7C,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { IncomingHttpHeaders } from "http";
2
+ import type WeixinSDK from "../index.js";
3
+ import CallCredential from "./接口调用凭证.js";
4
+ import Authorization from "./签名认证.js";
5
+ export default class PublicUtils {
6
+ callCredential: CallCredential;
7
+ authorization: Authorization;
8
+ weixinSDK: WeixinSDK;
9
+ constructor(weixinSDK: WeixinSDK);
10
+ /**
11
+ * 使用微信支付公钥对敏感信息进行 RSA-OAEP 加密(SHA-1)
12
+ * @param plaintext 明文(如手机号、银行卡号等)
13
+ * @param wechatPayPublicKeyPem 微信支付公钥(PEM 格式字符串,以 -----BEGIN PUBLIC KEY----- 开头)
14
+ * @returns Base64 编码的密文
15
+ */
16
+ encryptSensitiveInfo(plaintext: string): string;
17
+ /**
18
+ * 验证微信签名
19
+ * @param rawBody //原始请求体
20
+ * @param header 请求的header
21
+ * @returns 是否验证成功
22
+ */
23
+ verifySignature(rawBody: string, header: IncomingHttpHeaders): Promise<boolean>;
24
+ /**
25
+ * 解密微信支付通知资源
26
+ * @param resource
27
+ * @returns
28
+ */
29
+ decryptNotifyResource(resource: {
30
+ algorithm: string;
31
+ ciphertext: string;
32
+ associated_data?: string;
33
+ original_type: string;
34
+ nonce: string;
35
+ }): Promise<any>;
36
+ }
37
+ //# sourceMappingURL=PublicUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicUtils.d.ts","sourceRoot":"","sources":["../../src/公共方法/PublicUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,cAAc,MAAM,aAAa,CAAC;AACzC,OAAO,aAAa,MAAM,WAAW,CAAC;AAKtC,MAAM,CAAC,OAAO,OAAO,WAAW;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IACpC,SAAS,EAAE,SAAS,CAAA;gBACR,SAAS,EAAE,SAAS;IAMhC;;;;;KAKC;IACD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkB/C;;;;;MAKE;IACI,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB;IAgBlE;;;;OAIG;IACG,qBAAqB,CAAC,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAyDhJ"}
@@ -0,0 +1,104 @@
1
+ import CallCredential from "./接口调用凭证.js";
2
+ import Authorization from "./签名认证.js";
3
+ import * as crypto from 'crypto';
4
+ import { WeixinSDKErr } from "../Error.js";
5
+ export default class PublicUtils {
6
+ callCredential;
7
+ authorization;
8
+ weixinSDK;
9
+ constructor(weixinSDK) {
10
+ this.weixinSDK = weixinSDK;
11
+ this.callCredential = new CallCredential(weixinSDK);
12
+ this.authorization = new Authorization(weixinSDK);
13
+ }
14
+ /**
15
+ * 使用微信支付公钥对敏感信息进行 RSA-OAEP 加密(SHA-1)
16
+ * @param plaintext 明文(如手机号、银行卡号等)
17
+ * @param wechatPayPublicKeyPem 微信支付公钥(PEM 格式字符串,以 -----BEGIN PUBLIC KEY----- 开头)
18
+ * @returns Base64 编码的密文
19
+ */
20
+ encryptSensitiveInfo(plaintext) {
21
+ // 1. 将明文转为 Buffer(UTF-8)
22
+ const data = Buffer.from(plaintext, 'utf8');
23
+ // 2. 使用 RSA-OAEP 加密(必须指定 padding 和 hash)
24
+ const encrypted = crypto.publicEncrypt({
25
+ key: this.weixinSDK.config.WXPAY_publicKeyPem,
26
+ padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
27
+ oaepHash: 'sha1', // 微信要求 SHA-1
28
+ }, data);
29
+ // 3. 转为 Base64 字符串
30
+ return encrypted.toString('base64');
31
+ }
32
+ /**
33
+ * 验证微信签名
34
+ * @param rawBody //原始请求体
35
+ * @param header 请求的header
36
+ * @returns 是否验证成功
37
+ */
38
+ async verifySignature(rawBody, header) {
39
+ //验证并解密 IncomingHttpHeaders
40
+ let wechatpay_timeStamp = header["wechatpay-timestamp"];
41
+ let wechatpay_nonce = header["wechatpay-nonce"];
42
+ let wechatpay_signature = header["wechatpay-signature"];
43
+ const verify = crypto.createVerify('RSA-SHA256');
44
+ let sign_str = wechatpay_timeStamp + "\n" + wechatpay_nonce + "\n" + rawBody + "\n";
45
+ verify.update(sign_str);
46
+ //得到是否验证成功
47
+ const signatureBuffer = Buffer.from(wechatpay_signature, 'base64');
48
+ return verify.verify(this.weixinSDK.config.WXPAY_publicKeyPem, signatureBuffer);
49
+ }
50
+ /**
51
+ * 解密微信支付通知资源
52
+ * @param resource
53
+ * @returns
54
+ */
55
+ async decryptNotifyResource(resource) {
56
+ const { ciphertext, associated_data, nonce, algorithm } = resource;
57
+ // 1. 验证算法 (目前微信只支持 AEAD_AES_256_GCM)
58
+ if (algorithm !== 'AEAD_AES_256_GCM') {
59
+ throw new WeixinSDKErr(`decryptNotifyResource: 不支持的加密算法: ${algorithm}`);
60
+ }
61
+ // 2. 将 Base64 密文解码为 Buffer
62
+ const ciphertextBuffer = Buffer.from(ciphertext, 'base64');
63
+ // 3. GCM 模式下,认证标签 (authTag) 是密文末尾的 16 字节
64
+ const GCM_AUTH_TAG_LENGTH = 16;
65
+ if (ciphertextBuffer.length < GCM_AUTH_TAG_LENGTH) {
66
+ throw new WeixinSDKErr('decryptNotifyResource: 密文长度不足,无法提取认证标签');
67
+ }
68
+ // 从密文末尾截取最后 16 字节作为 authTag
69
+ const authTag = ciphertextBuffer.subarray(-GCM_AUTH_TAG_LENGTH);
70
+ // 剩余部分是实际的加密数据
71
+ const encryptedData = ciphertextBuffer.subarray(0, -GCM_AUTH_TAG_LENGTH);
72
+ // 4. 创建解密器
73
+ // 注意: key 是 APIv3 密钥,必须是 32 字节 (256位)
74
+ const key = Buffer.from(this.weixinSDK.config.WXPAY_APIV3_privateKey, 'ascii');
75
+ if (key.length !== 32) {
76
+ throw new WeixinSDKErr('decryptNotifyResource: APIv3密钥长度必须为32字节');
77
+ }
78
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, Buffer.from(nonce, 'utf8'));
79
+ // 5. 设置附加认证数据 (AAD) 和 认证标签 (authTag)
80
+ // ⚠️ 必须在 update/final 之前设置
81
+ decipher.setAuthTag(authTag);
82
+ const aad = associated_data ?? ''; // 或 (associated_data || '')
83
+ decipher.setAAD(Buffer.from(aad, 'utf8'));
84
+ try {
85
+ // 6. 执行解密
86
+ let decrypted = decipher.update(encryptedData).toString('utf-8');
87
+ decrypted += decipher.final('utf8'); // 如果这里报错,就是认证失败
88
+ // 7. 尝试解析为 JSON (微信通知通常是 JSON)
89
+ try {
90
+ return JSON.parse(decrypted);
91
+ }
92
+ catch (jsonError) {
93
+ // 如果不是 JSON,返回原始字符串
94
+ throw new WeixinSDKErr(`decryptNotifyResource: JSON解析失败,err: ${jsonError}`);
95
+ }
96
+ }
97
+ catch (err) {
98
+ // 常见错误: Unsupported state or unable to authenticate data
99
+ // 原因: 密钥/nonce/associated_data 不匹配,或密文被篡改
100
+ throw new WeixinSDKErr(`decryptNotifyResource: 解密失败,err: ${err}`);
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=PublicUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicUtils.js","sourceRoot":"","sources":["../../src/公共方法/PublicUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type WeixinSDK from "../index.js";
2
+ export default class CallCredential {
3
+ weixinSDK: WeixinSDK;
4
+ constructor(weixinSDK: WeixinSDK);
5
+ /**
6
+ * 获取稳定版调用凭据
7
+ * @param force_refresh //是否强制刷新 默认为false
8
+ * @returns
9
+ */
10
+ getStableAccessToken(force_refresh?: boolean): Promise<{
11
+ access_token: string;
12
+ expires_in: number;
13
+ errcode: number;
14
+ errmsg: string;
15
+ }>;
16
+ }
17
+ //# sourceMappingURL=%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E5%87%AD%E8%AF%81.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"接口调用凭证.d.ts","sourceRoot":"","sources":["../../src/公共方法/接口调用凭证.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,SAAS,EAAE,SAAS,CAAA;gBACR,SAAS,EAAE,SAAS;IAIhC;;;;IAIA;IACa,oBAAoB,CAAC,aAAa,GAAE,OAAe;sBAiB1C,MAAM;oBACR,MAAM;iBACT,MAAM;gBACP,MAAM;;CAWzB"}
@@ -0,0 +1,36 @@
1
+ import { WeixinSDKErr } from "../Error.js";
2
+ export default class CallCredential {
3
+ weixinSDK;
4
+ constructor(weixinSDK) {
5
+ this.weixinSDK = weixinSDK;
6
+ }
7
+ /**
8
+ * 获取稳定版调用凭据
9
+ * @param force_refresh //是否强制刷新 默认为false
10
+ * @returns
11
+ */
12
+ async getStableAccessToken(force_refresh = false) {
13
+ let body = {
14
+ grant_type: 'client_credential',
15
+ appid: this.weixinSDK.config.WXMP_APPID,
16
+ secret: this.weixinSDK.config.WXMP_APPSECRET,
17
+ force_refresh: force_refresh
18
+ };
19
+ const url = `https://api.weixin.qq.com/cgi-bin/stable_token`;
20
+ const response = await fetch(url, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json'
24
+ },
25
+ body: JSON.stringify(body)
26
+ });
27
+ const data = await response.json();
28
+ if (data.errcode === 0) {
29
+ return data;
30
+ }
31
+ else {
32
+ throw new WeixinSDKErr(`code:${data.errcode},msg:${data.errmsg}`);
33
+ }
34
+ }
35
+ }
36
+ //# sourceMappingURL=%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E5%87%AD%E8%AF%81.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"接口调用凭证.js","sourceRoot":"","sources":["../../src/公共方法/接口调用凭证.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,SAAS,CAAW;IACpB,YAAY,SAAoB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;IAIA;IACO,KAAK,CAAC,oBAAoB,CAAC,gBAAyB,KAAK;QAC5D,IAAI,IAAI,GAAG;YACP,UAAU,EAAE,mBAAmB;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YACvC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc;YAC5C,aAAa,EAAE,aAAa;SAC/B,CAAA;QACD,MAAM,GAAG,GAAG,gDAAgD,CAAA;QAC5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC7B,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAK/B,CAAC;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,YAAY,CAAC,QAAQ,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;IAEL,CAAC;CAGJ"}
@@ -0,0 +1,11 @@
1
+ import type WeixinSDK from "../index.js";
2
+ export default class Authorization {
3
+ weixinSDK: WeixinSDK;
4
+ constructor(weixinSDK: WeixinSDK);
5
+ createAuthorization(options: {
6
+ method: string;
7
+ path: string;
8
+ body?: string;
9
+ }): string;
10
+ }
11
+ //# sourceMappingURL=%E7%AD%BE%E5%90%8D%E8%AE%A4%E8%AF%81.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"签名认证.d.ts","sourceRoot":"","sources":["../../src/公共方法/签名认证.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAIzC,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,SAAS,EAAE,SAAS,CAAA;gBACR,SAAS,EAAE,SAAS;IAKzB,mBAAmB,CAAC,OAAO,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KAChB;CAsBJ"}
@@ -0,0 +1,26 @@
1
+ import * as crypto from 'crypto';
2
+ export default class Authorization {
3
+ weixinSDK;
4
+ constructor(weixinSDK) {
5
+ this.weixinSDK = weixinSDK;
6
+ }
7
+ //生成authorization
8
+ createAuthorization(options) {
9
+ const { method, path, body } = options;
10
+ //当前时间的秒数
11
+ let currentSecond = Date.now() / 1000;
12
+ //随机不大于32个的字符串
13
+ const nonce_str = crypto.randomBytes(16).toString('hex');
14
+ let signText = method + '\n' + path + '\n' + currentSecond + '\n' + nonce_str + '\n';
15
+ if (body != null) {
16
+ signText = signText + body + '\n';
17
+ }
18
+ else {
19
+ signText = signText + '\n';
20
+ }
21
+ const sign = crypto.createSign('RSA-SHA256').update(signText).sign(this.weixinSDK.config.WXPAY_mchApiCert_privateKeyPem, 'base64');
22
+ let authorization = `WECHATPAY2-SHA256-RSA2048 mchid="${this.weixinSDK.config.WXPAY_MCHID}",nonce_str="${nonce_str}",serial_no="${this.weixinSDK.config.WXPAY_mchApiCert_serialNo}",timestamp="${currentSecond}",signature="${sign}"`;
23
+ return authorization;
24
+ }
25
+ }
26
+ //# sourceMappingURL=%E7%AD%BE%E5%90%8D%E8%AE%A4%E8%AF%81.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"签名认证.js","sourceRoot":"","sources":["../../src/公共方法/签名认证.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGjC,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,SAAS,CAAW;IACpB,YAAY,SAAoB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,iBAAiB;IACV,mBAAmB,CAAC,OAI1B;QAEG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACvC,SAAS;QACT,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QACrC,cAAc;QACd,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEzD,IAAI,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;QACrF,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACf,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;QACrC,CAAC;aAAM,CAAC;YACJ,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAA;QAC9B,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QAEnI,IAAI,aAAa,GAAG,oCAAoC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,gBAAgB,SAAS,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,yBAAyB,gBAAgB,aAAa,gBAAgB,IAAI,GAAG,CAAA;QACrO,OAAO,aAAa,CAAC;IAEzB,CAAC;CAEJ"}
@@ -0,0 +1,11 @@
1
+ import type WeixinSDK from "../index.js";
2
+ import WXMP_login from "./小程序登录.js";
3
+ import WXMP_QRCodeAndURL from "./小程序码与小程序链接.js";
4
+ import PhoneNumber from "./手机号.js";
5
+ export default class WXMP {
6
+ WXMP_login: WXMP_login;
7
+ phoneNumber: PhoneNumber;
8
+ WXMP_QRCodeAndURL: WXMP_QRCodeAndURL;
9
+ constructor(weixinSDK: WeixinSDK);
10
+ }
11
+ //# sourceMappingURL=WXMP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WXMP.d.ts","sourceRoot":"","sources":["../../src/小程序/WXMP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,iBAAiB,MAAM,iBAAiB,CAAC;AAChD,OAAO,WAAW,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,IAAI;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,iBAAiB,EAAE,iBAAiB,CAAA;gBAC/B,SAAS,EAAE,SAAS;CAOjC"}
@@ -0,0 +1,14 @@
1
+ import WXMP_login from "./小程序登录.js";
2
+ import WXMP_QRCodeAndURL from "./小程序码与小程序链接.js";
3
+ import PhoneNumber from "./手机号.js";
4
+ export default class WXMP {
5
+ WXMP_login;
6
+ phoneNumber;
7
+ WXMP_QRCodeAndURL;
8
+ constructor(weixinSDK) {
9
+ this.WXMP_login = new WXMP_login(weixinSDK);
10
+ this.phoneNumber = new PhoneNumber(weixinSDK);
11
+ this.WXMP_QRCodeAndURL = new WXMP_QRCodeAndURL(weixinSDK);
12
+ }
13
+ }
14
+ //# sourceMappingURL=WXMP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WXMP.js","sourceRoot":"","sources":["../../src/小程序/WXMP.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,iBAAiB,MAAM,iBAAiB,CAAC;AAChD,OAAO,WAAW,MAAM,UAAU,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,IAAI;IAChB,UAAU,CAAY;IACtB,WAAW,CAAa;IACxB,iBAAiB,CAAmB;IAC3C,YAAY,SAAoB;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CAGF"}
@@ -0,0 +1,17 @@
1
+ import type WeixinSDK from "../index.js";
2
+ export default class WXMP_login {
3
+ weixinSDK: WeixinSDK;
4
+ constructor(weixinSDK: WeixinSDK);
5
+ /**
6
+ * 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程
7
+ * @param js_code 登录时获取的 code
8
+ */
9
+ code2Session(js_code: string): Promise<{
10
+ session_key: string;
11
+ unionid?: string;
12
+ openid: string;
13
+ errcode: number;
14
+ errmsg: string;
15
+ }>;
16
+ }
17
+ //# sourceMappingURL=%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"小程序登录.d.ts","sourceRoot":"","sources":["../../src/小程序/小程序登录.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,SAAS,EAAE,SAAS,CAAC;gBACT,SAAS,EAAC,SAAS;IAG/B;;;OAGG;IACU,YAAY,CAAC,OAAO,EAAE,MAAM;qBAUpB,MAAM;kBACT,MAAM;gBACR,MAAM;iBACL,MAAM;gBACP,MAAM;;CAczB"}
@@ -0,0 +1,30 @@
1
+ //小程序登录 api
2
+ import { WeixinSDKErr } from "../Error.js";
3
+ export default class WXMP_login {
4
+ weixinSDK;
5
+ constructor(weixinSDK) {
6
+ this.weixinSDK = weixinSDK;
7
+ }
8
+ /**
9
+ * 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程
10
+ * @param js_code 登录时获取的 code
11
+ */
12
+ async code2Session(js_code) {
13
+ let params = {
14
+ appid: this.weixinSDK.config.WXMP_APPID,
15
+ secret: this.weixinSDK.config.WXMP_APPSECRET,
16
+ js_code,
17
+ grant_type: "authorization_code"
18
+ };
19
+ const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${params.appid}&secret=${params.secret}&js_code=${params.js_code}&grant_type=${params.grant_type}`;
20
+ const response = await fetch(url);
21
+ let data = await response.json();
22
+ if (data.errcode === 0) {
23
+ return data;
24
+ }
25
+ else {
26
+ throw new WeixinSDKErr(`code:${data.errcode},msg:${data.errmsg}`);
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"小程序登录.js","sourceRoot":"","sources":["../../src/小程序/小程序登录.ts"],"names":[],"mappings":"AAAA,WAAW;AAEX,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,SAAS,CAAY;IACrB,YAAY,SAAmB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IACD;;;OAGG;IACI,KAAK,CAAC,YAAY,CAAC,OAAe;QACrC,IAAI,MAAM,GAAG;YACT,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU;YACvC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc;YAC5C,OAAO;YACP,UAAU,EAAE,oBAAoB;SACnC,CAAA;QACD,MAAM,GAAG,GAAG,sDAAsD,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,eAAe,MAAM,CAAC,UAAU,EAAE,CAAA;QAClK,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAM7B,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,YAAY,CAAC,QAAQ,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;IAEL,CAAC;CAKJ"}
@@ -0,0 +1,51 @@
1
+ import type { WeixinSDK } from "../index.js";
2
+ export default class WXMP_QRCodeAndURL {
3
+ weixinSDK: WeixinSDK;
4
+ constructor(weixinSDK: WeixinSDK);
5
+ /**
6
+ * 获取小程序码(永久有效, 数量限制)
7
+ * @param options
8
+ * @returns
9
+ */
10
+ getQRCode(options: {
11
+ path: string;
12
+ width?: number;
13
+ auto_color?: boolean;
14
+ line_color?: {
15
+ r: number;
16
+ g: number;
17
+ b: number;
18
+ };
19
+ is_hyaline?: boolean;
20
+ env_version?: string;
21
+ }): Promise<ArrayBuffer>;
22
+ /**
23
+ * 获取小程序码(永久有效, 数量不限制)
24
+ * @param options
25
+ * @returns
26
+ */
27
+ getUnlimitedQRCode(options: {
28
+ scene: string;
29
+ page?: string;
30
+ check_path?: boolean;
31
+ env_version?: string;
32
+ width?: number;
33
+ auto_color?: boolean;
34
+ line_color?: {
35
+ r: number;
36
+ g: number;
37
+ b: number;
38
+ };
39
+ is_hyaline?: boolean;
40
+ }): Promise<ArrayBuffer>;
41
+ /**
42
+ * 获取小程序二维码(永久有效, 数量限制)
43
+ * @param options
44
+ * @returns
45
+ */
46
+ createQRCode(options: {
47
+ path: string;
48
+ width?: number;
49
+ }): Promise<ArrayBuffer>;
50
+ }
51
+ //# sourceMappingURL=%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%A0%81%E4%B8%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F%E9%93%BE%E6%8E%A5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"小程序码与小程序链接.d.ts","sourceRoot":"","sources":["../../src/小程序/小程序码与小程序链接.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,SAAS,EAAE,SAAS,CAAC;gBACT,SAAS,EAAE,SAAS;IAIhC;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB;IA4BD;;;;OAIG;IACG,kBAAkB,CAAC,OAAO,EAAE;QAC9B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,UAAU,CAAC,EAAE,OAAO,CAAA;KACvB;IA4BD;;;;MAIE;IACI,YAAY,CAAC,OAAO,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB;CA6BJ"}