diff --git a/app/main/api/data/authorization_docs/2026/01/auth_08ed1f48-fc2f-4251-89e5-0a39d9245b13_74df0661-1ce1-40e2-89d3-34b94792428d_20260116_155211.pdf b/app/main/api/data/authorization_docs/2026/01/auth_08ed1f48-fc2f-4251-89e5-0a39d9245b13_74df0661-1ce1-40e2-89d3-34b94792428d_20260116_155211.pdf new file mode 100644 index 0000000..e48988f Binary files /dev/null and b/app/main/api/data/authorization_docs/2026/01/auth_08ed1f48-fc2f-4251-89e5-0a39d9245b13_74df0661-1ce1-40e2-89d3-34b94792428d_20260116_155211.pdf differ diff --git a/app/main/api/etc/main.dev.yaml b/app/main/api/etc/main.dev.yaml index 9003bf1..5e03f10 100644 --- a/app/main/api/etc/main.dev.yaml +++ b/app/main/api/etc/main.dev.yaml @@ -2,7 +2,7 @@ Name: main Host: 0.0.0.0 Port: 8888 Timeout: 0 -DataSource: "qnc:5vg67b3UNHu8@tcp(127.0.0.1:21201)/qnc?charset=utf8mb4&parseTime=True&loc=Local" +DataSource: "zac:5vg67b3UNHu8@tcp(127.0.0.1:21201)/zac?charset=utf8mb4&parseTime=True&loc=Local" CacheRedis: - Host: "127.0.0.1:21202" Pass: "3m3WsgyCKWqz" # Redis 密码,如果未设置则留空 @@ -42,15 +42,15 @@ Alipay: Wxpay: AppID: "wx442ee1ac1ee75917" - MchID: "1682635136" - MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" - MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" - MchPrivateKeyPath: "etc/merchant/apiclient_key.pem" - MchPublicKeyID: "PUB_KEY_ID_0116826351362025060900382267001601" - MchPublicKeyPath: "etc/merchant/pub_key.pem" - MchPlatformRAS: "1FFEC3F62E31885FAB4C91ADCB8D7557E9488781" - NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback" - RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/paywechat/refund_callback" + MchID: "1738205312" + MchCertificateSerialNumber: "6BD3F3D86A470C1ED31476EC5EF68DC16E023F43" + MchApiv3Key: "ZtYxWvUsRqPoNmLkJiHgFeDcBap6gQ3K5" + MchPrivateKeyPath: "etc/merchant/wxpay/apiclient_key.pem" + MchPublicKeyID: "PUB_KEY_ID_0117382053122026011600191612000202" + MchPublicKeyPath: "etc/merchant/wxpay/pub_key.pem" + MchPlatformRAS: "" + NotifyUrl: "https://www.zhenaicha.com/api/v1/pay/wechat/callback" + RefundNotifyUrl: "https://www.zhenaicha.com/api/v1/pay/wechat/refund_callback" Applepay: ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt" SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt" diff --git a/app/main/api/etc/merchant/wxpay/pub_key.pem b/app/main/api/etc/merchant/wxpay/pub_key.pem new file mode 100644 index 0000000..24aec9c --- /dev/null +++ b/app/main/api/etc/merchant/wxpay/pub_key.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwamIS5KioHheN2FuePF0 +WQyoCKbixwybUZCJCb2rgEgp0slmCnpneLhVwejXYTJT6t2W6683Dj70gfs+g5+P +AjxA7UrBIN/IJalNz1m95NSNzg3VnK56p7x+PJpQrfwAOmEdqdxj9IS3wVYMFQnu +oCA2K2hnhKdEbaWI6iZM2wweGLeqhVQlhIJXLQJ4/OWVCyZ/fR+g6atuX0Uz6JGX +yY+0Is0sj56Lw8gtGNjKoFkEFy/p/eB+C0Rg7WCsZICuB1UZuAZEpS0L55qi9f33 +s3vdWJHnWj5FKKBLTW1qtUA7uU24uk9aJaKGlWKBUC26QQpTbh2pVEEQa6ZxghDO +1QIDAQAB +-----END PUBLIC KEY----- diff --git a/app/main/api/internal/service/wechatpayService.go b/app/main/api/internal/service/wechatpayService.go index f9cf584..2ba0b4a 100644 --- a/app/main/api/internal/service/wechatpayService.go +++ b/app/main/api/internal/service/wechatpayService.go @@ -138,10 +138,20 @@ func newWechatPayServiceWithWxPayPubKey(c config.Config, userAuthModel model.Use // 注册证书下载器,用于下载平台证书(回调验签需要) // 注意:使用公钥方式时,需要手动注册证书下载器才能下载平台证书 + // 由于已配置公钥文件,证书下载改为可选,不阻塞初始化 err = downloader.MgrInstance().RegisterDownloaderWithClient(context.Background(), client, mchID, mchAPIv3Key) if err != nil { - logx.Errorf("注册证书下载器失败: %v", err) - panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) + // 检查是否是404错误,可能是配置问题 + if apiErr, ok := err.(*core.APIError); ok && apiErr.StatusCode == 404 { + logx.Infof("[警告] 注册证书下载器失败(404): 可能是商户号(%s)、证书序列号或API密钥配置错误,或网络问题。错误详情: %v", mchID, err) + logx.Infof("[提示] 如果已正确配置公钥文件(%s),可以继续使用,证书下载失败不影响支付功能", mchPublicKeyPath) + } else { + logx.Infof("[警告] 注册证书下载器失败(非致命错误,将使用配置的公钥进行验签): %v", err) + } + // 不阻塞初始化,因为已经配置了公钥文件,可以直接用于验签 + // 如果后续需要下载平台证书,可以在回调处理时重试 + } else { + logx.Infof("证书下载器注册成功") } // 初始化 notify.Handler diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index d60d63f..959b7a6 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,14 +1,14 @@ services: mysql: image: mysql:8.0.34 - container_name: qnc_mysql + container_name: zac_mysql environment: # 时区上海 - Time zone Shanghai (Change if needed) TZ: Asia/Shanghai # root 密码 - root password MYSQL_ROOT_PASSWORD: yfg87gyuYiy1 - MYSQL_DATABASE: qnc - MYSQL_USER: qnc + MYSQL_DATABASE: zac + MYSQL_USER: zac MYSQL_PASSWORD: 5vg67b3UNHu8 ports: - "21201:3306" @@ -26,11 +26,11 @@ services: --lower_case_table_names=1 restart: always networks: - - qnc_net + - zac_net redis: image: redis:7.4.0 - container_name: qnc_redis + container_name: zac_redis ports: - "21202:6379" environment: @@ -43,39 +43,39 @@ services: privileged: true restart: always networks: - - qnc_net + - zac_net asynqmon: image: hibiken/asynqmon:latest - container_name: qnc_asynqmon + container_name: zac_asynqmon ports: - "21203:8080" environment: - TZ=Asia/Shanghai command: - - "--redis-addr=qnc_redis:6379" + - "--redis-addr=zac_redis:6379" - "--redis-password=3m3WsgyCKWqz" restart: always networks: - - qnc_net + - zac_net depends_on: - redis phpmyadmin: image: phpmyadmin/phpmyadmin - container_name: qnc_phpmyadmin + container_name: zac_phpmyadmin restart: unless-stopped environment: - PMA_HOST: qnc_mysql + PMA_HOST: zac_mysql PMA_PORT: 3306 - PMA_USER: qnc + PMA_USER: zac PMA_PASSWORD: 5vg67b3UNHu8 ports: - "21204:80" depends_on: - mysql networks: - - qnc_net + - zac_net networks: - qnc_net: + zac_net: driver: bridge