@vobs/payment 0.3.0 → 1.2.0

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 (178) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +182 -0
  3. package/dist/alipay/client.cjs +112 -0
  4. package/dist/alipay/client.cjs.map +1 -0
  5. package/dist/alipay/client.d.cts +36 -0
  6. package/dist/alipay/client.d.ts +36 -0
  7. package/dist/alipay/client.js +110 -0
  8. package/dist/alipay/client.js.map +1 -0
  9. package/dist/alipay/config.cjs +67 -0
  10. package/dist/alipay/config.cjs.map +1 -0
  11. package/dist/alipay/config.d.cts +30 -0
  12. package/dist/alipay/config.d.ts +30 -0
  13. package/dist/alipay/config.js +65 -0
  14. package/dist/alipay/config.js.map +1 -0
  15. package/dist/alipay/index.cjs +592 -0
  16. package/dist/alipay/index.cjs.map +1 -0
  17. package/dist/alipay/index.d.cts +12 -0
  18. package/dist/alipay/index.d.ts +12 -0
  19. package/dist/alipay/index.js +580 -0
  20. package/dist/alipay/index.js.map +1 -0
  21. package/dist/alipay/notify.cjs +70 -0
  22. package/dist/alipay/notify.cjs.map +1 -0
  23. package/dist/alipay/notify.d.cts +52 -0
  24. package/dist/alipay/notify.d.ts +52 -0
  25. package/dist/alipay/notify.js +68 -0
  26. package/dist/alipay/notify.js.map +1 -0
  27. package/dist/alipay/payment.cjs +49 -0
  28. package/dist/alipay/payment.cjs.map +1 -0
  29. package/dist/alipay/payment.d.cts +24 -0
  30. package/dist/alipay/payment.d.ts +24 -0
  31. package/dist/alipay/payment.js +47 -0
  32. package/dist/alipay/payment.js.map +1 -0
  33. package/dist/alipay/plugin.cjs +300 -0
  34. package/dist/alipay/plugin.cjs.map +1 -0
  35. package/dist/alipay/plugin.d.cts +43 -0
  36. package/dist/alipay/plugin.d.ts +43 -0
  37. package/dist/alipay/plugin.js +296 -0
  38. package/dist/alipay/plugin.js.map +1 -0
  39. package/dist/alipay/query.cjs +80 -0
  40. package/dist/alipay/query.cjs.map +1 -0
  41. package/dist/alipay/query.d.cts +26 -0
  42. package/dist/alipay/query.d.ts +26 -0
  43. package/dist/alipay/query.js +78 -0
  44. package/dist/alipay/query.js.map +1 -0
  45. package/dist/alipay/refund.cjs +104 -0
  46. package/dist/alipay/refund.cjs.map +1 -0
  47. package/dist/alipay/refund.d.cts +32 -0
  48. package/dist/alipay/refund.d.ts +32 -0
  49. package/dist/alipay/refund.js +102 -0
  50. package/dist/alipay/refund.js.map +1 -0
  51. package/dist/alipay/response.cjs +38 -0
  52. package/dist/alipay/response.cjs.map +1 -0
  53. package/dist/alipay/response.d.cts +19 -0
  54. package/dist/alipay/response.d.ts +19 -0
  55. package/dist/alipay/response.js +35 -0
  56. package/dist/alipay/response.js.map +1 -0
  57. package/dist/alipay/types.cjs +4 -0
  58. package/dist/alipay/types.cjs.map +1 -0
  59. package/dist/alipay/types.d.cts +242 -0
  60. package/dist/alipay/types.d.ts +242 -0
  61. package/dist/alipay/types.js +3 -0
  62. package/dist/alipay/types.js.map +1 -0
  63. package/dist/alipay/wap.cjs +50 -0
  64. package/dist/alipay/wap.cjs.map +1 -0
  65. package/dist/alipay/wap.d.cts +24 -0
  66. package/dist/alipay/wap.d.ts +24 -0
  67. package/dist/alipay/wap.js +48 -0
  68. package/dist/alipay/wap.js.map +1 -0
  69. package/dist/index-B1aUR7Vt.d.ts +49 -0
  70. package/dist/index-B8pzZxGq.d.cts +44 -0
  71. package/dist/index-BWnIrwRi.d.ts +44 -0
  72. package/dist/index-Dyrkl86r.d.cts +49 -0
  73. package/dist/index.cjs +1071 -0
  74. package/dist/index.cjs.map +1 -0
  75. package/dist/index.d.cts +23 -0
  76. package/dist/index.d.ts +23 -37
  77. package/dist/index.js +1052 -37
  78. package/dist/index.js.map +1 -0
  79. package/dist/wechat/client.cjs +119 -0
  80. package/dist/wechat/client.cjs.map +1 -0
  81. package/dist/wechat/client.d.cts +39 -0
  82. package/dist/wechat/client.d.ts +39 -0
  83. package/dist/wechat/client.js +117 -0
  84. package/dist/wechat/client.js.map +1 -0
  85. package/dist/wechat/config.cjs +76 -0
  86. package/dist/wechat/config.cjs.map +1 -0
  87. package/dist/wechat/config.d.cts +29 -0
  88. package/dist/wechat/config.d.ts +29 -0
  89. package/dist/wechat/config.js +74 -0
  90. package/dist/wechat/config.js.map +1 -0
  91. package/dist/wechat/index.cjs +612 -0
  92. package/dist/wechat/index.cjs.map +1 -0
  93. package/dist/wechat/index.d.cts +10 -0
  94. package/dist/wechat/index.d.ts +10 -0
  95. package/dist/wechat/index.js +602 -0
  96. package/dist/wechat/index.js.map +1 -0
  97. package/dist/wechat/notify.cjs +73 -0
  98. package/dist/wechat/notify.cjs.map +1 -0
  99. package/dist/wechat/notify.d.cts +53 -0
  100. package/dist/wechat/notify.d.ts +53 -0
  101. package/dist/wechat/notify.js +71 -0
  102. package/dist/wechat/notify.js.map +1 -0
  103. package/dist/wechat/payment.cjs +186 -0
  104. package/dist/wechat/payment.cjs.map +1 -0
  105. package/dist/wechat/payment.d.cts +50 -0
  106. package/dist/wechat/payment.d.ts +50 -0
  107. package/dist/wechat/payment.js +184 -0
  108. package/dist/wechat/payment.js.map +1 -0
  109. package/dist/wechat/plugin.cjs +305 -0
  110. package/dist/wechat/plugin.cjs.map +1 -0
  111. package/dist/wechat/plugin.d.cts +40 -0
  112. package/dist/wechat/plugin.d.ts +40 -0
  113. package/dist/wechat/plugin.js +301 -0
  114. package/dist/wechat/plugin.js.map +1 -0
  115. package/dist/wechat/refund.cjs +112 -0
  116. package/dist/wechat/refund.cjs.map +1 -0
  117. package/dist/wechat/refund.d.cts +26 -0
  118. package/dist/wechat/refund.d.ts +26 -0
  119. package/dist/wechat/refund.js +110 -0
  120. package/dist/wechat/refund.js.map +1 -0
  121. package/dist/wechat/response.cjs +50 -0
  122. package/dist/wechat/response.cjs.map +1 -0
  123. package/dist/wechat/response.d.cts +20 -0
  124. package/dist/wechat/response.d.ts +20 -0
  125. package/dist/wechat/response.js +46 -0
  126. package/dist/wechat/response.js.map +1 -0
  127. package/dist/wechat/types.cjs +4 -0
  128. package/dist/wechat/types.cjs.map +1 -0
  129. package/dist/wechat/types.d.cts +200 -0
  130. package/dist/wechat/types.d.ts +200 -0
  131. package/dist/wechat/types.js +3 -0
  132. package/dist/wechat/types.js.map +1 -0
  133. package/package.json +37 -28
  134. package/src/alipay/alipay.test.ts +231 -0
  135. package/src/alipay/client.ts +67 -0
  136. package/src/alipay/config.ts +72 -0
  137. package/src/alipay/index.ts +32 -0
  138. package/src/alipay/notify.ts +92 -0
  139. package/src/alipay/payment.ts +60 -0
  140. package/src/alipay/plugin.ts +64 -0
  141. package/src/alipay/query.ts +52 -0
  142. package/src/alipay/refund.ts +85 -0
  143. package/src/alipay/response.ts +40 -0
  144. package/src/alipay/types.ts +271 -0
  145. package/src/alipay/wap.ts +55 -0
  146. package/src/index.ts +78 -0
  147. package/src/wechat/client.ts +68 -0
  148. package/src/wechat/config.ts +81 -0
  149. package/src/wechat/index.ts +30 -0
  150. package/src/wechat/notify.ts +93 -0
  151. package/src/wechat/payment.ts +177 -0
  152. package/src/wechat/plugin.ts +59 -0
  153. package/src/wechat/refund.ts +80 -0
  154. package/src/wechat/response.ts +54 -0
  155. package/src/wechat/types.ts +223 -0
  156. package/src/wechat/wechat.test.ts +393 -0
  157. package/dist/alipay-official.d.ts +0 -34
  158. package/dist/alipay-official.js +0 -206
  159. package/dist/handlers.d.ts +0 -45
  160. package/dist/handlers.js +0 -105
  161. package/dist/jeepay.d.ts +0 -39
  162. package/dist/jeepay.js +0 -206
  163. package/dist/lakala.d.ts +0 -41
  164. package/dist/lakala.js +0 -243
  165. package/dist/manager.d.ts +0 -67
  166. package/dist/manager.js +0 -538
  167. package/dist/mock-driver.d.ts +0 -22
  168. package/dist/mock-driver.js +0 -59
  169. package/dist/state-machine.d.ts +0 -41
  170. package/dist/state-machine.js +0 -60
  171. package/dist/store.d.ts +0 -33
  172. package/dist/store.js +0 -76
  173. package/dist/types.d.ts +0 -168
  174. package/dist/types.js +0 -11
  175. package/dist/verify.d.ts +0 -34
  176. package/dist/verify.js +0 -55
  177. package/dist/wechat-official.d.ts +0 -40
  178. package/dist/wechat-official.js +0 -208
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wechat/response.ts","../../src/wechat/payment.ts"],"names":["Formatter","Rsa"],"mappings":"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","file":"payment.cjs","sourcesContent":["/**\n * 微信支付 APIv3 错误归一化。\n *\n * v3 接口没有\"业务体 code\"约定:HTTP 2xx 即成功,失败以\n * 非 2xx 状态码 + JSON body {code, message} 表达(axios 会抛错)。\n * 本模块把 axios 错误统一转换为 WechatApiError。\n */\nexport class WechatApiError extends Error {\n /** HTTP 状态码(网络层错误时为 undefined) */\n readonly status?: number\n /** 错误码,如 PARAM_ERROR / RESOURCE_NOT_EXISTS / NETWORK_ERROR */\n readonly code: string\n\n constructor(message: string, status: number | undefined, code: string) {\n super(message)\n this.name = 'WechatApiError'\n this.status = status\n this.code = code\n }\n}\n\n/** 将任意请求异常归一化为 WechatApiError */\nexport function toWechatApiError(error: unknown): WechatApiError {\n if (error instanceof WechatApiError) return error\n const axiosError = error as {\n response?: { status?: number; data?: { code?: string; message?: string } }\n code?: string\n message?: string\n }\n const status = axiosError?.response?.status\n const bizCode = axiosError?.response?.data?.code\n const bizMessage = axiosError?.response?.data?.message\n if (status !== undefined) {\n return new WechatApiError(\n `微信支付接口调用失败: ${bizMessage ?? axiosError?.message ?? '未知错误'} (${status}${bizCode ? `, ${bizCode}` : ''})`,\n status,\n bizCode ?? String(status)\n )\n }\n return new WechatApiError(\n `微信支付请求失败: ${axiosError?.message ?? '未知错误'}${axiosError?.code ? ` (${axiosError.code})` : ''}`,\n undefined,\n axiosError?.code ?? 'NETWORK_ERROR'\n )\n}\n\n/** 包装请求 promise:失败时抛出 WechatApiError */\nexport async function unwrapV3<T>(promise: PromiseLike<T>): Promise<T> {\n try {\n return await promise\n } catch (error) {\n throw toWechatApiError(error)\n }\n}\n","import { Formatter, Rsa } from 'wechatpay-axios-plugin'\nimport type { WechatClient } from './client'\nimport { unwrapV3 } from './response'\nimport type {\n WechatAppPayResult,\n WechatH5PayParams,\n WechatH5PayResult,\n WechatJsapiPayResult,\n WechatNativePayResult,\n WechatPayParams,\n WechatQueryParams,\n WechatQueryResult,\n WechatTradeState\n} from './types'\n\n/**\n * 微信支付下单(APIv3)\n *\n * 覆盖四种收款场景:\n * - jsapiPay:公众号网页 / 小程序(wx.requestPayment)\n * - appPay:APP 拉起微信支付\n * - nativePay:PC 扫码支付(返回二维码链接)\n * - h5Pay:微信外浏览器 H5 支付(返回收银台跳转链接)\n *\n * ⚠️ 支付结果以异步通知或 query() 为准。\n */\nexport function createPayment(client: WechatClient) {\n return {\n /**\n * 公众号 / 小程序支付下单(POST /v3/pay/transactions/jsapi)\n * @param params 下单参数,openid 必填\n * @returns 调起 wx.requestPayment 所需的签名参数\n */\n async jsapiPay(params: WechatPayParams & { openid: string }): Promise<WechatJsapiPayResult> {\n const { data } = await postTransaction(client, 'jsapi', params)\n return buildInvokeParams(client, data.prepay_id ?? '')\n },\n\n /**\n * APP 支付下单(POST /v3/pay/transactions/app)\n * @param params 下单参数\n * @returns 传给客户端 SDK 调起微信支付的签名参数\n */\n async appPay(params: WechatPayParams): Promise<WechatAppPayResult> {\n const { data } = await postTransaction(client, 'app', params)\n return buildInvokeParams(client, data.prepay_id ?? '')\n },\n\n /**\n * Native 扫码支付下单(POST /v3/pay/transactions/native)\n * @returns 二维码链接(前端渲染二维码,用户扫码支付)\n */\n async nativePay(params: WechatPayParams): Promise<WechatNativePayResult> {\n const { data } = await postTransaction(client, 'native', params)\n if (!data.code_url) {\n throw new Error('WechatClient: 下单响应缺少 code_url')\n }\n return { codeUrl: data.code_url }\n },\n\n /**\n * H5 支付下单(POST /v3/pay/transactions/h5)\n * @param params 下单参数,payerClientIp 必填\n * @returns 收银台跳转链接(302 重定向即可拉起微信支付)\n */\n async h5Pay(params: WechatH5PayParams): Promise<WechatH5PayResult> {\n const body = buildTransactionBody(client, params)\n body.scene_info = {\n payer_client_ip: params.payerClientIp,\n ...(params.sceneInfo?.deviceType ? { device_type: params.sceneInfo.deviceType } : {})\n }\n const { data } = await unwrapV3(client.sdk.v3.pay.transactions.h5.post(body))\n return { h5Url: data.h5_url }\n },\n\n /**\n * 交易查询(GET /v3/pay/transactions/out-trade-no/{no} 或 .../id/{id})\n * @throws {WechatApiError} 订单不存在等失败(RESOURCE_NOT_EXISTS)\n */\n async query(params: WechatQueryParams): Promise<WechatQueryResult> {\n const mchid = client.config.mchid\n const response = params.transactionId\n ? await unwrapV3(\n client.sdk.client.request(\n `/v3/pay/transactions/id/${encodeURIComponent(params.transactionId)}`,\n 'GET',\n undefined,\n { params: { mchid } }\n )\n )\n : await unwrapV3(\n client.sdk.client.request(\n `/v3/pay/transactions/out-trade-no/${encodeURIComponent(params.outTradeNo ?? '')}`,\n 'GET',\n undefined,\n { params: { mchid } }\n )\n )\n return mapTransaction((response as { data: Record<string, any> }).data)\n }\n }\n}\n\ntype TransactionChain = 'jsapi' | 'app' | 'native'\n\nasync function postTransaction(\n client: WechatClient,\n chain: TransactionChain,\n params: WechatPayParams\n): Promise<{ data: { prepay_id?: string; code_url?: string } }> {\n const body = buildTransactionBody(client, params)\n return unwrapV3(client.sdk.v3.pay.transactions[chain].post(body))\n}\n\n/** 构造下单请求体(camelCase -> snake_case,注入 appid/mchid/notify_url) */\nfunction buildTransactionBody(\n client: WechatClient,\n params: WechatPayParams\n): Record<string, any> {\n const body: Record<string, any> = {\n appid: client.config.appid,\n mchid: client.config.mchid,\n description: params.description,\n out_trade_no: params.outTradeNo,\n time_expire: params.timeExpire,\n attach: params.attach,\n goods_tag: params.goodsTag,\n notify_url: client.config.notifyUrl,\n amount: {\n total: params.amount.total,\n currency: params.amount.currency ?? 'CNY'\n }\n }\n if (params.openid) {\n body.payer = { openid: params.openid }\n }\n // 移除 undefined 字段\n for (const key of Object.keys(body)) {\n if (body[key] === undefined) delete body[key]\n }\n return body\n}\n\n/**\n * 生成拉起支付的签名参数。\n * 签名串:appid\\ntimeStamp\\nnonceStr\\nprepay_id=xxx\\n(SHA256withRSA,商户 API 私钥)\n */\nfunction buildInvokeParams(client: WechatClient, prepayId: string): WechatJsapiPayResult {\n if (!prepayId) {\n throw new Error('WechatClient: 下单响应缺少 prepay_id')\n }\n const appId = client.config.appid\n const timeStamp = `${Formatter.timestamp()}`\n const nonceStr = Formatter.nonce(32)\n const pkg = `prepay_id=${prepayId}`\n const message = `${appId}\\n${timeStamp}\\n${nonceStr}\\n${pkg}\\n`\n const paySign = Rsa.sign(message, client.config.options.privateKey)\n return { appId, timeStamp, nonceStr, package: pkg, signType: 'RSA', paySign }\n}\n\n/** snake_case 响应映射 */\nfunction mapTransaction(data: Record<string, any>): WechatQueryResult {\n return {\n appid: data.appid,\n mchid: data.mchid,\n outTradeNo: data.out_trade_no,\n transactionId: data.transaction_id,\n tradeType: data.trade_type,\n tradeState: data.trade_state as WechatTradeState,\n tradeStateDesc: data.trade_state_desc,\n bankType: data.bank_type,\n attach: data.attach,\n successTime: data.success_time,\n total: data.amount?.total,\n payerTotal: data.amount?.payer_total\n }\n}\n"]}
@@ -0,0 +1,50 @@
1
+ import { WechatClient } from './client.cjs';
2
+ import { WechatPayParams, WechatJsapiPayResult, WechatAppPayResult, WechatNativePayResult, WechatH5PayParams, WechatH5PayResult, WechatQueryParams, WechatQueryResult } from './types.cjs';
3
+ import 'wechatpay-axios-plugin';
4
+ import './config.cjs';
5
+
6
+ /**
7
+ * 微信支付下单(APIv3)
8
+ *
9
+ * 覆盖四种收款场景:
10
+ * - jsapiPay:公众号网页 / 小程序(wx.requestPayment)
11
+ * - appPay:APP 拉起微信支付
12
+ * - nativePay:PC 扫码支付(返回二维码链接)
13
+ * - h5Pay:微信外浏览器 H5 支付(返回收银台跳转链接)
14
+ *
15
+ * ⚠️ 支付结果以异步通知或 query() 为准。
16
+ */
17
+ declare function createPayment(client: WechatClient): {
18
+ /**
19
+ * 公众号 / 小程序支付下单(POST /v3/pay/transactions/jsapi)
20
+ * @param params 下单参数,openid 必填
21
+ * @returns 调起 wx.requestPayment 所需的签名参数
22
+ */
23
+ jsapiPay(params: WechatPayParams & {
24
+ openid: string;
25
+ }): Promise<WechatJsapiPayResult>;
26
+ /**
27
+ * APP 支付下单(POST /v3/pay/transactions/app)
28
+ * @param params 下单参数
29
+ * @returns 传给客户端 SDK 调起微信支付的签名参数
30
+ */
31
+ appPay(params: WechatPayParams): Promise<WechatAppPayResult>;
32
+ /**
33
+ * Native 扫码支付下单(POST /v3/pay/transactions/native)
34
+ * @returns 二维码链接(前端渲染二维码,用户扫码支付)
35
+ */
36
+ nativePay(params: WechatPayParams): Promise<WechatNativePayResult>;
37
+ /**
38
+ * H5 支付下单(POST /v3/pay/transactions/h5)
39
+ * @param params 下单参数,payerClientIp 必填
40
+ * @returns 收银台跳转链接(302 重定向即可拉起微信支付)
41
+ */
42
+ h5Pay(params: WechatH5PayParams): Promise<WechatH5PayResult>;
43
+ /**
44
+ * 交易查询(GET /v3/pay/transactions/out-trade-no/{no} 或 .../id/{id})
45
+ * @throws {WechatApiError} 订单不存在等失败(RESOURCE_NOT_EXISTS)
46
+ */
47
+ query(params: WechatQueryParams): Promise<WechatQueryResult>;
48
+ };
49
+
50
+ export { createPayment };
@@ -0,0 +1,50 @@
1
+ import { WechatClient } from './client.js';
2
+ import { WechatPayParams, WechatJsapiPayResult, WechatAppPayResult, WechatNativePayResult, WechatH5PayParams, WechatH5PayResult, WechatQueryParams, WechatQueryResult } from './types.js';
3
+ import 'wechatpay-axios-plugin';
4
+ import './config.js';
5
+
6
+ /**
7
+ * 微信支付下单(APIv3)
8
+ *
9
+ * 覆盖四种收款场景:
10
+ * - jsapiPay:公众号网页 / 小程序(wx.requestPayment)
11
+ * - appPay:APP 拉起微信支付
12
+ * - nativePay:PC 扫码支付(返回二维码链接)
13
+ * - h5Pay:微信外浏览器 H5 支付(返回收银台跳转链接)
14
+ *
15
+ * ⚠️ 支付结果以异步通知或 query() 为准。
16
+ */
17
+ declare function createPayment(client: WechatClient): {
18
+ /**
19
+ * 公众号 / 小程序支付下单(POST /v3/pay/transactions/jsapi)
20
+ * @param params 下单参数,openid 必填
21
+ * @returns 调起 wx.requestPayment 所需的签名参数
22
+ */
23
+ jsapiPay(params: WechatPayParams & {
24
+ openid: string;
25
+ }): Promise<WechatJsapiPayResult>;
26
+ /**
27
+ * APP 支付下单(POST /v3/pay/transactions/app)
28
+ * @param params 下单参数
29
+ * @returns 传给客户端 SDK 调起微信支付的签名参数
30
+ */
31
+ appPay(params: WechatPayParams): Promise<WechatAppPayResult>;
32
+ /**
33
+ * Native 扫码支付下单(POST /v3/pay/transactions/native)
34
+ * @returns 二维码链接(前端渲染二维码,用户扫码支付)
35
+ */
36
+ nativePay(params: WechatPayParams): Promise<WechatNativePayResult>;
37
+ /**
38
+ * H5 支付下单(POST /v3/pay/transactions/h5)
39
+ * @param params 下单参数,payerClientIp 必填
40
+ * @returns 收银台跳转链接(302 重定向即可拉起微信支付)
41
+ */
42
+ h5Pay(params: WechatH5PayParams): Promise<WechatH5PayResult>;
43
+ /**
44
+ * 交易查询(GET /v3/pay/transactions/out-trade-no/{no} 或 .../id/{id})
45
+ * @throws {WechatApiError} 订单不存在等失败(RESOURCE_NOT_EXISTS)
46
+ */
47
+ query(params: WechatQueryParams): Promise<WechatQueryResult>;
48
+ };
49
+
50
+ export { createPayment };
@@ -0,0 +1,184 @@
1
+ import { Formatter, Rsa } from 'wechatpay-axios-plugin';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
+
6
+ // packages/payment/src/wechat/response.ts
7
+ var _WechatApiError = class _WechatApiError extends Error {
8
+ constructor(message, status, code) {
9
+ super(message);
10
+ this.name = "WechatApiError";
11
+ this.status = status;
12
+ this.code = code;
13
+ }
14
+ };
15
+ __name(_WechatApiError, "WechatApiError");
16
+ var WechatApiError = _WechatApiError;
17
+ function toWechatApiError(error) {
18
+ if (error instanceof WechatApiError) return error;
19
+ const axiosError = error;
20
+ const status = axiosError?.response?.status;
21
+ const bizCode = axiosError?.response?.data?.code;
22
+ const bizMessage = axiosError?.response?.data?.message;
23
+ if (status !== void 0) {
24
+ return new WechatApiError(
25
+ `\u5FAE\u4FE1\u652F\u4ED8\u63A5\u53E3\u8C03\u7528\u5931\u8D25: ${bizMessage ?? axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"} (${status}${bizCode ? `, ${bizCode}` : ""})`,
26
+ status,
27
+ bizCode ?? String(status)
28
+ );
29
+ }
30
+ return new WechatApiError(
31
+ `\u5FAE\u4FE1\u652F\u4ED8\u8BF7\u6C42\u5931\u8D25: ${axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"}${axiosError?.code ? ` (${axiosError.code})` : ""}`,
32
+ void 0,
33
+ axiosError?.code ?? "NETWORK_ERROR"
34
+ );
35
+ }
36
+ __name(toWechatApiError, "toWechatApiError");
37
+ async function unwrapV3(promise) {
38
+ try {
39
+ return await promise;
40
+ } catch (error) {
41
+ throw toWechatApiError(error);
42
+ }
43
+ }
44
+ __name(unwrapV3, "unwrapV3");
45
+
46
+ // packages/payment/src/wechat/payment.ts
47
+ function createPayment(client) {
48
+ return {
49
+ /**
50
+ * 公众号 / 小程序支付下单(POST /v3/pay/transactions/jsapi)
51
+ * @param params 下单参数,openid 必填
52
+ * @returns 调起 wx.requestPayment 所需的签名参数
53
+ */
54
+ async jsapiPay(params) {
55
+ const { data } = await postTransaction(client, "jsapi", params);
56
+ return buildInvokeParams(client, data.prepay_id ?? "");
57
+ },
58
+ /**
59
+ * APP 支付下单(POST /v3/pay/transactions/app)
60
+ * @param params 下单参数
61
+ * @returns 传给客户端 SDK 调起微信支付的签名参数
62
+ */
63
+ async appPay(params) {
64
+ const { data } = await postTransaction(client, "app", params);
65
+ return buildInvokeParams(client, data.prepay_id ?? "");
66
+ },
67
+ /**
68
+ * Native 扫码支付下单(POST /v3/pay/transactions/native)
69
+ * @returns 二维码链接(前端渲染二维码,用户扫码支付)
70
+ */
71
+ async nativePay(params) {
72
+ const { data } = await postTransaction(client, "native", params);
73
+ if (!data.code_url) {
74
+ throw new Error("WechatClient: \u4E0B\u5355\u54CD\u5E94\u7F3A\u5C11 code_url");
75
+ }
76
+ return { codeUrl: data.code_url };
77
+ },
78
+ /**
79
+ * H5 支付下单(POST /v3/pay/transactions/h5)
80
+ * @param params 下单参数,payerClientIp 必填
81
+ * @returns 收银台跳转链接(302 重定向即可拉起微信支付)
82
+ */
83
+ async h5Pay(params) {
84
+ const body = buildTransactionBody(client, params);
85
+ body.scene_info = {
86
+ payer_client_ip: params.payerClientIp,
87
+ ...params.sceneInfo?.deviceType ? { device_type: params.sceneInfo.deviceType } : {}
88
+ };
89
+ const { data } = await unwrapV3(client.sdk.v3.pay.transactions.h5.post(body));
90
+ return { h5Url: data.h5_url };
91
+ },
92
+ /**
93
+ * 交易查询(GET /v3/pay/transactions/out-trade-no/{no} 或 .../id/{id})
94
+ * @throws {WechatApiError} 订单不存在等失败(RESOURCE_NOT_EXISTS)
95
+ */
96
+ async query(params) {
97
+ const mchid = client.config.mchid;
98
+ const response = params.transactionId ? await unwrapV3(
99
+ client.sdk.client.request(
100
+ `/v3/pay/transactions/id/${encodeURIComponent(params.transactionId)}`,
101
+ "GET",
102
+ void 0,
103
+ { params: { mchid } }
104
+ )
105
+ ) : await unwrapV3(
106
+ client.sdk.client.request(
107
+ `/v3/pay/transactions/out-trade-no/${encodeURIComponent(params.outTradeNo ?? "")}`,
108
+ "GET",
109
+ void 0,
110
+ { params: { mchid } }
111
+ )
112
+ );
113
+ return mapTransaction(response.data);
114
+ }
115
+ };
116
+ }
117
+ __name(createPayment, "createPayment");
118
+ async function postTransaction(client, chain, params) {
119
+ const body = buildTransactionBody(client, params);
120
+ return unwrapV3(client.sdk.v3.pay.transactions[chain].post(body));
121
+ }
122
+ __name(postTransaction, "postTransaction");
123
+ function buildTransactionBody(client, params) {
124
+ const body = {
125
+ appid: client.config.appid,
126
+ mchid: client.config.mchid,
127
+ description: params.description,
128
+ out_trade_no: params.outTradeNo,
129
+ time_expire: params.timeExpire,
130
+ attach: params.attach,
131
+ goods_tag: params.goodsTag,
132
+ notify_url: client.config.notifyUrl,
133
+ amount: {
134
+ total: params.amount.total,
135
+ currency: params.amount.currency ?? "CNY"
136
+ }
137
+ };
138
+ if (params.openid) {
139
+ body.payer = { openid: params.openid };
140
+ }
141
+ for (const key of Object.keys(body)) {
142
+ if (body[key] === void 0) delete body[key];
143
+ }
144
+ return body;
145
+ }
146
+ __name(buildTransactionBody, "buildTransactionBody");
147
+ function buildInvokeParams(client, prepayId) {
148
+ if (!prepayId) {
149
+ throw new Error("WechatClient: \u4E0B\u5355\u54CD\u5E94\u7F3A\u5C11 prepay_id");
150
+ }
151
+ const appId = client.config.appid;
152
+ const timeStamp = `${Formatter.timestamp()}`;
153
+ const nonceStr = Formatter.nonce(32);
154
+ const pkg = `prepay_id=${prepayId}`;
155
+ const message = `${appId}
156
+ ${timeStamp}
157
+ ${nonceStr}
158
+ ${pkg}
159
+ `;
160
+ const paySign = Rsa.sign(message, client.config.options.privateKey);
161
+ return { appId, timeStamp, nonceStr, package: pkg, signType: "RSA", paySign };
162
+ }
163
+ __name(buildInvokeParams, "buildInvokeParams");
164
+ function mapTransaction(data) {
165
+ return {
166
+ appid: data.appid,
167
+ mchid: data.mchid,
168
+ outTradeNo: data.out_trade_no,
169
+ transactionId: data.transaction_id,
170
+ tradeType: data.trade_type,
171
+ tradeState: data.trade_state,
172
+ tradeStateDesc: data.trade_state_desc,
173
+ bankType: data.bank_type,
174
+ attach: data.attach,
175
+ successTime: data.success_time,
176
+ total: data.amount?.total,
177
+ payerTotal: data.amount?.payer_total
178
+ };
179
+ }
180
+ __name(mapTransaction, "mapTransaction");
181
+
182
+ export { createPayment };
183
+ //# sourceMappingURL=payment.js.map
184
+ //# sourceMappingURL=payment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wechat/response.ts","../../src/wechat/payment.ts"],"names":[],"mappings":"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","file":"payment.js","sourcesContent":["/**\n * 微信支付 APIv3 错误归一化。\n *\n * v3 接口没有\"业务体 code\"约定:HTTP 2xx 即成功,失败以\n * 非 2xx 状态码 + JSON body {code, message} 表达(axios 会抛错)。\n * 本模块把 axios 错误统一转换为 WechatApiError。\n */\nexport class WechatApiError extends Error {\n /** HTTP 状态码(网络层错误时为 undefined) */\n readonly status?: number\n /** 错误码,如 PARAM_ERROR / RESOURCE_NOT_EXISTS / NETWORK_ERROR */\n readonly code: string\n\n constructor(message: string, status: number | undefined, code: string) {\n super(message)\n this.name = 'WechatApiError'\n this.status = status\n this.code = code\n }\n}\n\n/** 将任意请求异常归一化为 WechatApiError */\nexport function toWechatApiError(error: unknown): WechatApiError {\n if (error instanceof WechatApiError) return error\n const axiosError = error as {\n response?: { status?: number; data?: { code?: string; message?: string } }\n code?: string\n message?: string\n }\n const status = axiosError?.response?.status\n const bizCode = axiosError?.response?.data?.code\n const bizMessage = axiosError?.response?.data?.message\n if (status !== undefined) {\n return new WechatApiError(\n `微信支付接口调用失败: ${bizMessage ?? axiosError?.message ?? '未知错误'} (${status}${bizCode ? `, ${bizCode}` : ''})`,\n status,\n bizCode ?? String(status)\n )\n }\n return new WechatApiError(\n `微信支付请求失败: ${axiosError?.message ?? '未知错误'}${axiosError?.code ? ` (${axiosError.code})` : ''}`,\n undefined,\n axiosError?.code ?? 'NETWORK_ERROR'\n )\n}\n\n/** 包装请求 promise:失败时抛出 WechatApiError */\nexport async function unwrapV3<T>(promise: PromiseLike<T>): Promise<T> {\n try {\n return await promise\n } catch (error) {\n throw toWechatApiError(error)\n }\n}\n","import { Formatter, Rsa } from 'wechatpay-axios-plugin'\nimport type { WechatClient } from './client'\nimport { unwrapV3 } from './response'\nimport type {\n WechatAppPayResult,\n WechatH5PayParams,\n WechatH5PayResult,\n WechatJsapiPayResult,\n WechatNativePayResult,\n WechatPayParams,\n WechatQueryParams,\n WechatQueryResult,\n WechatTradeState\n} from './types'\n\n/**\n * 微信支付下单(APIv3)\n *\n * 覆盖四种收款场景:\n * - jsapiPay:公众号网页 / 小程序(wx.requestPayment)\n * - appPay:APP 拉起微信支付\n * - nativePay:PC 扫码支付(返回二维码链接)\n * - h5Pay:微信外浏览器 H5 支付(返回收银台跳转链接)\n *\n * ⚠️ 支付结果以异步通知或 query() 为准。\n */\nexport function createPayment(client: WechatClient) {\n return {\n /**\n * 公众号 / 小程序支付下单(POST /v3/pay/transactions/jsapi)\n * @param params 下单参数,openid 必填\n * @returns 调起 wx.requestPayment 所需的签名参数\n */\n async jsapiPay(params: WechatPayParams & { openid: string }): Promise<WechatJsapiPayResult> {\n const { data } = await postTransaction(client, 'jsapi', params)\n return buildInvokeParams(client, data.prepay_id ?? '')\n },\n\n /**\n * APP 支付下单(POST /v3/pay/transactions/app)\n * @param params 下单参数\n * @returns 传给客户端 SDK 调起微信支付的签名参数\n */\n async appPay(params: WechatPayParams): Promise<WechatAppPayResult> {\n const { data } = await postTransaction(client, 'app', params)\n return buildInvokeParams(client, data.prepay_id ?? '')\n },\n\n /**\n * Native 扫码支付下单(POST /v3/pay/transactions/native)\n * @returns 二维码链接(前端渲染二维码,用户扫码支付)\n */\n async nativePay(params: WechatPayParams): Promise<WechatNativePayResult> {\n const { data } = await postTransaction(client, 'native', params)\n if (!data.code_url) {\n throw new Error('WechatClient: 下单响应缺少 code_url')\n }\n return { codeUrl: data.code_url }\n },\n\n /**\n * H5 支付下单(POST /v3/pay/transactions/h5)\n * @param params 下单参数,payerClientIp 必填\n * @returns 收银台跳转链接(302 重定向即可拉起微信支付)\n */\n async h5Pay(params: WechatH5PayParams): Promise<WechatH5PayResult> {\n const body = buildTransactionBody(client, params)\n body.scene_info = {\n payer_client_ip: params.payerClientIp,\n ...(params.sceneInfo?.deviceType ? { device_type: params.sceneInfo.deviceType } : {})\n }\n const { data } = await unwrapV3(client.sdk.v3.pay.transactions.h5.post(body))\n return { h5Url: data.h5_url }\n },\n\n /**\n * 交易查询(GET /v3/pay/transactions/out-trade-no/{no} 或 .../id/{id})\n * @throws {WechatApiError} 订单不存在等失败(RESOURCE_NOT_EXISTS)\n */\n async query(params: WechatQueryParams): Promise<WechatQueryResult> {\n const mchid = client.config.mchid\n const response = params.transactionId\n ? await unwrapV3(\n client.sdk.client.request(\n `/v3/pay/transactions/id/${encodeURIComponent(params.transactionId)}`,\n 'GET',\n undefined,\n { params: { mchid } }\n )\n )\n : await unwrapV3(\n client.sdk.client.request(\n `/v3/pay/transactions/out-trade-no/${encodeURIComponent(params.outTradeNo ?? '')}`,\n 'GET',\n undefined,\n { params: { mchid } }\n )\n )\n return mapTransaction((response as { data: Record<string, any> }).data)\n }\n }\n}\n\ntype TransactionChain = 'jsapi' | 'app' | 'native'\n\nasync function postTransaction(\n client: WechatClient,\n chain: TransactionChain,\n params: WechatPayParams\n): Promise<{ data: { prepay_id?: string; code_url?: string } }> {\n const body = buildTransactionBody(client, params)\n return unwrapV3(client.sdk.v3.pay.transactions[chain].post(body))\n}\n\n/** 构造下单请求体(camelCase -> snake_case,注入 appid/mchid/notify_url) */\nfunction buildTransactionBody(\n client: WechatClient,\n params: WechatPayParams\n): Record<string, any> {\n const body: Record<string, any> = {\n appid: client.config.appid,\n mchid: client.config.mchid,\n description: params.description,\n out_trade_no: params.outTradeNo,\n time_expire: params.timeExpire,\n attach: params.attach,\n goods_tag: params.goodsTag,\n notify_url: client.config.notifyUrl,\n amount: {\n total: params.amount.total,\n currency: params.amount.currency ?? 'CNY'\n }\n }\n if (params.openid) {\n body.payer = { openid: params.openid }\n }\n // 移除 undefined 字段\n for (const key of Object.keys(body)) {\n if (body[key] === undefined) delete body[key]\n }\n return body\n}\n\n/**\n * 生成拉起支付的签名参数。\n * 签名串:appid\\ntimeStamp\\nnonceStr\\nprepay_id=xxx\\n(SHA256withRSA,商户 API 私钥)\n */\nfunction buildInvokeParams(client: WechatClient, prepayId: string): WechatJsapiPayResult {\n if (!prepayId) {\n throw new Error('WechatClient: 下单响应缺少 prepay_id')\n }\n const appId = client.config.appid\n const timeStamp = `${Formatter.timestamp()}`\n const nonceStr = Formatter.nonce(32)\n const pkg = `prepay_id=${prepayId}`\n const message = `${appId}\\n${timeStamp}\\n${nonceStr}\\n${pkg}\\n`\n const paySign = Rsa.sign(message, client.config.options.privateKey)\n return { appId, timeStamp, nonceStr, package: pkg, signType: 'RSA', paySign }\n}\n\n/** snake_case 响应映射 */\nfunction mapTransaction(data: Record<string, any>): WechatQueryResult {\n return {\n appid: data.appid,\n mchid: data.mchid,\n outTradeNo: data.out_trade_no,\n transactionId: data.transaction_id,\n tradeType: data.trade_type,\n tradeState: data.trade_state as WechatTradeState,\n tradeStateDesc: data.trade_state_desc,\n bankType: data.bank_type,\n attach: data.attach,\n successTime: data.success_time,\n total: data.amount?.total,\n payerTotal: data.amount?.payer_total\n }\n}\n"]}
@@ -0,0 +1,305 @@
1
+ 'use strict';
2
+
3
+ var wechatpayAxiosPlugin = require('wechatpay-axios-plugin');
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+
8
+ // packages/reactivity/src/debug.ts
9
+ var activeDebugHooks = null;
10
+ function hasDebugHooks() {
11
+ return activeDebugHooks !== null;
12
+ }
13
+ __name(hasDebugHooks, "hasDebugHooks");
14
+ function invokeDebug(name, ...args) {
15
+ return;
16
+ }
17
+ __name(invokeDebug, "invokeDebug");
18
+
19
+ // packages/reactivity/src/owner.ts
20
+ var currentOwner = null;
21
+ function getCurrentOwner() {
22
+ return currentOwner;
23
+ }
24
+ __name(getCurrentOwner, "getCurrentOwner");
25
+
26
+ // packages/reactivity/src/scheduler.ts
27
+ var _Scheduler = class _Scheduler {
28
+ constructor() {
29
+ this.dirtyEffects = /* @__PURE__ */ new Set();
30
+ this.lowPriorityEffects = /* @__PURE__ */ new Set();
31
+ // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
32
+ this.normalBuffer = [];
33
+ this.lowBuffer = [];
34
+ this.flushing = false;
35
+ this.scheduled = false;
36
+ this.batchDepth = 0;
37
+ }
38
+ schedule(effect2) {
39
+ if (effect2.disposed) return;
40
+ this.dirtyEffects.add(effect2);
41
+ this.lowPriorityEffects.delete(effect2);
42
+ this.ensureScheduled();
43
+ }
44
+ /** Queue an effect behind normal updates while preserving deterministic order. */
45
+ scheduleLow(effect2) {
46
+ if (effect2.disposed) return;
47
+ if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
48
+ this.ensureScheduled();
49
+ }
50
+ ensureScheduled() {
51
+ if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
52
+ this.scheduled = true;
53
+ queueMicrotask(() => {
54
+ this.scheduled = false;
55
+ this.flush();
56
+ });
57
+ }
58
+ }
59
+ remove(effect2) {
60
+ this.dirtyEffects.delete(effect2);
61
+ this.lowPriorityEffects.delete(effect2);
62
+ }
63
+ batch(fn) {
64
+ this.batchDepth++;
65
+ try {
66
+ return fn();
67
+ } finally {
68
+ this.batchDepth--;
69
+ if (this.batchDepth === 0) this.flush();
70
+ }
71
+ }
72
+ flush() {
73
+ if (this.flushing || this.batchDepth > 0) return;
74
+ this.flushing = true;
75
+ let rounds = 0;
76
+ let firstError;
77
+ let hasError = false;
78
+ try {
79
+ while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
80
+ if (++rounds > 100) {
81
+ this.dirtyEffects.clear();
82
+ this.lowPriorityEffects.clear();
83
+ throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
84
+ }
85
+ this.collectRunnable(this.dirtyEffects, this.normalBuffer);
86
+ this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
87
+ sortEffects(this.normalBuffer);
88
+ sortEffects(this.lowBuffer);
89
+ for (const effect2 of this.normalBuffer) {
90
+ try {
91
+ effect2.run();
92
+ } catch (error) {
93
+ if (!hasError) {
94
+ firstError = error;
95
+ hasError = true;
96
+ }
97
+ }
98
+ }
99
+ for (const effect2 of this.lowBuffer) {
100
+ try {
101
+ effect2.run();
102
+ } catch (error) {
103
+ if (!hasError) {
104
+ firstError = error;
105
+ hasError = true;
106
+ }
107
+ }
108
+ }
109
+ this.normalBuffer.length = 0;
110
+ this.lowBuffer.length = 0;
111
+ }
112
+ } finally {
113
+ this.normalBuffer.length = 0;
114
+ this.lowBuffer.length = 0;
115
+ this.flushing = false;
116
+ }
117
+ if (hasError) throw firstError;
118
+ }
119
+ /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
120
+ collectRunnable(source, target) {
121
+ for (const effect2 of source) {
122
+ if (!effect2.disposed) target.push(effect2);
123
+ }
124
+ source.clear();
125
+ }
126
+ };
127
+ __name(_Scheduler, "Scheduler");
128
+ function sortEffects(effects) {
129
+ if (effects.length > 1) {
130
+ effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
131
+ }
132
+ }
133
+ __name(sortEffects, "sortEffects");
134
+
135
+ // packages/runtime/src/hmr.ts
136
+ var globalTarget = globalThis;
137
+ var hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: /* @__PURE__ */ new Map() };
138
+ globalTarget.__VOBS_HMR__ = hmrGlobal;
139
+
140
+ // packages/vobs/src/context.ts
141
+ var ownerProviders = /* @__PURE__ */ new WeakMap();
142
+ function inject(key, fallback) {
143
+ const owner = getCurrentOwner();
144
+ const value = owner ? injectFromOwner(owner, key) : void 0;
145
+ return value === void 0 ? fallback : value;
146
+ }
147
+ __name(inject, "inject");
148
+ function injectFromOwner(owner, key) {
149
+ let current = owner;
150
+ while (current) {
151
+ const providers = ownerProviders.get(current);
152
+ if (providers?.has(key)) return providers.get(key);
153
+ current = current.parent;
154
+ }
155
+ return void 0;
156
+ }
157
+ __name(injectFromOwner, "injectFromOwner");
158
+
159
+ // packages/vobs/src/app.ts
160
+ function createInjectionKey(description) {
161
+ return Symbol(description);
162
+ }
163
+ __name(createInjectionKey, "createInjectionKey");
164
+
165
+ // packages/payment/src/wechat/config.ts
166
+ var _WechatConfig = class _WechatConfig {
167
+ constructor(options) {
168
+ this.validate(options);
169
+ this._options = { ...options };
170
+ }
171
+ /** 获取完整配置 */
172
+ get options() {
173
+ return this._options;
174
+ }
175
+ /** 商户号 */
176
+ get mchid() {
177
+ return this._options.mchid;
178
+ }
179
+ /** 应用 ID(公众号 / 小程序 / APP) */
180
+ get appid() {
181
+ return this._options.appid;
182
+ }
183
+ /** 商户 API 证书序列号 */
184
+ get serial() {
185
+ return this._options.serial;
186
+ }
187
+ /** APIv3 密钥(回调解密用) */
188
+ get apiv3Key() {
189
+ return this._options.apiv3Key;
190
+ }
191
+ /** 异步通知地址 */
192
+ get notifyUrl() {
193
+ return this._options.notifyUrl;
194
+ }
195
+ /** 更新配置(部分更新) */
196
+ update(patch) {
197
+ const merged = { ...this._options, ...patch };
198
+ this.validate(merged);
199
+ this._options = merged;
200
+ }
201
+ /** 替换配置 */
202
+ replace(options) {
203
+ this.validate(options);
204
+ this._options = { ...options };
205
+ }
206
+ validate(options) {
207
+ if (!options.mchid) {
208
+ throw new Error("WechatConfig: mchid \u4E0D\u80FD\u4E3A\u7A7A");
209
+ }
210
+ if (!options.serial) {
211
+ throw new Error("WechatConfig: serial\uFF08\u5546\u6237 API \u8BC1\u4E66\u5E8F\u5217\u53F7\uFF09\u4E0D\u80FD\u4E3A\u7A7A");
212
+ }
213
+ if (!options.privateKey) {
214
+ throw new Error("WechatConfig: privateKey\uFF08\u5546\u6237 API \u79C1\u94A5 PEM\uFF09\u4E0D\u80FD\u4E3A\u7A7A");
215
+ }
216
+ if (!options.certs || Object.keys(options.certs).length === 0) {
217
+ throw new Error("WechatConfig: certs\uFF08\u5E73\u53F0\u8BC1\u4E66/\u5FAE\u4FE1\u652F\u4ED8\u516C\u94A5 {\u5E8F\u5217\u53F7: PEM}\uFF09\u4E0D\u80FD\u4E3A\u7A7A");
218
+ }
219
+ if (!options.appid) {
220
+ throw new Error("WechatConfig: appid \u4E0D\u80FD\u4E3A\u7A7A");
221
+ }
222
+ if (!options.apiv3Key) {
223
+ throw new Error("WechatConfig: apiv3Key \u4E0D\u80FD\u4E3A\u7A7A");
224
+ }
225
+ if (options.apiv3Key.length !== 32) {
226
+ throw new Error("WechatConfig: apiv3Key \u5FC5\u987B\u4E3A 32 \u5B57\u8282\u5B57\u7B26\u4E32");
227
+ }
228
+ }
229
+ };
230
+ __name(_WechatConfig, "WechatConfig");
231
+ var WechatConfig = _WechatConfig;
232
+
233
+ // packages/payment/src/wechat/client.ts
234
+ var _WechatClient = class _WechatClient {
235
+ constructor(options) {
236
+ this._disposed = false;
237
+ this.config = new WechatConfig(options);
238
+ this._sdk = this.createSdk(options);
239
+ }
240
+ /** 获取底层 Wechatpay 实例(链式 API:client.sdk.v3.pay.transactions.jsapi.post(...)) */
241
+ get sdk() {
242
+ this.ensureActive();
243
+ return this._sdk;
244
+ }
245
+ /** 更新配置并重建 SDK 实例 */
246
+ updateConfig(patch) {
247
+ this.ensureActive();
248
+ this.config.update(patch);
249
+ this._sdk = this.createSdk(this.config.options);
250
+ }
251
+ /** 销毁客户端 */
252
+ dispose() {
253
+ this._disposed = true;
254
+ this._sdk = null;
255
+ }
256
+ createSdk(options) {
257
+ return new wechatpayAxiosPlugin.Wechatpay({
258
+ mchid: options.mchid,
259
+ serial: options.serial,
260
+ privateKey: options.privateKey,
261
+ certs: options.certs,
262
+ timeout: options.timeout ?? 5e3
263
+ });
264
+ }
265
+ ensureActive() {
266
+ if (this._disposed) {
267
+ throw new Error("WechatClient: \u5BA2\u6237\u7AEF\u5DF2\u9500\u6BC1");
268
+ }
269
+ }
270
+ };
271
+ __name(_WechatClient, "WechatClient");
272
+ var WechatClient = _WechatClient;
273
+
274
+ // packages/payment/src/wechat/plugin.ts
275
+ var WECHAT_KEY = createInjectionKey("vobs.payment.wechat");
276
+ function useWechat() {
277
+ const client = inject(WECHAT_KEY);
278
+ if (!client) {
279
+ throw new Error("Vobs Payment: \u627E\u4E0D\u5230 WechatClient\uFF0C\u8BF7\u5B89\u88C5 wechatPlugin");
280
+ }
281
+ return client;
282
+ }
283
+ __name(useWechat, "useWechat");
284
+ function wechatPlugin(options) {
285
+ return {
286
+ name: "@vobs/payment/wechat",
287
+ version: "0.1.0",
288
+ install(context) {
289
+ if (!options.client && !options.config) {
290
+ throw new Error("Vobs Payment: wechatPlugin \u9700\u8981\u63D0\u4F9B config \u6216 client \u4E4B\u4E00");
291
+ }
292
+ const ownClient = !options.client;
293
+ const client = options.client ?? new WechatClient(options.config);
294
+ context.provide(WECHAT_KEY, client);
295
+ return ownClient ? () => client.dispose() : void 0;
296
+ }
297
+ };
298
+ }
299
+ __name(wechatPlugin, "wechatPlugin");
300
+
301
+ exports.WECHAT_KEY = WECHAT_KEY;
302
+ exports.useWechat = useWechat;
303
+ exports.wechatPlugin = wechatPlugin;
304
+ //# sourceMappingURL=plugin.cjs.map
305
+ //# sourceMappingURL=plugin.cjs.map