diff --git a/src/lib/config.ts b/src/lib/config.ts index a0e4be4..6a0a8df 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -12,7 +12,13 @@ const envSchema = z.object({ SUB2API_BASE_URL: z.string().url(), SUB2API_ADMIN_API_KEY: z.string().min(1), - // ── Easy-Pay (optional when only using Stripe) ── + // ── 支付服务商(显式声明启用哪些服务商,逗号分隔:easypay, stripe) ── + PAYMENT_PROVIDERS: z + .string() + .default('') + .transform((v) => v.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean)), + + // ── Easy-Pay(PAYMENT_PROVIDERS 含 easypay 时必填) ── EASY_PAY_PID: optionalTrimmedString, EASY_PAY_PKEY: optionalTrimmedString, EASY_PAY_API_BASE: optionalTrimmedString, @@ -22,10 +28,13 @@ const envSchema = z.object({ EASY_PAY_CID_ALIPAY: optionalTrimmedString, EASY_PAY_CID_WXPAY: optionalTrimmedString, + // ── Stripe(PAYMENT_PROVIDERS 含 stripe 时必填) ── STRIPE_SECRET_KEY: optionalTrimmedString, STRIPE_PUBLISHABLE_KEY: optionalTrimmedString, STRIPE_WEBHOOK_SECRET: optionalTrimmedString, + // ── 启用的支付渠道(在已配置服务商支持的渠道中选择) ── + // 易支付支持: alipay, wxpay;Stripe 支持: stripe ENABLED_PAYMENT_TYPES: z .string() .default('alipay,wxpay') diff --git a/src/lib/payment/index.ts b/src/lib/payment/index.ts index fdccca2..d440d35 100644 --- a/src/lib/payment/index.ts +++ b/src/lib/payment/index.ts @@ -19,10 +19,21 @@ let initialized = false; export function initPaymentProviders(): void { if (initialized) return; - paymentRegistry.register(new EasyPayProvider()); const env = getEnv(); - if (env.STRIPE_SECRET_KEY) { + const providers = env.PAYMENT_PROVIDERS; + + if (providers.includes('easypay')) { + if (!env.EASY_PAY_PID || !env.EASY_PAY_PKEY) { + throw new Error('PAYMENT_PROVIDERS 含 easypay,但缺少 EASY_PAY_PID 或 EASY_PAY_PKEY'); + } + paymentRegistry.register(new EasyPayProvider()); + } + + if (providers.includes('stripe')) { + if (!env.STRIPE_SECRET_KEY) { + throw new Error('PAYMENT_PROVIDERS 含 stripe,但缺少 STRIPE_SECRET_KEY'); + } paymentRegistry.register(new StripeProvider()); }