feat: 插件化支付渠道限额 — provider 自声明单笔/每日默认限额
- PaymentProvider 接口新增 defaultLimits(单笔 singleMax + 每日 dailyMax) - EasyPay 默认:支付宝/微信各 单笔 ¥1000、每日 ¥10000 - Stripe 默认:不限额(0 = unlimited) - getMethodDailyLimit / getMethodSingleLimit 优先读 env var,再回退 provider 默认 - queryMethodLimits 返回 singleMax,PaymentForm 按渠道动态调整最大单笔金额 - MAX_DAILY_AMOUNT_* 改为可选 env var 覆盖(不再有硬编码默认值)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { PaymentProvider, PaymentType } from './types';
|
||||
import type { PaymentProvider, PaymentType, MethodDefaultLimits } from './types';
|
||||
|
||||
export class PaymentProviderRegistry {
|
||||
private providers = new Map<PaymentType, PaymentProvider>();
|
||||
@@ -24,6 +24,12 @@ export class PaymentProviderRegistry {
|
||||
getSupportedTypes(): PaymentType[] {
|
||||
return Array.from(this.providers.keys());
|
||||
}
|
||||
|
||||
/** 获取指定渠道的提供商默认限额(未注册时返回 undefined) */
|
||||
getDefaultLimit(type: string): MethodDefaultLimits | undefined {
|
||||
const provider = this.providers.get(type as PaymentType);
|
||||
return provider?.defaultLimits?.[type];
|
||||
}
|
||||
}
|
||||
|
||||
export const paymentRegistry = new PaymentProviderRegistry();
|
||||
|
||||
@@ -51,10 +51,20 @@ export interface RefundResponse {
|
||||
status: 'success' | 'pending' | 'failed';
|
||||
}
|
||||
|
||||
/** Per-method default limits declared by the provider */
|
||||
export interface MethodDefaultLimits {
|
||||
/** 单笔最大金额,0 = 不限(使用全局 MAX_RECHARGE_AMOUNT) */
|
||||
singleMax?: number;
|
||||
/** 每日全平台最大金额,0 = 不限 */
|
||||
dailyMax?: number;
|
||||
}
|
||||
|
||||
/** Common interface that all payment providers must implement */
|
||||
export interface PaymentProvider {
|
||||
readonly name: string;
|
||||
readonly supportedTypes: PaymentType[];
|
||||
/** 各渠道默认限额,key 为 PaymentType(如 'alipay'),可被环境变量覆盖 */
|
||||
readonly defaultLimits?: Record<string, MethodDefaultLimits>;
|
||||
|
||||
createPayment(request: CreatePaymentRequest): Promise<CreatePaymentResponse>;
|
||||
queryOrder(tradeNo: string): Promise<QueryOrderResponse>;
|
||||
|
||||
Reference in New Issue
Block a user