diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 3af4287..20b4eb3 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -13,12 +13,18 @@ version: '3.8' # # 必填配置(缺失时服务无法启动): # - JUNHONG_DATABASE_HOST -# - JUNHONG_DATABASE_PORT +# - JUNHONG_DATABASE_PORT # - JUNHONG_DATABASE_USER # - JUNHONG_DATABASE_PASSWORD # - JUNHONG_DATABASE_DBNAME # - JUNHONG_REDIS_ADDRESS # - JUNHONG_JWT_SECRET_KEY +# +# 可选配置(根据需要启用): +# - Gateway 服务配置(JUNHONG_GATEWAY_*) +# - 微信公众号配置(JUNHONG_WECHAT_OFFICIAL_ACCOUNT_*) +# - 微信支付配置(JUNHONG_WECHAT_PAYMENT_*) +# - 对象存储配置(JUNHONG_STORAGE_*) services: api: @@ -54,9 +60,33 @@ services: - JUNHONG_STORAGE_S3_SECRET_ACCESS_KEY=8393425DCB2F48F1914FF39DCBC6C7B17325 - JUNHONG_STORAGE_S3_USE_SSL=false - JUNHONG_STORAGE_S3_PATH_STYLE=true + # Gateway 配置(可选) + # - JUNHONG_GATEWAY_BASE_URL=https://lplan.whjhft.com/openapi + # - JUNHONG_GATEWAY_APP_ID=your_app_id + # - JUNHONG_GATEWAY_APP_SECRET=your_app_secret + # - JUNHONG_GATEWAY_TIMEOUT=30 + # 微信公众号配置(可选) + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_ID=your_app_id + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_SECRET=your_app_secret + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_TOKEN=your_token + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_AES_KEY=your_aes_key + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_OAUTH_REDIRECT_URL=https://your-domain.com/callback + # 微信支付配置(可选) + # - JUNHONG_WECHAT_PAYMENT_APP_ID=your_app_id + # - JUNHONG_WECHAT_PAYMENT_MCH_ID=your_mch_id + # - JUNHONG_WECHAT_PAYMENT_API_V3_KEY=your_32_char_api_v3_key + # - JUNHONG_WECHAT_PAYMENT_API_V2_KEY=your_api_v2_key + # - JUNHONG_WECHAT_PAYMENT_CERT_PATH=/app/certs/apiclient_cert.pem + # - JUNHONG_WECHAT_PAYMENT_KEY_PATH=/app/certs/apiclient_key.pem + # - JUNHONG_WECHAT_PAYMENT_SERIAL_NO=your_serial_no + # - JUNHONG_WECHAT_PAYMENT_NOTIFY_URL=https://your-domain.com/api/callback/wechat-pay + # - JUNHONG_WECHAT_PAYMENT_HTTP_DEBUG=false + # - JUNHONG_WECHAT_PAYMENT_TIMEOUT=30s volumes: # 仅挂载日志目录(配置已嵌入二进制文件) - ./logs:/app/logs + # 微信支付证书目录(如果使用微信支付,需要挂载证书) + # - ./certs:/app/certs:ro networks: - junhong-network healthcheck: @@ -102,8 +132,32 @@ services: - JUNHONG_STORAGE_S3_SECRET_ACCESS_KEY=8393425DCB2F48F1914FF39DCBC6C7B17325 - JUNHONG_STORAGE_S3_USE_SSL=false - JUNHONG_STORAGE_S3_PATH_STYLE=true + # Gateway 配置(可选) + # - JUNHONG_GATEWAY_BASE_URL=https://lplan.whjhft.com/openapi + # - JUNHONG_GATEWAY_APP_ID=your_app_id + # - JUNHONG_GATEWAY_APP_SECRET=your_app_secret + # - JUNHONG_GATEWAY_TIMEOUT=30 + # 微信公众号配置(可选) + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_ID=your_app_id + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_SECRET=your_app_secret + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_TOKEN=your_token + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_AES_KEY=your_aes_key + # - JUNHONG_WECHAT_OFFICIAL_ACCOUNT_OAUTH_REDIRECT_URL=https://your-domain.com/callback + # 微信支付配置(可选) + # - JUNHONG_WECHAT_PAYMENT_APP_ID=your_app_id + # - JUNHONG_WECHAT_PAYMENT_MCH_ID=your_mch_id + # - JUNHONG_WECHAT_PAYMENT_API_V3_KEY=your_32_char_api_v3_key + # - JUNHONG_WECHAT_PAYMENT_API_V2_KEY=your_api_v2_key + # - JUNHONG_WECHAT_PAYMENT_CERT_PATH=/app/certs/apiclient_cert.pem + # - JUNHONG_WECHAT_PAYMENT_KEY_PATH=/app/certs/apiclient_key.pem + # - JUNHONG_WECHAT_PAYMENT_SERIAL_NO=your_serial_no + # - JUNHONG_WECHAT_PAYMENT_NOTIFY_URL=https://your-domain.com/api/callback/wechat-pay + # - JUNHONG_WECHAT_PAYMENT_HTTP_DEBUG=false + # - JUNHONG_WECHAT_PAYMENT_TIMEOUT=30s volumes: - ./logs:/app/logs + # 微信支付证书目录(如果使用微信支付,需要挂载证书) + # - ./certs:/app/certs:ro networks: - junhong-network depends_on: diff --git a/pkg/config/defaults/config.yaml b/pkg/config/defaults/config.yaml index e6d059e..ce84c02 100644 --- a/pkg/config/defaults/config.yaml +++ b/pkg/config/defaults/config.yaml @@ -105,14 +105,13 @@ default_admin: password: "" phone: "" -<<<<<<< HEAD # Gateway 服务配置 gateway: base_url: "https://lplan.whjhft.com/openapi" app_id: "60bgt1X8i7AvXqkd" app_secret: "BZeQttaZQt0i73moF" timeout: 30 -======= + # 微信配置(必填项需通过环境变量设置) wechat: official_account: @@ -132,4 +131,3 @@ wechat: notify_url: "" # 必填:JUNHONG_WECHAT_PAYMENT_NOTIFY_URL http_debug: false timeout: "30s" ->>>>>>> emdash/wechat-official-account-payment-integration-30g diff --git a/pkg/config/loader.go b/pkg/config/loader.go index 0afaa21..d0acb63 100644 --- a/pkg/config/loader.go +++ b/pkg/config/loader.go @@ -113,6 +113,25 @@ func bindEnvVariables(v *viper.Viper) { "default_admin.username", "default_admin.password", "default_admin.phone", + "gateway.base_url", + "gateway.app_id", + "gateway.app_secret", + "gateway.timeout", + "wechat.official_account.app_id", + "wechat.official_account.app_secret", + "wechat.official_account.token", + "wechat.official_account.aes_key", + "wechat.official_account.oauth_redirect_url", + "wechat.payment.app_id", + "wechat.payment.mch_id", + "wechat.payment.api_v3_key", + "wechat.payment.api_v2_key", + "wechat.payment.cert_path", + "wechat.payment.key_path", + "wechat.payment.serial_no", + "wechat.payment.notify_url", + "wechat.payment.http_debug", + "wechat.payment.timeout", } for _, key := range bindings { diff --git a/scripts/setup-env.sh b/scripts/setup-env.sh index 2d3c5e2..3506404 100755 --- a/scripts/setup-env.sh +++ b/scripts/setup-env.sh @@ -162,14 +162,67 @@ main() { read_input "服务监听地址" ":3000" SERVER_ADDRESS read_input "日志级别 (debug/info/warn/error)" "debug" LOGGING_LEVEL + # ======================================== + # Gateway 配置 + # ======================================== + print_header "Gateway 配置(可选)" + + echo -n "是否配置 Gateway 服务?[y/N]: " + read configure_gateway + + if [ "$configure_gateway" = "y" ] || [ "$configure_gateway" = "Y" ]; then + read_input "Gateway API 基础 URL" "https://lplan.whjhft.com/openapi" GATEWAY_BASE_URL + read_input "Gateway 应用 ID" "" GATEWAY_APP_ID + read_input "Gateway 应用密钥" "" GATEWAY_APP_SECRET "true" + read_input "Gateway 请求超时时间(秒)" "30" GATEWAY_TIMEOUT + GATEWAY_CONFIGURED="true" + else + GATEWAY_CONFIGURED="false" + fi + + # ======================================== + # 微信配置 + # ======================================== + print_header "微信配置(可选)" + + echo -n "是否配置微信公众号和支付?[y/N]: " + read configure_wechat + + if [ "$configure_wechat" = "y" ] || [ "$configure_wechat" = "Y" ]; then + echo "" + print_info ">>> 微信公众号配置" + read_input "公众号 AppID" "" WECHAT_OFFICIAL_ACCOUNT_APP_ID + read_input "公众号 AppSecret" "" WECHAT_OFFICIAL_ACCOUNT_APP_SECRET "true" + read_input "服务器配置 Token(可选)" "" WECHAT_OFFICIAL_ACCOUNT_TOKEN + read_input "消息加解密 Key(可选)" "" WECHAT_OFFICIAL_ACCOUNT_AES_KEY "true" + read_input "OAuth 回调 URL(可选)" "" WECHAT_OFFICIAL_ACCOUNT_OAUTH_REDIRECT_URL + + echo "" + print_info ">>> 微信支付配置" + read_input "支付 AppID(通常与公众号相同)" "$WECHAT_OFFICIAL_ACCOUNT_APP_ID" WECHAT_PAYMENT_APP_ID + read_input "商户号" "" WECHAT_PAYMENT_MCH_ID + read_input "APIv3 密钥(32位)" "" WECHAT_PAYMENT_API_V3_KEY "true" + read_input "APIv2 密钥(可选)" "" WECHAT_PAYMENT_API_V2_KEY "true" + read_input "商户证书路径" "/app/certs/apiclient_cert.pem" WECHAT_PAYMENT_CERT_PATH + read_input "商户私钥路径" "/app/certs/apiclient_key.pem" WECHAT_PAYMENT_KEY_PATH + read_input "证书序列号" "" WECHAT_PAYMENT_SERIAL_NO + read_input "支付回调 URL" "" WECHAT_PAYMENT_NOTIFY_URL + read_input "是否启用 HTTP 调试(true/false)" "false" WECHAT_PAYMENT_HTTP_DEBUG + read_input "HTTP 请求超时时间" "30s" WECHAT_PAYMENT_TIMEOUT + + WECHAT_CONFIGURED="true" + else + WECHAT_CONFIGURED="false" + fi + # ======================================== # 可选:对象存储配置 # ======================================== print_header "对象存储配置(可选)" - + echo -n "是否配置对象存储?[y/N]: " read configure_storage - + if [ "$configure_storage" = "y" ] || [ "$configure_storage" = "Y" ]; then read_input "S3 端点" "" STORAGE_S3_ENDPOINT read_input "S3 区域" "" STORAGE_S3_REGION @@ -235,6 +288,49 @@ export JUNHONG_LOGGING_ACCESS_LOG_FILENAME="logs/access.log" EOF + # 添加 Gateway 配置(如果配置了) + if [ "$GATEWAY_CONFIGURED" = "true" ]; then + cat >> "$ENV_FILE" << EOF +# ---------------------------------------------------------------------------- +# Gateway 服务配置 +# ---------------------------------------------------------------------------- +export JUNHONG_GATEWAY_BASE_URL="$GATEWAY_BASE_URL" +export JUNHONG_GATEWAY_APP_ID="$GATEWAY_APP_ID" +export JUNHONG_GATEWAY_APP_SECRET="$GATEWAY_APP_SECRET" +export JUNHONG_GATEWAY_TIMEOUT="$GATEWAY_TIMEOUT" + +EOF + fi + + # 添加微信配置(如果配置了) + if [ "$WECHAT_CONFIGURED" = "true" ]; then + cat >> "$ENV_FILE" << EOF +# ---------------------------------------------------------------------------- +# 微信公众号配置 +# ---------------------------------------------------------------------------- +export JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_ID="$WECHAT_OFFICIAL_ACCOUNT_APP_ID" +export JUNHONG_WECHAT_OFFICIAL_ACCOUNT_APP_SECRET="$WECHAT_OFFICIAL_ACCOUNT_APP_SECRET" +export JUNHONG_WECHAT_OFFICIAL_ACCOUNT_TOKEN="$WECHAT_OFFICIAL_ACCOUNT_TOKEN" +export JUNHONG_WECHAT_OFFICIAL_ACCOUNT_AES_KEY="$WECHAT_OFFICIAL_ACCOUNT_AES_KEY" +export JUNHONG_WECHAT_OFFICIAL_ACCOUNT_OAUTH_REDIRECT_URL="$WECHAT_OFFICIAL_ACCOUNT_OAUTH_REDIRECT_URL" + +# ---------------------------------------------------------------------------- +# 微信支付配置 +# ---------------------------------------------------------------------------- +export JUNHONG_WECHAT_PAYMENT_APP_ID="$WECHAT_PAYMENT_APP_ID" +export JUNHONG_WECHAT_PAYMENT_MCH_ID="$WECHAT_PAYMENT_MCH_ID" +export JUNHONG_WECHAT_PAYMENT_API_V3_KEY="$WECHAT_PAYMENT_API_V3_KEY" +export JUNHONG_WECHAT_PAYMENT_API_V2_KEY="$WECHAT_PAYMENT_API_V2_KEY" +export JUNHONG_WECHAT_PAYMENT_CERT_PATH="$WECHAT_PAYMENT_CERT_PATH" +export JUNHONG_WECHAT_PAYMENT_KEY_PATH="$WECHAT_PAYMENT_KEY_PATH" +export JUNHONG_WECHAT_PAYMENT_SERIAL_NO="$WECHAT_PAYMENT_SERIAL_NO" +export JUNHONG_WECHAT_PAYMENT_NOTIFY_URL="$WECHAT_PAYMENT_NOTIFY_URL" +export JUNHONG_WECHAT_PAYMENT_HTTP_DEBUG="$WECHAT_PAYMENT_HTTP_DEBUG" +export JUNHONG_WECHAT_PAYMENT_TIMEOUT="$WECHAT_PAYMENT_TIMEOUT" + +EOF + fi + # 添加对象存储配置(如果配置了) if [ "$STORAGE_CONFIGURED" = "true" ]; then cat >> "$ENV_FILE" << EOF