@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.
- package/LICENSE +1 -1
- package/README.md +182 -0
- package/dist/alipay/client.cjs +112 -0
- package/dist/alipay/client.cjs.map +1 -0
- package/dist/alipay/client.d.cts +36 -0
- package/dist/alipay/client.d.ts +36 -0
- package/dist/alipay/client.js +110 -0
- package/dist/alipay/client.js.map +1 -0
- package/dist/alipay/config.cjs +67 -0
- package/dist/alipay/config.cjs.map +1 -0
- package/dist/alipay/config.d.cts +30 -0
- package/dist/alipay/config.d.ts +30 -0
- package/dist/alipay/config.js +65 -0
- package/dist/alipay/config.js.map +1 -0
- package/dist/alipay/index.cjs +592 -0
- package/dist/alipay/index.cjs.map +1 -0
- package/dist/alipay/index.d.cts +12 -0
- package/dist/alipay/index.d.ts +12 -0
- package/dist/alipay/index.js +580 -0
- package/dist/alipay/index.js.map +1 -0
- package/dist/alipay/notify.cjs +70 -0
- package/dist/alipay/notify.cjs.map +1 -0
- package/dist/alipay/notify.d.cts +52 -0
- package/dist/alipay/notify.d.ts +52 -0
- package/dist/alipay/notify.js +68 -0
- package/dist/alipay/notify.js.map +1 -0
- package/dist/alipay/payment.cjs +49 -0
- package/dist/alipay/payment.cjs.map +1 -0
- package/dist/alipay/payment.d.cts +24 -0
- package/dist/alipay/payment.d.ts +24 -0
- package/dist/alipay/payment.js +47 -0
- package/dist/alipay/payment.js.map +1 -0
- package/dist/alipay/plugin.cjs +300 -0
- package/dist/alipay/plugin.cjs.map +1 -0
- package/dist/alipay/plugin.d.cts +43 -0
- package/dist/alipay/plugin.d.ts +43 -0
- package/dist/alipay/plugin.js +296 -0
- package/dist/alipay/plugin.js.map +1 -0
- package/dist/alipay/query.cjs +80 -0
- package/dist/alipay/query.cjs.map +1 -0
- package/dist/alipay/query.d.cts +26 -0
- package/dist/alipay/query.d.ts +26 -0
- package/dist/alipay/query.js +78 -0
- package/dist/alipay/query.js.map +1 -0
- package/dist/alipay/refund.cjs +104 -0
- package/dist/alipay/refund.cjs.map +1 -0
- package/dist/alipay/refund.d.cts +32 -0
- package/dist/alipay/refund.d.ts +32 -0
- package/dist/alipay/refund.js +102 -0
- package/dist/alipay/refund.js.map +1 -0
- package/dist/alipay/response.cjs +38 -0
- package/dist/alipay/response.cjs.map +1 -0
- package/dist/alipay/response.d.cts +19 -0
- package/dist/alipay/response.d.ts +19 -0
- package/dist/alipay/response.js +35 -0
- package/dist/alipay/response.js.map +1 -0
- package/dist/alipay/types.cjs +4 -0
- package/dist/alipay/types.cjs.map +1 -0
- package/dist/alipay/types.d.cts +242 -0
- package/dist/alipay/types.d.ts +242 -0
- package/dist/alipay/types.js +3 -0
- package/dist/alipay/types.js.map +1 -0
- package/dist/alipay/wap.cjs +50 -0
- package/dist/alipay/wap.cjs.map +1 -0
- package/dist/alipay/wap.d.cts +24 -0
- package/dist/alipay/wap.d.ts +24 -0
- package/dist/alipay/wap.js +48 -0
- package/dist/alipay/wap.js.map +1 -0
- package/dist/index-B1aUR7Vt.d.ts +49 -0
- package/dist/index-B8pzZxGq.d.cts +44 -0
- package/dist/index-BWnIrwRi.d.ts +44 -0
- package/dist/index-Dyrkl86r.d.cts +49 -0
- package/dist/index.cjs +1071 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +23 -0
- package/dist/index.d.ts +23 -37
- package/dist/index.js +1052 -37
- package/dist/index.js.map +1 -0
- package/dist/wechat/client.cjs +119 -0
- package/dist/wechat/client.cjs.map +1 -0
- package/dist/wechat/client.d.cts +39 -0
- package/dist/wechat/client.d.ts +39 -0
- package/dist/wechat/client.js +117 -0
- package/dist/wechat/client.js.map +1 -0
- package/dist/wechat/config.cjs +76 -0
- package/dist/wechat/config.cjs.map +1 -0
- package/dist/wechat/config.d.cts +29 -0
- package/dist/wechat/config.d.ts +29 -0
- package/dist/wechat/config.js +74 -0
- package/dist/wechat/config.js.map +1 -0
- package/dist/wechat/index.cjs +612 -0
- package/dist/wechat/index.cjs.map +1 -0
- package/dist/wechat/index.d.cts +10 -0
- package/dist/wechat/index.d.ts +10 -0
- package/dist/wechat/index.js +602 -0
- package/dist/wechat/index.js.map +1 -0
- package/dist/wechat/notify.cjs +73 -0
- package/dist/wechat/notify.cjs.map +1 -0
- package/dist/wechat/notify.d.cts +53 -0
- package/dist/wechat/notify.d.ts +53 -0
- package/dist/wechat/notify.js +71 -0
- package/dist/wechat/notify.js.map +1 -0
- package/dist/wechat/payment.cjs +186 -0
- package/dist/wechat/payment.cjs.map +1 -0
- package/dist/wechat/payment.d.cts +50 -0
- package/dist/wechat/payment.d.ts +50 -0
- package/dist/wechat/payment.js +184 -0
- package/dist/wechat/payment.js.map +1 -0
- package/dist/wechat/plugin.cjs +305 -0
- package/dist/wechat/plugin.cjs.map +1 -0
- package/dist/wechat/plugin.d.cts +40 -0
- package/dist/wechat/plugin.d.ts +40 -0
- package/dist/wechat/plugin.js +301 -0
- package/dist/wechat/plugin.js.map +1 -0
- package/dist/wechat/refund.cjs +112 -0
- package/dist/wechat/refund.cjs.map +1 -0
- package/dist/wechat/refund.d.cts +26 -0
- package/dist/wechat/refund.d.ts +26 -0
- package/dist/wechat/refund.js +110 -0
- package/dist/wechat/refund.js.map +1 -0
- package/dist/wechat/response.cjs +50 -0
- package/dist/wechat/response.cjs.map +1 -0
- package/dist/wechat/response.d.cts +20 -0
- package/dist/wechat/response.d.ts +20 -0
- package/dist/wechat/response.js +46 -0
- package/dist/wechat/response.js.map +1 -0
- package/dist/wechat/types.cjs +4 -0
- package/dist/wechat/types.cjs.map +1 -0
- package/dist/wechat/types.d.cts +200 -0
- package/dist/wechat/types.d.ts +200 -0
- package/dist/wechat/types.js +3 -0
- package/dist/wechat/types.js.map +1 -0
- package/package.json +37 -28
- package/src/alipay/alipay.test.ts +231 -0
- package/src/alipay/client.ts +67 -0
- package/src/alipay/config.ts +72 -0
- package/src/alipay/index.ts +32 -0
- package/src/alipay/notify.ts +92 -0
- package/src/alipay/payment.ts +60 -0
- package/src/alipay/plugin.ts +64 -0
- package/src/alipay/query.ts +52 -0
- package/src/alipay/refund.ts +85 -0
- package/src/alipay/response.ts +40 -0
- package/src/alipay/types.ts +271 -0
- package/src/alipay/wap.ts +55 -0
- package/src/index.ts +78 -0
- package/src/wechat/client.ts +68 -0
- package/src/wechat/config.ts +81 -0
- package/src/wechat/index.ts +30 -0
- package/src/wechat/notify.ts +93 -0
- package/src/wechat/payment.ts +177 -0
- package/src/wechat/plugin.ts +59 -0
- package/src/wechat/refund.ts +80 -0
- package/src/wechat/response.ts +54 -0
- package/src/wechat/types.ts +223 -0
- package/src/wechat/wechat.test.ts +393 -0
- package/dist/alipay-official.d.ts +0 -34
- package/dist/alipay-official.js +0 -206
- package/dist/handlers.d.ts +0 -45
- package/dist/handlers.js +0 -105
- package/dist/jeepay.d.ts +0 -39
- package/dist/jeepay.js +0 -206
- package/dist/lakala.d.ts +0 -41
- package/dist/lakala.js +0 -243
- package/dist/manager.d.ts +0 -67
- package/dist/manager.js +0 -538
- package/dist/mock-driver.d.ts +0 -22
- package/dist/mock-driver.js +0 -59
- package/dist/state-machine.d.ts +0 -41
- package/dist/state-machine.js +0 -60
- package/dist/store.d.ts +0 -33
- package/dist/store.js +0 -76
- package/dist/types.d.ts +0 -168
- package/dist/types.js +0 -11
- package/dist/verify.d.ts +0 -34
- package/dist/verify.js +0 -55
- package/dist/wechat-official.d.ts +0 -40
- package/dist/wechat-official.js +0 -208
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
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/refund.ts
|
|
47
|
+
function createRefund(client) {
|
|
48
|
+
return {
|
|
49
|
+
/**
|
|
50
|
+
* 申请退款(POST /v3/refund/domestic/refunds)
|
|
51
|
+
* @param params 退款参数(outTradeNo 与 transactionId 二选一)
|
|
52
|
+
* @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败
|
|
53
|
+
*/
|
|
54
|
+
async refund(params) {
|
|
55
|
+
const body = {
|
|
56
|
+
out_trade_no: params.outTradeNo,
|
|
57
|
+
transaction_id: params.transactionId,
|
|
58
|
+
out_refund_no: params.outRefundNo,
|
|
59
|
+
reason: params.reason,
|
|
60
|
+
notify_url: params.notifyUrl ?? client.config.notifyUrl,
|
|
61
|
+
funds_account: params.fundsAccount,
|
|
62
|
+
amount: {
|
|
63
|
+
refund: params.amount.refund,
|
|
64
|
+
total: params.amount.total,
|
|
65
|
+
currency: params.amount.currency ?? "CNY"
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
for (const key of Object.keys(body)) {
|
|
69
|
+
if (body[key] === void 0) delete body[key];
|
|
70
|
+
}
|
|
71
|
+
for (const key of Object.keys(body.amount)) {
|
|
72
|
+
if (body.amount[key] === void 0) delete body.amount[key];
|
|
73
|
+
}
|
|
74
|
+
const { data } = await unwrapV3(client.sdk.v3.refund.domestic.refunds.post(body));
|
|
75
|
+
return mapRefund(data);
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})
|
|
79
|
+
* @throws {WechatApiError} 退款单不存在等失败
|
|
80
|
+
*/
|
|
81
|
+
async queryRefund(params) {
|
|
82
|
+
const id = params.refundId ?? params.outRefundNo;
|
|
83
|
+
if (!id) {
|
|
84
|
+
throw new Error("WechatClient: queryRefund \u9700\u8981 outRefundNo \u6216 refundId");
|
|
85
|
+
}
|
|
86
|
+
const { data } = await unwrapV3(
|
|
87
|
+
client.sdk.client.request(`/v3/refund/domestic/refunds/${encodeURIComponent(id)}`, "GET")
|
|
88
|
+
);
|
|
89
|
+
return mapRefund(data);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
__name(createRefund, "createRefund");
|
|
94
|
+
function mapRefund(data) {
|
|
95
|
+
return {
|
|
96
|
+
refundId: data.refund_id,
|
|
97
|
+
outRefundNo: data.out_refund_no,
|
|
98
|
+
outTradeNo: data.out_trade_no,
|
|
99
|
+
transactionId: data.transaction_id,
|
|
100
|
+
status: data.status,
|
|
101
|
+
refundAmount: data.amount?.refund,
|
|
102
|
+
total: data.amount?.total,
|
|
103
|
+
userReceivedAmount: data.amount?.user_received_amount,
|
|
104
|
+
successTime: data.success_time,
|
|
105
|
+
reason: data.reason
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
__name(mapRefund, "mapRefund");
|
|
109
|
+
|
|
110
|
+
exports.createRefund = createRefund;
|
|
111
|
+
//# sourceMappingURL=refund.cjs.map
|
|
112
|
+
//# sourceMappingURL=refund.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/wechat/response.ts","../../src/wechat/refund.ts"],"names":[],"mappings":"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","file":"refund.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 type { WechatClient } from './client'\nimport { unwrapV3 } from './response'\nimport type {\n WechatRefundParams,\n WechatRefundQueryParams,\n WechatRefundResult,\n WechatRefundStatus\n} from './types'\n\n/**\n * 微信退款(APIv3)\n *\n * 覆盖申请退款与退款状态查询。\n * ⚠️ 退款结果以异步通知(refund.irqevent)或 queryRefund 为准。\n */\nexport function createRefund(client: WechatClient) {\n return {\n /**\n * 申请退款(POST /v3/refund/domestic/refunds)\n * @param params 退款参数(outTradeNo 与 transactionId 二选一)\n * @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败\n */\n async refund(params: WechatRefundParams): Promise<WechatRefundResult> {\n const body: Record<string, any> = {\n out_trade_no: params.outTradeNo,\n transaction_id: params.transactionId,\n out_refund_no: params.outRefundNo,\n reason: params.reason,\n notify_url: params.notifyUrl ?? client.config.notifyUrl,\n funds_account: params.fundsAccount,\n amount: {\n refund: params.amount.refund,\n total: params.amount.total,\n currency: params.amount.currency ?? 'CNY'\n }\n }\n // 移除 undefined 字段\n for (const key of Object.keys(body)) {\n if (body[key] === undefined) delete body[key]\n }\n for (const key of Object.keys(body.amount)) {\n if ((body.amount as any)[key] === undefined) delete (body.amount as any)[key]\n }\n\n const { data } = await unwrapV3(client.sdk.v3.refund.domestic.refunds.post(body))\n return mapRefund(data)\n },\n\n /**\n * 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})\n * @throws {WechatApiError} 退款单不存在等失败\n */\n async queryRefund(params: WechatRefundQueryParams): Promise<WechatRefundResult> {\n const id = params.refundId ?? params.outRefundNo\n if (!id) {\n throw new Error('WechatClient: queryRefund 需要 outRefundNo 或 refundId')\n }\n const { data } = await unwrapV3(\n client.sdk.client.request(`/v3/refund/domestic/refunds/${encodeURIComponent(id)}`, 'GET')\n )\n return mapRefund(data)\n }\n }\n}\n\n/** snake_case 响应映射 */\nfunction mapRefund(data: Record<string, any>): WechatRefundResult {\n return {\n refundId: data.refund_id,\n outRefundNo: data.out_refund_no,\n outTradeNo: data.out_trade_no,\n transactionId: data.transaction_id,\n status: data.status as WechatRefundStatus,\n refundAmount: data.amount?.refund,\n total: data.amount?.total,\n userReceivedAmount: data.amount?.user_received_amount,\n successTime: data.success_time,\n reason: data.reason\n }\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WechatClient } from './client.cjs';
|
|
2
|
+
import { WechatRefundParams, WechatRefundResult, WechatRefundQueryParams } from './types.cjs';
|
|
3
|
+
import 'wechatpay-axios-plugin';
|
|
4
|
+
import './config.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 微信退款(APIv3)
|
|
8
|
+
*
|
|
9
|
+
* 覆盖申请退款与退款状态查询。
|
|
10
|
+
* ⚠️ 退款结果以异步通知(refund.irqevent)或 queryRefund 为准。
|
|
11
|
+
*/
|
|
12
|
+
declare function createRefund(client: WechatClient): {
|
|
13
|
+
/**
|
|
14
|
+
* 申请退款(POST /v3/refund/domestic/refunds)
|
|
15
|
+
* @param params 退款参数(outTradeNo 与 transactionId 二选一)
|
|
16
|
+
* @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败
|
|
17
|
+
*/
|
|
18
|
+
refund(params: WechatRefundParams): Promise<WechatRefundResult>;
|
|
19
|
+
/**
|
|
20
|
+
* 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})
|
|
21
|
+
* @throws {WechatApiError} 退款单不存在等失败
|
|
22
|
+
*/
|
|
23
|
+
queryRefund(params: WechatRefundQueryParams): Promise<WechatRefundResult>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { createRefund };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WechatClient } from './client.js';
|
|
2
|
+
import { WechatRefundParams, WechatRefundResult, WechatRefundQueryParams } from './types.js';
|
|
3
|
+
import 'wechatpay-axios-plugin';
|
|
4
|
+
import './config.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 微信退款(APIv3)
|
|
8
|
+
*
|
|
9
|
+
* 覆盖申请退款与退款状态查询。
|
|
10
|
+
* ⚠️ 退款结果以异步通知(refund.irqevent)或 queryRefund 为准。
|
|
11
|
+
*/
|
|
12
|
+
declare function createRefund(client: WechatClient): {
|
|
13
|
+
/**
|
|
14
|
+
* 申请退款(POST /v3/refund/domestic/refunds)
|
|
15
|
+
* @param params 退款参数(outTradeNo 与 transactionId 二选一)
|
|
16
|
+
* @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败
|
|
17
|
+
*/
|
|
18
|
+
refund(params: WechatRefundParams): Promise<WechatRefundResult>;
|
|
19
|
+
/**
|
|
20
|
+
* 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})
|
|
21
|
+
* @throws {WechatApiError} 退款单不存在等失败
|
|
22
|
+
*/
|
|
23
|
+
queryRefund(params: WechatRefundQueryParams): Promise<WechatRefundResult>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { createRefund };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// packages/payment/src/wechat/response.ts
|
|
5
|
+
var _WechatApiError = class _WechatApiError extends Error {
|
|
6
|
+
constructor(message, status, code) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "WechatApiError";
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.code = code;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
__name(_WechatApiError, "WechatApiError");
|
|
14
|
+
var WechatApiError = _WechatApiError;
|
|
15
|
+
function toWechatApiError(error) {
|
|
16
|
+
if (error instanceof WechatApiError) return error;
|
|
17
|
+
const axiosError = error;
|
|
18
|
+
const status = axiosError?.response?.status;
|
|
19
|
+
const bizCode = axiosError?.response?.data?.code;
|
|
20
|
+
const bizMessage = axiosError?.response?.data?.message;
|
|
21
|
+
if (status !== void 0) {
|
|
22
|
+
return new WechatApiError(
|
|
23
|
+
`\u5FAE\u4FE1\u652F\u4ED8\u63A5\u53E3\u8C03\u7528\u5931\u8D25: ${bizMessage ?? axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"} (${status}${bizCode ? `, ${bizCode}` : ""})`,
|
|
24
|
+
status,
|
|
25
|
+
bizCode ?? String(status)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return new WechatApiError(
|
|
29
|
+
`\u5FAE\u4FE1\u652F\u4ED8\u8BF7\u6C42\u5931\u8D25: ${axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"}${axiosError?.code ? ` (${axiosError.code})` : ""}`,
|
|
30
|
+
void 0,
|
|
31
|
+
axiosError?.code ?? "NETWORK_ERROR"
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
__name(toWechatApiError, "toWechatApiError");
|
|
35
|
+
async function unwrapV3(promise) {
|
|
36
|
+
try {
|
|
37
|
+
return await promise;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
throw toWechatApiError(error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
__name(unwrapV3, "unwrapV3");
|
|
43
|
+
|
|
44
|
+
// packages/payment/src/wechat/refund.ts
|
|
45
|
+
function createRefund(client) {
|
|
46
|
+
return {
|
|
47
|
+
/**
|
|
48
|
+
* 申请退款(POST /v3/refund/domestic/refunds)
|
|
49
|
+
* @param params 退款参数(outTradeNo 与 transactionId 二选一)
|
|
50
|
+
* @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败
|
|
51
|
+
*/
|
|
52
|
+
async refund(params) {
|
|
53
|
+
const body = {
|
|
54
|
+
out_trade_no: params.outTradeNo,
|
|
55
|
+
transaction_id: params.transactionId,
|
|
56
|
+
out_refund_no: params.outRefundNo,
|
|
57
|
+
reason: params.reason,
|
|
58
|
+
notify_url: params.notifyUrl ?? client.config.notifyUrl,
|
|
59
|
+
funds_account: params.fundsAccount,
|
|
60
|
+
amount: {
|
|
61
|
+
refund: params.amount.refund,
|
|
62
|
+
total: params.amount.total,
|
|
63
|
+
currency: params.amount.currency ?? "CNY"
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
for (const key of Object.keys(body)) {
|
|
67
|
+
if (body[key] === void 0) delete body[key];
|
|
68
|
+
}
|
|
69
|
+
for (const key of Object.keys(body.amount)) {
|
|
70
|
+
if (body.amount[key] === void 0) delete body.amount[key];
|
|
71
|
+
}
|
|
72
|
+
const { data } = await unwrapV3(client.sdk.v3.refund.domestic.refunds.post(body));
|
|
73
|
+
return mapRefund(data);
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})
|
|
77
|
+
* @throws {WechatApiError} 退款单不存在等失败
|
|
78
|
+
*/
|
|
79
|
+
async queryRefund(params) {
|
|
80
|
+
const id = params.refundId ?? params.outRefundNo;
|
|
81
|
+
if (!id) {
|
|
82
|
+
throw new Error("WechatClient: queryRefund \u9700\u8981 outRefundNo \u6216 refundId");
|
|
83
|
+
}
|
|
84
|
+
const { data } = await unwrapV3(
|
|
85
|
+
client.sdk.client.request(`/v3/refund/domestic/refunds/${encodeURIComponent(id)}`, "GET")
|
|
86
|
+
);
|
|
87
|
+
return mapRefund(data);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
__name(createRefund, "createRefund");
|
|
92
|
+
function mapRefund(data) {
|
|
93
|
+
return {
|
|
94
|
+
refundId: data.refund_id,
|
|
95
|
+
outRefundNo: data.out_refund_no,
|
|
96
|
+
outTradeNo: data.out_trade_no,
|
|
97
|
+
transactionId: data.transaction_id,
|
|
98
|
+
status: data.status,
|
|
99
|
+
refundAmount: data.amount?.refund,
|
|
100
|
+
total: data.amount?.total,
|
|
101
|
+
userReceivedAmount: data.amount?.user_received_amount,
|
|
102
|
+
successTime: data.success_time,
|
|
103
|
+
reason: data.reason
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
__name(mapRefund, "mapRefund");
|
|
107
|
+
|
|
108
|
+
export { createRefund };
|
|
109
|
+
//# sourceMappingURL=refund.js.map
|
|
110
|
+
//# sourceMappingURL=refund.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/wechat/response.ts","../../src/wechat/refund.ts"],"names":[],"mappings":"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","file":"refund.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 type { WechatClient } from './client'\nimport { unwrapV3 } from './response'\nimport type {\n WechatRefundParams,\n WechatRefundQueryParams,\n WechatRefundResult,\n WechatRefundStatus\n} from './types'\n\n/**\n * 微信退款(APIv3)\n *\n * 覆盖申请退款与退款状态查询。\n * ⚠️ 退款结果以异步通知(refund.irqevent)或 queryRefund 为准。\n */\nexport function createRefund(client: WechatClient) {\n return {\n /**\n * 申请退款(POST /v3/refund/domestic/refunds)\n * @param params 退款参数(outTradeNo 与 transactionId 二选一)\n * @throws {WechatApiError} 参数错误、余额不足、订单不可退等失败\n */\n async refund(params: WechatRefundParams): Promise<WechatRefundResult> {\n const body: Record<string, any> = {\n out_trade_no: params.outTradeNo,\n transaction_id: params.transactionId,\n out_refund_no: params.outRefundNo,\n reason: params.reason,\n notify_url: params.notifyUrl ?? client.config.notifyUrl,\n funds_account: params.fundsAccount,\n amount: {\n refund: params.amount.refund,\n total: params.amount.total,\n currency: params.amount.currency ?? 'CNY'\n }\n }\n // 移除 undefined 字段\n for (const key of Object.keys(body)) {\n if (body[key] === undefined) delete body[key]\n }\n for (const key of Object.keys(body.amount)) {\n if ((body.amount as any)[key] === undefined) delete (body.amount as any)[key]\n }\n\n const { data } = await unwrapV3(client.sdk.v3.refund.domestic.refunds.post(body))\n return mapRefund(data)\n },\n\n /**\n * 查询退款(GET /v3/refund/domestic/refunds/{out_refund_no | refund_id})\n * @throws {WechatApiError} 退款单不存在等失败\n */\n async queryRefund(params: WechatRefundQueryParams): Promise<WechatRefundResult> {\n const id = params.refundId ?? params.outRefundNo\n if (!id) {\n throw new Error('WechatClient: queryRefund 需要 outRefundNo 或 refundId')\n }\n const { data } = await unwrapV3(\n client.sdk.client.request(`/v3/refund/domestic/refunds/${encodeURIComponent(id)}`, 'GET')\n )\n return mapRefund(data)\n }\n }\n}\n\n/** snake_case 响应映射 */\nfunction mapRefund(data: Record<string, any>): WechatRefundResult {\n return {\n refundId: data.refund_id,\n outRefundNo: data.out_refund_no,\n outTradeNo: data.out_trade_no,\n transactionId: data.transaction_id,\n status: data.status as WechatRefundStatus,\n refundAmount: data.amount?.refund,\n total: data.amount?.total,\n userReceivedAmount: data.amount?.user_received_amount,\n successTime: data.success_time,\n reason: data.reason\n }\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
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
|
+
exports.WechatApiError = WechatApiError;
|
|
47
|
+
exports.toWechatApiError = toWechatApiError;
|
|
48
|
+
exports.unwrapV3 = unwrapV3;
|
|
49
|
+
//# sourceMappingURL=response.cjs.map
|
|
50
|
+
//# sourceMappingURL=response.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/wechat/response.ts"],"names":[],"mappings":";;;;;;AAOO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EAMxC,WAAA,CAAY,OAAA,EAAiB,MAAA,EAA4B,IAAA,EAAc;AACrE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;AAZ0C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAnC,IAAM,cAAA,GAAN;AAeA,SAAS,iBAAiB,KAAA,EAAgC;AAC/D,EAAA,IAAI,KAAA,YAAiB,gBAAgB,OAAO,KAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,KAAA;AAKnB,EAAA,MAAM,MAAA,GAAS,YAAY,QAAA,EAAU,MAAA;AACrC,EAAA,MAAM,OAAA,GAAU,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,IAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,OAAA;AAC/C,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,IAAI,cAAA;AAAA,MACT,CAAA,8DAAA,EAAe,UAAA,IAAc,UAAA,EAAY,OAAA,IAAW,0BAAM,CAAA,EAAA,EAAK,MAAM,CAAA,EAAG,OAAA,GAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,CAAA;AAAA,MACrG,MAAA;AAAA,MACA,OAAA,IAAW,OAAO,MAAM;AAAA,KAC1B;AAAA,EACF;AACA,EAAA,OAAO,IAAI,cAAA;AAAA,IACT,CAAA,kDAAA,EAAa,UAAA,EAAY,OAAA,IAAW,0BAAM,CAAA,EAAG,UAAA,EAAY,IAAA,GAAO,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA,IAC5F,MAAA;AAAA,IACA,YAAY,IAAA,IAAQ;AAAA,GACtB;AACF;AAtBgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAyBhB,eAAsB,SAAY,OAAA,EAAqC;AACrE,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAA;AAAA,EACf,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,EAC9B;AACF;AANsB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA","file":"response.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"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 微信支付 APIv3 错误归一化。
|
|
3
|
+
*
|
|
4
|
+
* v3 接口没有"业务体 code"约定:HTTP 2xx 即成功,失败以
|
|
5
|
+
* 非 2xx 状态码 + JSON body {code, message} 表达(axios 会抛错)。
|
|
6
|
+
* 本模块把 axios 错误统一转换为 WechatApiError。
|
|
7
|
+
*/
|
|
8
|
+
declare class WechatApiError extends Error {
|
|
9
|
+
/** HTTP 状态码(网络层错误时为 undefined) */
|
|
10
|
+
readonly status?: number;
|
|
11
|
+
/** 错误码,如 PARAM_ERROR / RESOURCE_NOT_EXISTS / NETWORK_ERROR */
|
|
12
|
+
readonly code: string;
|
|
13
|
+
constructor(message: string, status: number | undefined, code: string);
|
|
14
|
+
}
|
|
15
|
+
/** 将任意请求异常归一化为 WechatApiError */
|
|
16
|
+
declare function toWechatApiError(error: unknown): WechatApiError;
|
|
17
|
+
/** 包装请求 promise:失败时抛出 WechatApiError */
|
|
18
|
+
declare function unwrapV3<T>(promise: PromiseLike<T>): Promise<T>;
|
|
19
|
+
|
|
20
|
+
export { WechatApiError, toWechatApiError, unwrapV3 };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 微信支付 APIv3 错误归一化。
|
|
3
|
+
*
|
|
4
|
+
* v3 接口没有"业务体 code"约定:HTTP 2xx 即成功,失败以
|
|
5
|
+
* 非 2xx 状态码 + JSON body {code, message} 表达(axios 会抛错)。
|
|
6
|
+
* 本模块把 axios 错误统一转换为 WechatApiError。
|
|
7
|
+
*/
|
|
8
|
+
declare class WechatApiError extends Error {
|
|
9
|
+
/** HTTP 状态码(网络层错误时为 undefined) */
|
|
10
|
+
readonly status?: number;
|
|
11
|
+
/** 错误码,如 PARAM_ERROR / RESOURCE_NOT_EXISTS / NETWORK_ERROR */
|
|
12
|
+
readonly code: string;
|
|
13
|
+
constructor(message: string, status: number | undefined, code: string);
|
|
14
|
+
}
|
|
15
|
+
/** 将任意请求异常归一化为 WechatApiError */
|
|
16
|
+
declare function toWechatApiError(error: unknown): WechatApiError;
|
|
17
|
+
/** 包装请求 promise:失败时抛出 WechatApiError */
|
|
18
|
+
declare function unwrapV3<T>(promise: PromiseLike<T>): Promise<T>;
|
|
19
|
+
|
|
20
|
+
export { WechatApiError, toWechatApiError, unwrapV3 };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// packages/payment/src/wechat/response.ts
|
|
5
|
+
var _WechatApiError = class _WechatApiError extends Error {
|
|
6
|
+
constructor(message, status, code) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = "WechatApiError";
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.code = code;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
__name(_WechatApiError, "WechatApiError");
|
|
14
|
+
var WechatApiError = _WechatApiError;
|
|
15
|
+
function toWechatApiError(error) {
|
|
16
|
+
if (error instanceof WechatApiError) return error;
|
|
17
|
+
const axiosError = error;
|
|
18
|
+
const status = axiosError?.response?.status;
|
|
19
|
+
const bizCode = axiosError?.response?.data?.code;
|
|
20
|
+
const bizMessage = axiosError?.response?.data?.message;
|
|
21
|
+
if (status !== void 0) {
|
|
22
|
+
return new WechatApiError(
|
|
23
|
+
`\u5FAE\u4FE1\u652F\u4ED8\u63A5\u53E3\u8C03\u7528\u5931\u8D25: ${bizMessage ?? axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"} (${status}${bizCode ? `, ${bizCode}` : ""})`,
|
|
24
|
+
status,
|
|
25
|
+
bizCode ?? String(status)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return new WechatApiError(
|
|
29
|
+
`\u5FAE\u4FE1\u652F\u4ED8\u8BF7\u6C42\u5931\u8D25: ${axiosError?.message ?? "\u672A\u77E5\u9519\u8BEF"}${axiosError?.code ? ` (${axiosError.code})` : ""}`,
|
|
30
|
+
void 0,
|
|
31
|
+
axiosError?.code ?? "NETWORK_ERROR"
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
__name(toWechatApiError, "toWechatApiError");
|
|
35
|
+
async function unwrapV3(promise) {
|
|
36
|
+
try {
|
|
37
|
+
return await promise;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
throw toWechatApiError(error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
__name(unwrapV3, "unwrapV3");
|
|
43
|
+
|
|
44
|
+
export { WechatApiError, toWechatApiError, unwrapV3 };
|
|
45
|
+
//# sourceMappingURL=response.js.map
|
|
46
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/wechat/response.ts"],"names":[],"mappings":";;;;AAOO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EAMxC,WAAA,CAAY,OAAA,EAAiB,MAAA,EAA4B,IAAA,EAAc;AACrE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;AAZ0C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAnC,IAAM,cAAA,GAAN;AAeA,SAAS,iBAAiB,KAAA,EAAgC;AAC/D,EAAA,IAAI,KAAA,YAAiB,gBAAgB,OAAO,KAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,KAAA;AAKnB,EAAA,MAAM,MAAA,GAAS,YAAY,QAAA,EAAU,MAAA;AACrC,EAAA,MAAM,OAAA,GAAU,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,IAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,OAAA;AAC/C,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,IAAI,cAAA;AAAA,MACT,CAAA,8DAAA,EAAe,UAAA,IAAc,UAAA,EAAY,OAAA,IAAW,0BAAM,CAAA,EAAA,EAAK,MAAM,CAAA,EAAG,OAAA,GAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,CAAA;AAAA,MACrG,MAAA;AAAA,MACA,OAAA,IAAW,OAAO,MAAM;AAAA,KAC1B;AAAA,EACF;AACA,EAAA,OAAO,IAAI,cAAA;AAAA,IACT,CAAA,kDAAA,EAAa,UAAA,EAAY,OAAA,IAAW,0BAAM,CAAA,EAAG,UAAA,EAAY,IAAA,GAAO,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA,IAC5F,MAAA;AAAA,IACA,YAAY,IAAA,IAAQ;AAAA,GACtB;AACF;AAtBgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAyBhB,eAAsB,SAAY,OAAA,EAAqC;AACrE,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAA;AAAA,EACf,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,EAC9B;AACF;AANsB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA","file":"response.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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
|