146 lines
4.0 KiB
Go
146 lines
4.0 KiB
Go
package config
|
||
|
||
import (
|
||
"os"
|
||
"strings"
|
||
|
||
"github.com/joho/godotenv"
|
||
)
|
||
|
||
// Config 应用配置(从环境变量读取,启动时加载 .env)
|
||
type Config struct {
|
||
Port string
|
||
Mode string
|
||
DBDSN string
|
||
TrustedProxies []string
|
||
CORSOrigins []string
|
||
Version string // APP_VERSION,打包/部署前写在 .env,/health 返回
|
||
|
||
// 微信小程序配置
|
||
WechatAppID string
|
||
WechatAppSecret string
|
||
WechatMchID string
|
||
WechatMchKey string
|
||
WechatNotifyURL string
|
||
|
||
// 微信转账配置(API v3)
|
||
WechatAPIv3Key string
|
||
WechatCertPath string
|
||
WechatKeyPath string
|
||
WechatSerialNo string
|
||
WechatTransferURL string // 转账回调地址
|
||
}
|
||
|
||
// 默认 CORS 允许的源(零配置:不设环境变量也能用)
|
||
var defaultCORSOrigins = []string{
|
||
"http://localhost:5174",
|
||
"http://127.0.0.1:5174",
|
||
"https://soul.quwanzhi.com",
|
||
"http://soul.quwanzhi.com",
|
||
"http://souladmin.quwanzhi.com",
|
||
}
|
||
|
||
// parseCORSOrigins 从环境变量 CORS_ORIGINS 读取(逗号分隔),未设置则用默认值
|
||
func parseCORSOrigins() []string {
|
||
s := os.Getenv("CORS_ORIGINS")
|
||
if s == "" {
|
||
return defaultCORSOrigins
|
||
}
|
||
parts := strings.Split(s, ",")
|
||
origins := make([]string, 0, len(parts))
|
||
for _, p := range parts {
|
||
if o := strings.TrimSpace(p); o != "" {
|
||
origins = append(origins, o)
|
||
}
|
||
}
|
||
if len(origins) == 0 {
|
||
return defaultCORSOrigins
|
||
}
|
||
return origins
|
||
}
|
||
|
||
// Load 加载配置,开发环境可读 .env
|
||
func Load() (*Config, error) {
|
||
_ = godotenv.Load()
|
||
|
||
port := os.Getenv("PORT")
|
||
if port == "" {
|
||
port = "8080"
|
||
}
|
||
mode := os.Getenv("GIN_MODE")
|
||
if mode == "" {
|
||
mode = "debug"
|
||
}
|
||
dsn := os.Getenv("DB_DSN")
|
||
if dsn == "" {
|
||
dsn = "user:pass@tcp(127.0.0.1:3306)/soul?charset=utf8mb4&parseTime=True"
|
||
}
|
||
version := os.Getenv("APP_VERSION")
|
||
if version == "" {
|
||
version = "0.0.0"
|
||
}
|
||
|
||
// 微信配置
|
||
wechatAppID := os.Getenv("WECHAT_APPID")
|
||
if wechatAppID == "" {
|
||
wechatAppID = "wxb8bbb2b10dec74aa" // 默认小程序AppID
|
||
}
|
||
wechatAppSecret := os.Getenv("WECHAT_APPSECRET")
|
||
if wechatAppSecret == "" {
|
||
wechatAppSecret = "3c1fb1f63e6e052222bbcead9d07fe0c" // 默认小程序AppSecret
|
||
}
|
||
wechatMchID := os.Getenv("WECHAT_MCH_ID")
|
||
if wechatMchID == "" {
|
||
wechatMchID = "1318592501" // 默认商户号
|
||
}
|
||
wechatMchKey := os.Getenv("WECHAT_MCH_KEY")
|
||
if wechatMchKey == "" {
|
||
wechatMchKey = "wx3e31b068be59ddc131b068be59ddc2" // 默认API密钥(v2)
|
||
}
|
||
wechatNotifyURL := os.Getenv("WECHAT_NOTIFY_URL")
|
||
if wechatNotifyURL == "" {
|
||
wechatNotifyURL = "https://soul.quwanzhi.com/api/miniprogram/pay/notify" // 默认回调地址
|
||
}
|
||
|
||
// 转账配置
|
||
wechatAPIv3Key := os.Getenv("WECHAT_APIV3_KEY")
|
||
if wechatAPIv3Key == "" {
|
||
wechatAPIv3Key = "wx3e31b068be59ddc131b068be59ddc2" // 默认 API v3 密钥
|
||
}
|
||
wechatCertPath := os.Getenv("WECHAT_CERT_PATH")
|
||
if wechatCertPath == "" {
|
||
wechatCertPath = "certs/apiclient_cert.pem" // 默认证书路径
|
||
}
|
||
wechatKeyPath := os.Getenv("WECHAT_KEY_PATH")
|
||
if wechatKeyPath == "" {
|
||
wechatKeyPath = "certs/apiclient_key.pem" // 默认私钥路径
|
||
}
|
||
wechatSerialNo := os.Getenv("WECHAT_SERIAL_NO")
|
||
if wechatSerialNo == "" {
|
||
wechatSerialNo = "4A1DB62CD5C9BE0B6FC51C30621D6F99686E75C5" // 默认证书序列号
|
||
}
|
||
wechatTransferURL := os.Getenv("WECHAT_TRANSFER_URL")
|
||
if wechatTransferURL == "" {
|
||
wechatTransferURL = "https://soul.quwanzhi.com/api/payment/wechat/transfer/notify" // 默认转账回调地址
|
||
}
|
||
|
||
return &Config{
|
||
Port: port,
|
||
Mode: mode,
|
||
DBDSN: dsn,
|
||
TrustedProxies: []string{"127.0.0.1", "::1"},
|
||
CORSOrigins: parseCORSOrigins(),
|
||
Version: version,
|
||
WechatAppID: wechatAppID,
|
||
WechatAppSecret: wechatAppSecret,
|
||
WechatMchID: wechatMchID,
|
||
WechatMchKey: wechatMchKey,
|
||
WechatNotifyURL: wechatNotifyURL,
|
||
WechatAPIv3Key: wechatAPIv3Key,
|
||
WechatCertPath: wechatCertPath,
|
||
WechatKeyPath: wechatKeyPath,
|
||
WechatSerialNo: wechatSerialNo,
|
||
WechatTransferURL: wechatTransferURL,
|
||
}, nil
|
||
}
|