From e5424e6c5e60d4683043a66fb427116ba97859ce Mon Sep 17 00:00:00 2001 From: erio Date: Mon, 2 Mar 2026 02:04:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=98=BE=E5=BC=8F=20PAYMENT=5FPROVIDER?= =?UTF-8?q?S=20=E9=85=8D=E7=BD=AE=E6=9C=8D=E5=8A=A1=E5=95=86=EF=BC=8C?= =?UTF-8?q?=E7=BC=BA=E5=AF=86=E9=92=A5=E5=90=AF=E5=8A=A8=E5=8D=B3=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/config.ts | 11 ++++++++++- src/lib/payment/index.ts | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) 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()); }