- 支持提供商级别和渠道级别手续费率配置(FEE_RATE_PROVIDER_* / FEE_RATE_*) - 用户多付手续费,到账金额不变(充值 ¥100 + 1.6% = 实付 ¥101.60) - 前端显示手续费明细和实付金额 - 退款时按实付金额退款,余额扣减到账金额
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import type { PaymentProvider, PaymentType, MethodDefaultLimits } from './types';
|
||
|
||
export class PaymentProviderRegistry {
|
||
private providers = new Map<PaymentType, PaymentProvider>();
|
||
|
||
register(provider: PaymentProvider): void {
|
||
for (const type of provider.supportedTypes) {
|
||
this.providers.set(type, provider);
|
||
}
|
||
}
|
||
|
||
getProvider(type: PaymentType): PaymentProvider {
|
||
const provider = this.providers.get(type);
|
||
if (!provider) {
|
||
throw new Error(`No payment provider registered for type: ${type}`);
|
||
}
|
||
return provider;
|
||
}
|
||
|
||
hasProvider(type: PaymentType): boolean {
|
||
return this.providers.has(type);
|
||
}
|
||
|
||
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];
|
||
}
|
||
|
||
/** 获取指定渠道对应的提供商 key(如 'easypay'、'stripe') */
|
||
getProviderKey(type: string): string | undefined {
|
||
const provider = this.providers.get(type as PaymentType);
|
||
return provider?.providerKey;
|
||
}
|
||
}
|
||
|
||
export const paymentRegistry = new PaymentProviderRegistry();
|