feat: 显式 PAYMENT_PROVIDERS 配置服务商,缺密钥启动即报错
This commit is contained in:
@@ -12,7 +12,13 @@ const envSchema = z.object({
|
|||||||
SUB2API_BASE_URL: z.string().url(),
|
SUB2API_BASE_URL: z.string().url(),
|
||||||
SUB2API_ADMIN_API_KEY: z.string().min(1),
|
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_PID: optionalTrimmedString,
|
||||||
EASY_PAY_PKEY: optionalTrimmedString,
|
EASY_PAY_PKEY: optionalTrimmedString,
|
||||||
EASY_PAY_API_BASE: optionalTrimmedString,
|
EASY_PAY_API_BASE: optionalTrimmedString,
|
||||||
@@ -22,10 +28,13 @@ const envSchema = z.object({
|
|||||||
EASY_PAY_CID_ALIPAY: optionalTrimmedString,
|
EASY_PAY_CID_ALIPAY: optionalTrimmedString,
|
||||||
EASY_PAY_CID_WXPAY: optionalTrimmedString,
|
EASY_PAY_CID_WXPAY: optionalTrimmedString,
|
||||||
|
|
||||||
|
// ── Stripe(PAYMENT_PROVIDERS 含 stripe 时必填) ──
|
||||||
STRIPE_SECRET_KEY: optionalTrimmedString,
|
STRIPE_SECRET_KEY: optionalTrimmedString,
|
||||||
STRIPE_PUBLISHABLE_KEY: optionalTrimmedString,
|
STRIPE_PUBLISHABLE_KEY: optionalTrimmedString,
|
||||||
STRIPE_WEBHOOK_SECRET: optionalTrimmedString,
|
STRIPE_WEBHOOK_SECRET: optionalTrimmedString,
|
||||||
|
|
||||||
|
// ── 启用的支付渠道(在已配置服务商支持的渠道中选择) ──
|
||||||
|
// 易支付支持: alipay, wxpay;Stripe 支持: stripe
|
||||||
ENABLED_PAYMENT_TYPES: z
|
ENABLED_PAYMENT_TYPES: z
|
||||||
.string()
|
.string()
|
||||||
.default('alipay,wxpay')
|
.default('alipay,wxpay')
|
||||||
|
|||||||
@@ -19,10 +19,21 @@ let initialized = false;
|
|||||||
|
|
||||||
export function initPaymentProviders(): void {
|
export function initPaymentProviders(): void {
|
||||||
if (initialized) return;
|
if (initialized) return;
|
||||||
paymentRegistry.register(new EasyPayProvider());
|
|
||||||
|
|
||||||
const env = getEnv();
|
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());
|
paymentRegistry.register(new StripeProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user