@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,104 @@
|
|
|
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/alipay/response.ts
|
|
7
|
+
var _AlipayApiError = class _AlipayApiError extends Error {
|
|
8
|
+
constructor(apiName, code, subCode, subMsg, msg) {
|
|
9
|
+
super(`\u652F\u4ED8\u5B9D\u63A5\u53E3 ${apiName} \u8C03\u7528\u5931\u8D25: ${subMsg ?? msg ?? "\u672A\u77E5\u9519\u8BEF"} (code=${code}${subCode ? `, sub_code=${subCode}` : ""})`);
|
|
10
|
+
this.name = "AlipayApiError";
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.subCode = subCode;
|
|
13
|
+
this.subMsg = subMsg;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
__name(_AlipayApiError, "AlipayApiError");
|
|
17
|
+
var AlipayApiError = _AlipayApiError;
|
|
18
|
+
function toResponseKey(apiName) {
|
|
19
|
+
return `${apiName.replace(/\./g, "_")}_response`;
|
|
20
|
+
}
|
|
21
|
+
__name(toResponseKey, "toResponseKey");
|
|
22
|
+
function unwrapResponse(raw, apiName) {
|
|
23
|
+
const outer = raw;
|
|
24
|
+
const body = (outer && outer[toResponseKey(apiName)]) ?? outer;
|
|
25
|
+
if (!body || typeof body !== "object") {
|
|
26
|
+
throw new AlipayApiError(apiName, "INVALID_RESPONSE", void 0, void 0, "\u54CD\u5E94\u4F53\u683C\u5F0F\u5F02\u5E38");
|
|
27
|
+
}
|
|
28
|
+
if (body.code !== "10000") {
|
|
29
|
+
throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg);
|
|
30
|
+
}
|
|
31
|
+
return body;
|
|
32
|
+
}
|
|
33
|
+
__name(unwrapResponse, "unwrapResponse");
|
|
34
|
+
|
|
35
|
+
// packages/payment/src/alipay/refund.ts
|
|
36
|
+
function createRefund(client) {
|
|
37
|
+
return {
|
|
38
|
+
/**
|
|
39
|
+
* 交易退款 (alipay.trade.refund)
|
|
40
|
+
* 交易发生后 12 个月内可退款,退款资金原路返回。
|
|
41
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
42
|
+
*/
|
|
43
|
+
async refund(params) {
|
|
44
|
+
const alipayResponse = unwrapResponse(
|
|
45
|
+
await client.sdk.exec("alipay.trade.refund", {
|
|
46
|
+
bizContent: params
|
|
47
|
+
}),
|
|
48
|
+
"alipay.trade.refund"
|
|
49
|
+
);
|
|
50
|
+
return {
|
|
51
|
+
tradeNo: alipayResponse.trade_no,
|
|
52
|
+
outTradeNo: alipayResponse.out_trade_no,
|
|
53
|
+
buyerLogonId: alipayResponse.buyer_logon_id,
|
|
54
|
+
refundAmount: alipayResponse.refund_fee,
|
|
55
|
+
fundChange: alipayResponse.fund_change ?? "N",
|
|
56
|
+
gmtRefundPay: alipayResponse.gmt_refund_pay ?? "",
|
|
57
|
+
refundDetailItemList: alipayResponse.refund_detail_item_list ?? null
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* 退款查询 (alipay.trade.fastpay.refund.query)
|
|
62
|
+
* 查询退款状态,确认退款是否成功。
|
|
63
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
64
|
+
*/
|
|
65
|
+
async queryRefund(params) {
|
|
66
|
+
const alipayResponse = unwrapResponse(
|
|
67
|
+
await client.sdk.exec("alipay.trade.fastpay.refund.query", {
|
|
68
|
+
bizContent: params
|
|
69
|
+
}),
|
|
70
|
+
"alipay.trade.fastpay.refund.query"
|
|
71
|
+
);
|
|
72
|
+
return {
|
|
73
|
+
tradeNo: alipayResponse.trade_no,
|
|
74
|
+
outTradeNo: alipayResponse.out_trade_no,
|
|
75
|
+
refundAmount: alipayResponse.refund_amount,
|
|
76
|
+
refundStatus: alipayResponse.refund_status,
|
|
77
|
+
outRequestNo: alipayResponse.out_request_no,
|
|
78
|
+
refundReason: alipayResponse.refund_reason ?? ""
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* 关闭交易 (alipay.trade.close)
|
|
83
|
+
* 关闭未支付的订单。
|
|
84
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
85
|
+
*/
|
|
86
|
+
async close(params) {
|
|
87
|
+
const alipayResponse = unwrapResponse(
|
|
88
|
+
await client.sdk.exec("alipay.trade.close", {
|
|
89
|
+
bizContent: params
|
|
90
|
+
}),
|
|
91
|
+
"alipay.trade.close"
|
|
92
|
+
);
|
|
93
|
+
return {
|
|
94
|
+
tradeNo: alipayResponse.trade_no,
|
|
95
|
+
outTradeNo: alipayResponse.out_trade_no
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
__name(createRefund, "createRefund");
|
|
101
|
+
|
|
102
|
+
exports.createRefund = createRefund;
|
|
103
|
+
//# sourceMappingURL=refund.cjs.map
|
|
104
|
+
//# sourceMappingURL=refund.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/response.ts","../../src/alipay/refund.ts"],"names":[],"mappings":"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","file":"refund.cjs","sourcesContent":["/**\n * 支付宝开放接口响应解包与业务错误检查。\n *\n * 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内\n * code != '10000' 并携带 sub_code/sub_msg,必须显式检查,\n * 否则会把失败结果当成功映射(字段全部 undefined)。\n */\nexport class AlipayApiError extends Error {\n readonly code: string\n readonly subCode?: string\n readonly subMsg?: string\n\n constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined) {\n super(`支付宝接口 ${apiName} 调用失败: ${subMsg ?? msg ?? '未知错误'} (code=${code}${subCode ? `, sub_code=${subCode}` : ''})`)\n this.name = 'AlipayApiError'\n this.code = code\n this.subCode = subCode\n this.subMsg = subMsg\n }\n}\n\n/** alipay.trade.page.pay -> alipay_trade_page_pay_response */\nfunction toResponseKey(apiName: string): string {\n return `${apiName.replace(/\\./g, '_')}_response`\n}\n\n/**\n * 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。\n */\nexport function unwrapResponse(raw: unknown, apiName: string): Record<string, any> {\n const outer = raw as Record<string, any> | null | undefined\n const body = (outer && outer[toResponseKey(apiName)]) ?? outer\n if (!body || typeof body !== 'object') {\n throw new AlipayApiError(apiName, 'INVALID_RESPONSE', undefined, undefined, '响应体格式异常')\n }\n if (body.code !== '10000') {\n throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg)\n }\n return body\n}\n","import type { AlipayClient } from './client'\nimport { unwrapResponse } from './response'\nimport type {\n AlipayRefundParams,\n AlipayRefundResult,\n AlipayRefundQueryParams,\n AlipayRefundQueryResult,\n AlipayCloseParams,\n AlipayCloseResult\n} from './types'\n\n/**\n * 退款与交易关闭\n *\n * 包含退款、退款查询、交易关闭的完整退款生命周期管理。\n */\nexport function createRefund(client: AlipayClient) {\n return {\n /**\n * 交易退款 (alipay.trade.refund)\n * 交易发生后 12 个月内可退款,退款资金原路返回。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async refund(params: AlipayRefundParams): Promise<AlipayRefundResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.refund', {\n bizContent: params\n }),\n 'alipay.trade.refund'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no,\n buyerLogonId: alipayResponse.buyer_logon_id,\n refundAmount: alipayResponse.refund_fee,\n fundChange: alipayResponse.fund_change ?? 'N',\n gmtRefundPay: alipayResponse.gmt_refund_pay ?? '',\n refundDetailItemList: alipayResponse.refund_detail_item_list ?? null\n }\n },\n\n /**\n * 退款查询 (alipay.trade.fastpay.refund.query)\n * 查询退款状态,确认退款是否成功。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async queryRefund(params: AlipayRefundQueryParams): Promise<AlipayRefundQueryResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.fastpay.refund.query', {\n bizContent: params\n }),\n 'alipay.trade.fastpay.refund.query'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no,\n refundAmount: alipayResponse.refund_amount,\n refundStatus: alipayResponse.refund_status,\n outRequestNo: alipayResponse.out_request_no,\n refundReason: alipayResponse.refund_reason ?? ''\n }\n },\n\n /**\n * 关闭交易 (alipay.trade.close)\n * 关闭未支付的订单。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async close(params: AlipayCloseParams): Promise<AlipayCloseResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.close', {\n bizContent: params\n }),\n 'alipay.trade.close'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no\n }\n }\n }\n}"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AlipayClient } from './client.cjs';
|
|
2
|
+
import { AlipayRefundParams, AlipayRefundResult, AlipayRefundQueryParams, AlipayRefundQueryResult, AlipayCloseParams, AlipayCloseResult } from './types.cjs';
|
|
3
|
+
import 'alipay-sdk';
|
|
4
|
+
import './config.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 退款与交易关闭
|
|
8
|
+
*
|
|
9
|
+
* 包含退款、退款查询、交易关闭的完整退款生命周期管理。
|
|
10
|
+
*/
|
|
11
|
+
declare function createRefund(client: AlipayClient): {
|
|
12
|
+
/**
|
|
13
|
+
* 交易退款 (alipay.trade.refund)
|
|
14
|
+
* 交易发生后 12 个月内可退款,退款资金原路返回。
|
|
15
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
16
|
+
*/
|
|
17
|
+
refund(params: AlipayRefundParams): Promise<AlipayRefundResult>;
|
|
18
|
+
/**
|
|
19
|
+
* 退款查询 (alipay.trade.fastpay.refund.query)
|
|
20
|
+
* 查询退款状态,确认退款是否成功。
|
|
21
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
22
|
+
*/
|
|
23
|
+
queryRefund(params: AlipayRefundQueryParams): Promise<AlipayRefundQueryResult>;
|
|
24
|
+
/**
|
|
25
|
+
* 关闭交易 (alipay.trade.close)
|
|
26
|
+
* 关闭未支付的订单。
|
|
27
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
28
|
+
*/
|
|
29
|
+
close(params: AlipayCloseParams): Promise<AlipayCloseResult>;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { createRefund };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AlipayClient } from './client.js';
|
|
2
|
+
import { AlipayRefundParams, AlipayRefundResult, AlipayRefundQueryParams, AlipayRefundQueryResult, AlipayCloseParams, AlipayCloseResult } from './types.js';
|
|
3
|
+
import 'alipay-sdk';
|
|
4
|
+
import './config.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 退款与交易关闭
|
|
8
|
+
*
|
|
9
|
+
* 包含退款、退款查询、交易关闭的完整退款生命周期管理。
|
|
10
|
+
*/
|
|
11
|
+
declare function createRefund(client: AlipayClient): {
|
|
12
|
+
/**
|
|
13
|
+
* 交易退款 (alipay.trade.refund)
|
|
14
|
+
* 交易发生后 12 个月内可退款,退款资金原路返回。
|
|
15
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
16
|
+
*/
|
|
17
|
+
refund(params: AlipayRefundParams): Promise<AlipayRefundResult>;
|
|
18
|
+
/**
|
|
19
|
+
* 退款查询 (alipay.trade.fastpay.refund.query)
|
|
20
|
+
* 查询退款状态,确认退款是否成功。
|
|
21
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
22
|
+
*/
|
|
23
|
+
queryRefund(params: AlipayRefundQueryParams): Promise<AlipayRefundQueryResult>;
|
|
24
|
+
/**
|
|
25
|
+
* 关闭交易 (alipay.trade.close)
|
|
26
|
+
* 关闭未支付的订单。
|
|
27
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
28
|
+
*/
|
|
29
|
+
close(params: AlipayCloseParams): Promise<AlipayCloseResult>;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { createRefund };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// packages/payment/src/alipay/response.ts
|
|
5
|
+
var _AlipayApiError = class _AlipayApiError extends Error {
|
|
6
|
+
constructor(apiName, code, subCode, subMsg, msg) {
|
|
7
|
+
super(`\u652F\u4ED8\u5B9D\u63A5\u53E3 ${apiName} \u8C03\u7528\u5931\u8D25: ${subMsg ?? msg ?? "\u672A\u77E5\u9519\u8BEF"} (code=${code}${subCode ? `, sub_code=${subCode}` : ""})`);
|
|
8
|
+
this.name = "AlipayApiError";
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.subCode = subCode;
|
|
11
|
+
this.subMsg = subMsg;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
__name(_AlipayApiError, "AlipayApiError");
|
|
15
|
+
var AlipayApiError = _AlipayApiError;
|
|
16
|
+
function toResponseKey(apiName) {
|
|
17
|
+
return `${apiName.replace(/\./g, "_")}_response`;
|
|
18
|
+
}
|
|
19
|
+
__name(toResponseKey, "toResponseKey");
|
|
20
|
+
function unwrapResponse(raw, apiName) {
|
|
21
|
+
const outer = raw;
|
|
22
|
+
const body = (outer && outer[toResponseKey(apiName)]) ?? outer;
|
|
23
|
+
if (!body || typeof body !== "object") {
|
|
24
|
+
throw new AlipayApiError(apiName, "INVALID_RESPONSE", void 0, void 0, "\u54CD\u5E94\u4F53\u683C\u5F0F\u5F02\u5E38");
|
|
25
|
+
}
|
|
26
|
+
if (body.code !== "10000") {
|
|
27
|
+
throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg);
|
|
28
|
+
}
|
|
29
|
+
return body;
|
|
30
|
+
}
|
|
31
|
+
__name(unwrapResponse, "unwrapResponse");
|
|
32
|
+
|
|
33
|
+
// packages/payment/src/alipay/refund.ts
|
|
34
|
+
function createRefund(client) {
|
|
35
|
+
return {
|
|
36
|
+
/**
|
|
37
|
+
* 交易退款 (alipay.trade.refund)
|
|
38
|
+
* 交易发生后 12 个月内可退款,退款资金原路返回。
|
|
39
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
40
|
+
*/
|
|
41
|
+
async refund(params) {
|
|
42
|
+
const alipayResponse = unwrapResponse(
|
|
43
|
+
await client.sdk.exec("alipay.trade.refund", {
|
|
44
|
+
bizContent: params
|
|
45
|
+
}),
|
|
46
|
+
"alipay.trade.refund"
|
|
47
|
+
);
|
|
48
|
+
return {
|
|
49
|
+
tradeNo: alipayResponse.trade_no,
|
|
50
|
+
outTradeNo: alipayResponse.out_trade_no,
|
|
51
|
+
buyerLogonId: alipayResponse.buyer_logon_id,
|
|
52
|
+
refundAmount: alipayResponse.refund_fee,
|
|
53
|
+
fundChange: alipayResponse.fund_change ?? "N",
|
|
54
|
+
gmtRefundPay: alipayResponse.gmt_refund_pay ?? "",
|
|
55
|
+
refundDetailItemList: alipayResponse.refund_detail_item_list ?? null
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* 退款查询 (alipay.trade.fastpay.refund.query)
|
|
60
|
+
* 查询退款状态,确认退款是否成功。
|
|
61
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
62
|
+
*/
|
|
63
|
+
async queryRefund(params) {
|
|
64
|
+
const alipayResponse = unwrapResponse(
|
|
65
|
+
await client.sdk.exec("alipay.trade.fastpay.refund.query", {
|
|
66
|
+
bizContent: params
|
|
67
|
+
}),
|
|
68
|
+
"alipay.trade.fastpay.refund.query"
|
|
69
|
+
);
|
|
70
|
+
return {
|
|
71
|
+
tradeNo: alipayResponse.trade_no,
|
|
72
|
+
outTradeNo: alipayResponse.out_trade_no,
|
|
73
|
+
refundAmount: alipayResponse.refund_amount,
|
|
74
|
+
refundStatus: alipayResponse.refund_status,
|
|
75
|
+
outRequestNo: alipayResponse.out_request_no,
|
|
76
|
+
refundReason: alipayResponse.refund_reason ?? ""
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* 关闭交易 (alipay.trade.close)
|
|
81
|
+
* 关闭未支付的订单。
|
|
82
|
+
* @throws {AlipayApiError} 业务失败时抛出
|
|
83
|
+
*/
|
|
84
|
+
async close(params) {
|
|
85
|
+
const alipayResponse = unwrapResponse(
|
|
86
|
+
await client.sdk.exec("alipay.trade.close", {
|
|
87
|
+
bizContent: params
|
|
88
|
+
}),
|
|
89
|
+
"alipay.trade.close"
|
|
90
|
+
);
|
|
91
|
+
return {
|
|
92
|
+
tradeNo: alipayResponse.trade_no,
|
|
93
|
+
outTradeNo: alipayResponse.out_trade_no
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
__name(createRefund, "createRefund");
|
|
99
|
+
|
|
100
|
+
export { createRefund };
|
|
101
|
+
//# sourceMappingURL=refund.js.map
|
|
102
|
+
//# sourceMappingURL=refund.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/response.ts","../../src/alipay/refund.ts"],"names":[],"mappings":";;;;AAOO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EAKxC,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,OAAA,EAA6B,QAA4B,GAAA,EAAyB;AAC3H,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAS,OAAO,CAAA,2BAAA,EAAU,MAAA,IAAU,OAAO,0BAAM,CAAA,OAAA,EAAU,IAAI,CAAA,EAAG,OAAA,GAAU,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AACjH,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF,CAAA;AAZ0C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAnC,IAAM,cAAA,GAAN,eAAA;AAeP,SAAS,cAAc,OAAA,EAAyB;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,SAAA,CAAA;AACvC;AAFS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAOF,SAAS,cAAA,CAAe,KAAc,OAAA,EAAsC;AACjF,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,QAAQ,KAAA,IAAS,KAAA,CAAM,aAAA,CAAc,OAAO,CAAC,CAAA,KAAM,KAAA;AACzD,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,kBAAA,EAAoB,MAAA,EAAW,QAAW,4CAAS,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,KAAK,QAAA,EAAU,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,IAAA;AACT;AAVgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACbT,SAAS,aAAa,MAAA,EAAsB;AACjD,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,MAAM,OAAO,MAAA,EAAyD;AACpE,MAAA,MAAM,cAAA,GAAiB,cAAA;AAAA,QACrB,MAAM,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,qBAAA,EAAuB;AAAA,UAC3C,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,QACD;AAAA,OACF;AAEA,MAAA,OAAO;AAAA,QACL,SAAS,cAAA,CAAe,QAAA;AAAA,QACxB,YAAY,cAAA,CAAe,YAAA;AAAA,QAC3B,cAAc,cAAA,CAAe,cAAA;AAAA,QAC7B,cAAc,cAAA,CAAe,UAAA;AAAA,QAC7B,UAAA,EAAY,eAAe,WAAA,IAAe,GAAA;AAAA,QAC1C,YAAA,EAAc,eAAe,cAAA,IAAkB,EAAA;AAAA,QAC/C,oBAAA,EAAsB,eAAe,uBAAA,IAA2B;AAAA,OAClE;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,YAAY,MAAA,EAAmE;AACnF,MAAA,MAAM,cAAA,GAAiB,cAAA;AAAA,QACrB,MAAM,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,mCAAA,EAAqC;AAAA,UACzD,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,QACD;AAAA,OACF;AAEA,MAAA,OAAO;AAAA,QACL,SAAS,cAAA,CAAe,QAAA;AAAA,QACxB,YAAY,cAAA,CAAe,YAAA;AAAA,QAC3B,cAAc,cAAA,CAAe,aAAA;AAAA,QAC7B,cAAc,cAAA,CAAe,aAAA;AAAA,QAC7B,cAAc,cAAA,CAAe,cAAA;AAAA,QAC7B,YAAA,EAAc,eAAe,aAAA,IAAiB;AAAA,OAChD;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,MAAM,MAAA,EAAuD;AACjE,MAAA,MAAM,cAAA,GAAiB,cAAA;AAAA,QACrB,MAAM,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,oBAAA,EAAsB;AAAA,UAC1C,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,QACD;AAAA,OACF;AAEA,MAAA,OAAO;AAAA,QACL,SAAS,cAAA,CAAe,QAAA;AAAA,QACxB,YAAY,cAAA,CAAe;AAAA,OAC7B;AAAA,IACF;AAAA,GACF;AACF;AApEgB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA","file":"refund.js","sourcesContent":["/**\n * 支付宝开放接口响应解包与业务错误检查。\n *\n * 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内\n * code != '10000' 并携带 sub_code/sub_msg,必须显式检查,\n * 否则会把失败结果当成功映射(字段全部 undefined)。\n */\nexport class AlipayApiError extends Error {\n readonly code: string\n readonly subCode?: string\n readonly subMsg?: string\n\n constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined) {\n super(`支付宝接口 ${apiName} 调用失败: ${subMsg ?? msg ?? '未知错误'} (code=${code}${subCode ? `, sub_code=${subCode}` : ''})`)\n this.name = 'AlipayApiError'\n this.code = code\n this.subCode = subCode\n this.subMsg = subMsg\n }\n}\n\n/** alipay.trade.page.pay -> alipay_trade_page_pay_response */\nfunction toResponseKey(apiName: string): string {\n return `${apiName.replace(/\\./g, '_')}_response`\n}\n\n/**\n * 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。\n */\nexport function unwrapResponse(raw: unknown, apiName: string): Record<string, any> {\n const outer = raw as Record<string, any> | null | undefined\n const body = (outer && outer[toResponseKey(apiName)]) ?? outer\n if (!body || typeof body !== 'object') {\n throw new AlipayApiError(apiName, 'INVALID_RESPONSE', undefined, undefined, '响应体格式异常')\n }\n if (body.code !== '10000') {\n throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg)\n }\n return body\n}\n","import type { AlipayClient } from './client'\nimport { unwrapResponse } from './response'\nimport type {\n AlipayRefundParams,\n AlipayRefundResult,\n AlipayRefundQueryParams,\n AlipayRefundQueryResult,\n AlipayCloseParams,\n AlipayCloseResult\n} from './types'\n\n/**\n * 退款与交易关闭\n *\n * 包含退款、退款查询、交易关闭的完整退款生命周期管理。\n */\nexport function createRefund(client: AlipayClient) {\n return {\n /**\n * 交易退款 (alipay.trade.refund)\n * 交易发生后 12 个月内可退款,退款资金原路返回。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async refund(params: AlipayRefundParams): Promise<AlipayRefundResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.refund', {\n bizContent: params\n }),\n 'alipay.trade.refund'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no,\n buyerLogonId: alipayResponse.buyer_logon_id,\n refundAmount: alipayResponse.refund_fee,\n fundChange: alipayResponse.fund_change ?? 'N',\n gmtRefundPay: alipayResponse.gmt_refund_pay ?? '',\n refundDetailItemList: alipayResponse.refund_detail_item_list ?? null\n }\n },\n\n /**\n * 退款查询 (alipay.trade.fastpay.refund.query)\n * 查询退款状态,确认退款是否成功。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async queryRefund(params: AlipayRefundQueryParams): Promise<AlipayRefundQueryResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.fastpay.refund.query', {\n bizContent: params\n }),\n 'alipay.trade.fastpay.refund.query'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no,\n refundAmount: alipayResponse.refund_amount,\n refundStatus: alipayResponse.refund_status,\n outRequestNo: alipayResponse.out_request_no,\n refundReason: alipayResponse.refund_reason ?? ''\n }\n },\n\n /**\n * 关闭交易 (alipay.trade.close)\n * 关闭未支付的订单。\n * @throws {AlipayApiError} 业务失败时抛出\n */\n async close(params: AlipayCloseParams): Promise<AlipayCloseResult> {\n const alipayResponse = unwrapResponse(\n await client.sdk.exec('alipay.trade.close', {\n bizContent: params\n }),\n 'alipay.trade.close'\n )\n\n return {\n tradeNo: alipayResponse.trade_no,\n outTradeNo: alipayResponse.out_trade_no\n }\n }\n }\n}"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
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/alipay/response.ts
|
|
7
|
+
var _AlipayApiError = class _AlipayApiError extends Error {
|
|
8
|
+
constructor(apiName, code, subCode, subMsg, msg) {
|
|
9
|
+
super(`\u652F\u4ED8\u5B9D\u63A5\u53E3 ${apiName} \u8C03\u7528\u5931\u8D25: ${subMsg ?? msg ?? "\u672A\u77E5\u9519\u8BEF"} (code=${code}${subCode ? `, sub_code=${subCode}` : ""})`);
|
|
10
|
+
this.name = "AlipayApiError";
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.subCode = subCode;
|
|
13
|
+
this.subMsg = subMsg;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
__name(_AlipayApiError, "AlipayApiError");
|
|
17
|
+
var AlipayApiError = _AlipayApiError;
|
|
18
|
+
function toResponseKey(apiName) {
|
|
19
|
+
return `${apiName.replace(/\./g, "_")}_response`;
|
|
20
|
+
}
|
|
21
|
+
__name(toResponseKey, "toResponseKey");
|
|
22
|
+
function unwrapResponse(raw, apiName) {
|
|
23
|
+
const outer = raw;
|
|
24
|
+
const body = (outer && outer[toResponseKey(apiName)]) ?? outer;
|
|
25
|
+
if (!body || typeof body !== "object") {
|
|
26
|
+
throw new AlipayApiError(apiName, "INVALID_RESPONSE", void 0, void 0, "\u54CD\u5E94\u4F53\u683C\u5F0F\u5F02\u5E38");
|
|
27
|
+
}
|
|
28
|
+
if (body.code !== "10000") {
|
|
29
|
+
throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg);
|
|
30
|
+
}
|
|
31
|
+
return body;
|
|
32
|
+
}
|
|
33
|
+
__name(unwrapResponse, "unwrapResponse");
|
|
34
|
+
|
|
35
|
+
exports.AlipayApiError = AlipayApiError;
|
|
36
|
+
exports.unwrapResponse = unwrapResponse;
|
|
37
|
+
//# sourceMappingURL=response.cjs.map
|
|
38
|
+
//# sourceMappingURL=response.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/response.ts"],"names":[],"mappings":";;;;;;AAOO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EAKxC,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,OAAA,EAA6B,QAA4B,GAAA,EAAyB;AAC3H,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAS,OAAO,CAAA,2BAAA,EAAU,MAAA,IAAU,OAAO,0BAAM,CAAA,OAAA,EAAU,IAAI,CAAA,EAAG,OAAA,GAAU,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AACjH,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF,CAAA;AAZ0C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAnC,IAAM,cAAA,GAAN;AAeP,SAAS,cAAc,OAAA,EAAyB;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,SAAA,CAAA;AACvC;AAFS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAOF,SAAS,cAAA,CAAe,KAAc,OAAA,EAAsC;AACjF,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,QAAQ,KAAA,IAAS,KAAA,CAAM,aAAA,CAAc,OAAO,CAAC,CAAA,KAAM,KAAA;AACzD,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,kBAAA,EAAoB,MAAA,EAAW,QAAW,4CAAS,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,KAAK,QAAA,EAAU,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,IAAA;AACT;AAVgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA","file":"response.cjs","sourcesContent":["/**\n * 支付宝开放接口响应解包与业务错误检查。\n *\n * 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内\n * code != '10000' 并携带 sub_code/sub_msg,必须显式检查,\n * 否则会把失败结果当成功映射(字段全部 undefined)。\n */\nexport class AlipayApiError extends Error {\n readonly code: string\n readonly subCode?: string\n readonly subMsg?: string\n\n constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined) {\n super(`支付宝接口 ${apiName} 调用失败: ${subMsg ?? msg ?? '未知错误'} (code=${code}${subCode ? `, sub_code=${subCode}` : ''})`)\n this.name = 'AlipayApiError'\n this.code = code\n this.subCode = subCode\n this.subMsg = subMsg\n }\n}\n\n/** alipay.trade.page.pay -> alipay_trade_page_pay_response */\nfunction toResponseKey(apiName: string): string {\n return `${apiName.replace(/\\./g, '_')}_response`\n}\n\n/**\n * 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。\n */\nexport function unwrapResponse(raw: unknown, apiName: string): Record<string, any> {\n const outer = raw as Record<string, any> | null | undefined\n const body = (outer && outer[toResponseKey(apiName)]) ?? outer\n if (!body || typeof body !== 'object') {\n throw new AlipayApiError(apiName, 'INVALID_RESPONSE', undefined, undefined, '响应体格式异常')\n }\n if (body.code !== '10000') {\n throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg)\n }\n return body\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 支付宝开放接口响应解包与业务错误检查。
|
|
3
|
+
*
|
|
4
|
+
* 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内
|
|
5
|
+
* code != '10000' 并携带 sub_code/sub_msg,必须显式检查,
|
|
6
|
+
* 否则会把失败结果当成功映射(字段全部 undefined)。
|
|
7
|
+
*/
|
|
8
|
+
declare class AlipayApiError extends Error {
|
|
9
|
+
readonly code: string;
|
|
10
|
+
readonly subCode?: string;
|
|
11
|
+
readonly subMsg?: string;
|
|
12
|
+
constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。
|
|
16
|
+
*/
|
|
17
|
+
declare function unwrapResponse(raw: unknown, apiName: string): Record<string, any>;
|
|
18
|
+
|
|
19
|
+
export { AlipayApiError, unwrapResponse };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 支付宝开放接口响应解包与业务错误检查。
|
|
3
|
+
*
|
|
4
|
+
* 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内
|
|
5
|
+
* code != '10000' 并携带 sub_code/sub_msg,必须显式检查,
|
|
6
|
+
* 否则会把失败结果当成功映射(字段全部 undefined)。
|
|
7
|
+
*/
|
|
8
|
+
declare class AlipayApiError extends Error {
|
|
9
|
+
readonly code: string;
|
|
10
|
+
readonly subCode?: string;
|
|
11
|
+
readonly subMsg?: string;
|
|
12
|
+
constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。
|
|
16
|
+
*/
|
|
17
|
+
declare function unwrapResponse(raw: unknown, apiName: string): Record<string, any>;
|
|
18
|
+
|
|
19
|
+
export { AlipayApiError, unwrapResponse };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// packages/payment/src/alipay/response.ts
|
|
5
|
+
var _AlipayApiError = class _AlipayApiError extends Error {
|
|
6
|
+
constructor(apiName, code, subCode, subMsg, msg) {
|
|
7
|
+
super(`\u652F\u4ED8\u5B9D\u63A5\u53E3 ${apiName} \u8C03\u7528\u5931\u8D25: ${subMsg ?? msg ?? "\u672A\u77E5\u9519\u8BEF"} (code=${code}${subCode ? `, sub_code=${subCode}` : ""})`);
|
|
8
|
+
this.name = "AlipayApiError";
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.subCode = subCode;
|
|
11
|
+
this.subMsg = subMsg;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
__name(_AlipayApiError, "AlipayApiError");
|
|
15
|
+
var AlipayApiError = _AlipayApiError;
|
|
16
|
+
function toResponseKey(apiName) {
|
|
17
|
+
return `${apiName.replace(/\./g, "_")}_response`;
|
|
18
|
+
}
|
|
19
|
+
__name(toResponseKey, "toResponseKey");
|
|
20
|
+
function unwrapResponse(raw, apiName) {
|
|
21
|
+
const outer = raw;
|
|
22
|
+
const body = (outer && outer[toResponseKey(apiName)]) ?? outer;
|
|
23
|
+
if (!body || typeof body !== "object") {
|
|
24
|
+
throw new AlipayApiError(apiName, "INVALID_RESPONSE", void 0, void 0, "\u54CD\u5E94\u4F53\u683C\u5F0F\u5F02\u5E38");
|
|
25
|
+
}
|
|
26
|
+
if (body.code !== "10000") {
|
|
27
|
+
throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg);
|
|
28
|
+
}
|
|
29
|
+
return body;
|
|
30
|
+
}
|
|
31
|
+
__name(unwrapResponse, "unwrapResponse");
|
|
32
|
+
|
|
33
|
+
export { AlipayApiError, unwrapResponse };
|
|
34
|
+
//# sourceMappingURL=response.js.map
|
|
35
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/response.ts"],"names":[],"mappings":";;;;AAOO,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,KAAA,CAAM;AAAA,EAKxC,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,OAAA,EAA6B,QAA4B,GAAA,EAAyB;AAC3H,IAAA,KAAA,CAAM,CAAA,+BAAA,EAAS,OAAO,CAAA,2BAAA,EAAU,MAAA,IAAU,OAAO,0BAAM,CAAA,OAAA,EAAU,IAAI,CAAA,EAAG,OAAA,GAAU,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AACjH,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF,CAAA;AAZ0C,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAnC,IAAM,cAAA,GAAN;AAeP,SAAS,cAAc,OAAA,EAAyB;AAC9C,EAAA,OAAO,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,SAAA,CAAA;AACvC;AAFS,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AAOF,SAAS,cAAA,CAAe,KAAc,OAAA,EAAsC;AACjF,EAAA,MAAM,KAAA,GAAQ,GAAA;AACd,EAAA,MAAM,QAAQ,KAAA,IAAS,KAAA,CAAM,aAAA,CAAc,OAAO,CAAC,CAAA,KAAM,KAAA;AACzD,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,kBAAA,EAAoB,MAAA,EAAW,QAAW,4CAAS,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,IAAA,MAAM,IAAI,cAAA,CAAe,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,KAAK,QAAA,EAAU,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,IAAA;AACT;AAVgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA","file":"response.js","sourcesContent":["/**\n * 支付宝开放接口响应解包与业务错误检查。\n *\n * 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内\n * code != '10000' 并携带 sub_code/sub_msg,必须显式检查,\n * 否则会把失败结果当成功映射(字段全部 undefined)。\n */\nexport class AlipayApiError extends Error {\n readonly code: string\n readonly subCode?: string\n readonly subMsg?: string\n\n constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined) {\n super(`支付宝接口 ${apiName} 调用失败: ${subMsg ?? msg ?? '未知错误'} (code=${code}${subCode ? `, sub_code=${subCode}` : ''})`)\n this.name = 'AlipayApiError'\n this.code = code\n this.subCode = subCode\n this.subMsg = subMsg\n }\n}\n\n/** alipay.trade.page.pay -> alipay_trade_page_pay_response */\nfunction toResponseKey(apiName: string): string {\n return `${apiName.replace(/\\./g, '_')}_response`\n}\n\n/**\n * 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。\n */\nexport function unwrapResponse(raw: unknown, apiName: string): Record<string, any> {\n const outer = raw as Record<string, any> | null | undefined\n const body = (outer && outer[toResponseKey(apiName)]) ?? outer\n if (!body || typeof body !== 'object') {\n throw new AlipayApiError(apiName, 'INVALID_RESPONSE', undefined, undefined, '响应体格式异常')\n }\n if (body.code !== '10000') {\n throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg)\n }\n return body\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
|