Files
lunar-mini/server/internal/config/config.go
T
gouki deb32f8fab
Build and Publish Server / build (push) Successful in 4m30s
feat(server): 商业化支付与订单系统 + Harness 改进
- 新增商业化模块:Stripe/Binance Pay 支付、邮箱登录、订单管理
- 新增数据模型:ReportProduct, ReportEntitlement, ReportSnapshot, PaymentEvent, EmailLoginCode
- 新增 API:/api/commerce/checkout, /api/commerce/webhooks/*, /api/commerce/orders/*
- 新增管理后台:订单列表、统计图表、统一 AdminHeader 组件
- 新增中间件测试:RateLimit, Auth, CORS 共 7 个测试用例
- 新增 AGENTS.md 项目代理指令文件
- 新增 REMINDER.md 商业化功能开发规范
- 修复 JWT 解析:添加 WithValidMethods 限制 HS256
- 修复 GetPayStatus:增加用户权限校验
- 更新 .gitignore 和 README.md
2026-09-19 18:57:23 +00:00

168 lines
3.9 KiB
Go

package config
import (
"os"
"strconv"
)
type Config struct {
Server ServerConfig
Database DatabaseConfig
Redis RedisConfig
JWT JWTConfig
Wechat WechatConfig
Stripe StripeConfig
BinancePay BinancePayConfig
Postmark PostmarkConfig
Commerce CommerceConfig
Admin AdminConfig
Wiki WikiConfig
}
type ServerConfig struct {
Port string
Env string
CORSOrigins string
}
type DatabaseConfig struct {
Type string
Host string
Port string
User string
Password string
Name string
}
type RedisConfig struct {
Host string
Port string
Password string
DB int
}
type JWTConfig struct {
Secret string
}
type WechatConfig struct {
AppID string
AppSecret string
PayKey string
MchID string
}
type StripeConfig struct {
SecretKey string
WebhookSecret string
APIBaseURL string
}
type BinancePayConfig struct {
APIKey string
SecretKey string
APIBaseURL string
WebhookPublicKey string
}
type PostmarkConfig struct {
ServerToken string
FromEmail string
APIBaseURL string
}
type CommerceConfig struct {
PublicBaseURL string
WebAppURL string
}
// AdminConfig 管理后台配置
type AdminConfig struct {
// Password 管理员登录密码;为空时禁用后台登录
Password string
}
// WikiConfig 百科/历史上的今天(维基百科同步)配置
type WikiConfig struct {
// SyncIntervalDays 同步间隔(天),距上次成功同步超过该间隔才会自动执行
SyncIntervalDays int
// SyncHour 自动同步执行的小时点(0-23)
SyncHour int
}
func Load() *Config {
return &Config{
Server: ServerConfig{
Port: getEnv("SERVER_PORT", "8080"),
Env: getEnv("SERVER_ENV", "development"),
CORSOrigins: getEnv("CORS_ORIGINS", ""),
},
Database: DatabaseConfig{
Type: getEnv("DB_TYPE", "mysql"),
Host: getEnv("DB_HOST", "localhost"),
Port: getEnv("DB_PORT", "3306"),
User: getEnv("DB_USER", "root"),
Password: getEnv("DB_PASSWORD", ""),
Name: getEnv("DB_NAME", "lunar"),
},
Redis: RedisConfig{
Host: getEnv("REDIS_HOST", "localhost"),
Port: getEnv("REDIS_PORT", "6379"),
Password: getEnv("REDIS_PASSWORD", ""),
DB: 0,
},
JWT: JWTConfig{
Secret: getEnv("JWT_SECRET", "your-secret-key"),
},
Wechat: WechatConfig{
AppID: getEnv("MINI_APP_ID", ""),
AppSecret: getEnv("MINI_APP_SECRET", ""),
PayKey: getEnv("WECHAT_PAY_APIKEY", ""),
MchID: getEnv("WECHAT_PAY_MCHID", ""),
},
Stripe: StripeConfig{
SecretKey: getEnv("STRIPE_SECRET_KEY", ""),
WebhookSecret: getEnv("STRIPE_WEBHOOK_SECRET", ""),
APIBaseURL: getEnv("STRIPE_API_BASE_URL", "https://api.stripe.com"),
},
BinancePay: BinancePayConfig{
APIKey: getEnv("BINANCE_PAY_API_KEY", ""),
SecretKey: getEnv("BINANCE_PAY_SECRET_KEY", ""),
APIBaseURL: getEnv("BINANCE_PAY_API_BASE_URL", "https://bpay.binanceapi.com"),
WebhookPublicKey: getEnv("BINANCE_PAY_WEBHOOK_PUBLIC_KEY", ""),
},
Postmark: PostmarkConfig{
ServerToken: getEnv("POSTMARK_SERVER_TOKEN", ""),
FromEmail: getEnv("POSTMARK_FROM_EMAIL", ""),
APIBaseURL: getEnv("POSTMARK_API_BASE_URL", "https://api.postmarkapp.com"),
},
Commerce: CommerceConfig{
PublicBaseURL: getEnv("PUBLIC_BASE_URL", "http://localhost:8080"),
WebAppURL: getEnv("WEB_APP_URL", "http://localhost:4260"),
},
Admin: AdminConfig{
Password: getEnv("ADMIN_PASSWORD", ""),
},
Wiki: WikiConfig{
SyncIntervalDays: getEnvInt("WIKI_SYNC_INTERVAL_DAYS", 7),
SyncHour: getEnvInt("WIKI_SYNC_HOUR", 4),
},
}
}
func getEnvInt(key string, defaultValue int) int {
if value := os.Getenv(key); value != "" {
if n, err := strconv.Atoi(value); err == nil {
return n
}
}
return defaultValue
}
func getEnv(key, defaultValue string) string {
if value := os.Getenv(key); value != "" {
return value
}
return defaultValue
}