/** * 支付配置管理 (Payment Configuration) * 从环境变量读取支付配置 * * 作者: 卡若 * 版本: v4.0 */ import { AlipayConfig } from './alipay'; import { WechatPayConfig } from './wechat'; // 应用基础配置 export interface AppConfig { env: 'development' | 'production'; name: string; url: string; currency: 'CNY' | 'USD' | 'EUR'; } // 完整支付配置 export interface PaymentConfig { app: AppConfig; alipay: AlipayConfig; wechat: WechatPayConfig; paypal: { enabled: boolean; mode: 'sandbox' | 'production'; clientId: string; clientSecret: string; }; stripe: { enabled: boolean; mode: 'test' | 'production'; publicKey: string; secretKey: string; webhookSecret: string; }; usdt: { enabled: boolean; gatewayType: string; apiKey: string; ipnSecret: string; }; order: { expireMinutes: number; tradeSnPrefix: string; }; } /** * 获取支付配置 */ export function getPaymentConfig(): PaymentConfig { return { app: { env: (process.env.NODE_ENV || 'development') as 'development' | 'production', name: process.env.APP_NAME || 'Soul创业实验', url: process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000', currency: (process.env.APP_CURRENCY || 'CNY') as 'CNY', }, alipay: { enabled: process.env.ALIPAY_ENABLED === 'true' || true, // 默认启用 mode: (process.env.ALIPAY_MODE || 'production') as 'production', // 支付宝新版接口需要 app_id,如果没有配置则使用 pid(旧版兼容) appId: process.env.ALIPAY_APP_ID || process.env.ALIPAY_PID || '2088511801157159', pid: process.env.ALIPAY_PID || '2088511801157159', sellerEmail: process.env.ALIPAY_SELLER_EMAIL || 'zhengzhiqun@vip.qq.com', privateKey: process.env.ALIPAY_PRIVATE_KEY || '', publicKey: process.env.ALIPAY_PUBLIC_KEY || '', md5Key: process.env.ALIPAY_MD5_KEY || 'lz6ey1h3kl9zqkgtjz3avb5gk37wzbrp', }, wechat: { enabled: process.env.WECHAT_ENABLED === 'true' || true, // 默认启用 mode: (process.env.WECHAT_MODE || 'production') as 'production', // 微信支付需要使用绑定了支付功能的服务号AppID appId: process.env.WECHAT_APPID || 'wx7c0dbf34ddba300d', // 服务号AppID(已绑定商户号) appSecret: process.env.WECHAT_APP_SECRET || 'f865ef18c43dfea6cbe3b1f1aebdb82e', serviceAppId: process.env.WECHAT_SERVICE_APPID || 'wx7c0dbf34ddba300d', serviceSecret: process.env.WECHAT_SERVICE_SECRET || 'f865ef18c43dfea6cbe3b1f1aebdb82e', mchId: process.env.WECHAT_MCH_ID || '1318592501', mchKey: process.env.WECHAT_MCH_KEY || 'wx3e31b068be59ddc131b068be59ddc2', certPath: process.env.WECHAT_CERT_PATH || '', keyPath: process.env.WECHAT_KEY_PATH || '', }, paypal: { enabled: process.env.PAYPAL_ENABLED === 'true', mode: (process.env.PAYPAL_MODE || 'sandbox') as 'sandbox', clientId: process.env.PAYPAL_CLIENT_ID || '', clientSecret: process.env.PAYPAL_CLIENT_SECRET || '', }, stripe: { enabled: process.env.STRIPE_ENABLED === 'true', mode: (process.env.STRIPE_MODE || 'test') as 'test', publicKey: process.env.STRIPE_PUBLIC_KEY || '', secretKey: process.env.STRIPE_SECRET_KEY || '', webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || '', }, usdt: { enabled: process.env.USDT_ENABLED === 'true', gatewayType: process.env.USDT_GATEWAY_TYPE || 'nowpayments', apiKey: process.env.NOWPAYMENTS_API_KEY || '', ipnSecret: process.env.NOWPAYMENTS_IPN_SECRET || '', }, order: { expireMinutes: parseInt(process.env.ORDER_EXPIRE_MINUTES || '30', 10), tradeSnPrefix: process.env.TRADE_SN_PREFIX || 'T', }, }; } /** * 获取回调通知URL */ export function getNotifyUrl(gateway: 'alipay' | 'wechat' | 'paypal' | 'stripe'): string { const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'; return `${baseUrl}/api/payment/${gateway}/notify`; } /** * 获取支付成功返回URL */ export function getReturnUrl(orderId?: string): string { const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'; const url = `${baseUrl}/payment/success`; return orderId ? `${url}?orderId=${orderId}` : url; }