2026-03-01 22:51:09 +08:00
|
|
|
|
import type { PaymentProvider, PaymentType, MethodDefaultLimits } from './types';
|
2026-03-01 17:58:08 +08:00
|
|
|
|
|
|
|
|
|
|
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());
|
|
|
|
|
|
}
|
2026-03-01 22:51:09 +08:00
|
|
|
|
|
|
|
|
|
|
/** 获取指定渠道的提供商默认限额(未注册时返回 undefined) */
|
|
|
|
|
|
getDefaultLimit(type: string): MethodDefaultLimits | undefined {
|
|
|
|
|
|
const provider = this.providers.get(type as PaymentType);
|
|
|
|
|
|
return provider?.defaultLimits?.[type];
|
|
|
|
|
|
}
|
2026-03-03 22:00:44 +08:00
|
|
|
|
|
|
|
|
|
|
/** 获取指定渠道对应的提供商 key(如 'easypay'、'stripe') */
|
|
|
|
|
|
getProviderKey(type: string): string | undefined {
|
|
|
|
|
|
const provider = this.providers.get(type as PaymentType);
|
|
|
|
|
|
return provider?.providerKey;
|
|
|
|
|
|
}
|
2026-03-01 17:58:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const paymentRegistry = new PaymentProviderRegistry();
|