2026-03-01 17:58:08 +08:00
import { paymentRegistry } from './registry' ;
2026-03-03 01:56:22 +08:00
import type { PaymentType } from './types' ;
2026-03-01 17:58:08 +08:00
import { EasyPayProvider } from '@/lib/easy-pay/provider' ;
import { StripeProvider } from '@/lib/stripe/provider' ;
2026-03-05 01:48:10 +08:00
import { AlipayProvider } from '@/lib/alipay/provider' ;
2026-03-06 13:57:52 +08:00
import { WxpayProvider } from '@/lib/wxpay/provider' ;
2026-03-01 17:58:08 +08:00
import { getEnv } from '@/lib/config' ;
export { paymentRegistry } from './registry' ;
export type {
PaymentType ,
PaymentProvider ,
CreatePaymentRequest ,
CreatePaymentResponse ,
QueryOrderResponse ,
PaymentNotification ,
RefundRequest ,
RefundResponse ,
} from './types' ;
let initialized = false ;
export function initPaymentProviders ( ) : void {
if ( initialized ) return ;
const env = getEnv ( ) ;
2026-03-02 02:04:53 +08:00
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 ( ) ) ;
}
2026-03-05 01:52:59 +08:00
if ( providers . includes ( 'alipay' ) ) {
2026-03-06 13:57:52 +08:00
if ( ! env . ALIPAY_APP_ID || ! env . ALIPAY_PRIVATE_KEY || ! env . ALIPAY_NOTIFY_URL ) {
throw new Error (
'PAYMENT_PROVIDERS includes alipay but required env vars are missing: ALIPAY_APP_ID, ALIPAY_PRIVATE_KEY, ALIPAY_NOTIFY_URL' ,
) ;
2026-03-05 01:48:10 +08:00
}
2026-03-06 15:33:22 +08:00
paymentRegistry . register ( new AlipayProvider ( ) ) ; // 注册 alipay_direct
2026-03-05 01:48:10 +08:00
}
2026-03-06 13:57:52 +08:00
if ( providers . includes ( 'wxpay' ) ) {
if (
! env . WXPAY_APP_ID ||
! env . WXPAY_MCH_ID ||
! env . WXPAY_PRIVATE_KEY ||
! env . WXPAY_API_V3_KEY ||
! env . WXPAY_PUBLIC_KEY ||
! env . WXPAY_CERT_SERIAL ||
! env . WXPAY_NOTIFY_URL
) {
throw new Error (
'PAYMENT_PROVIDERS includes wxpay but required env vars are missing: WXPAY_APP_ID, WXPAY_MCH_ID, WXPAY_PRIVATE_KEY, WXPAY_API_V3_KEY, WXPAY_PUBLIC_KEY, WXPAY_CERT_SERIAL, WXPAY_NOTIFY_URL' ,
) ;
}
paymentRegistry . register ( new WxpayProvider ( ) ) ;
}
2026-03-02 02:04:53 +08:00
if ( providers . includes ( 'stripe' ) ) {
if ( ! env . STRIPE_SECRET_KEY ) {
throw new Error ( 'PAYMENT_PROVIDERS 含 stripe, 但缺少 STRIPE_SECRET_KEY' ) ;
}
2026-03-01 17:58:08 +08:00
paymentRegistry . register ( new StripeProvider ( ) ) ;
}
initialized = true ;
}