From c987d0cb98da6bc2d7c78b551fb0ad16e2085661 Mon Sep 17 00:00:00 2001 From: luorijun Date: Sat, 10 May 2025 10:07:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E4=BD=BF=E7=94=A8=20base64=20=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E6=9B=BF=E6=8D=A2=E6=96=87=E4=BB=B6=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 11 ++--------- README.md | 8 ++++---- pkg/env/env.go | 16 ++++++++-------- web/globals/{wechat.go => wechatpay.go} | 18 +++++++++++++++--- 4 files changed, 29 insertions(+), 24 deletions(-) rename web/globals/{wechat.go => wechatpay.go} (75%) diff --git a/Dockerfile b/Dockerfile index 1fbeae0..eeb0e47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,15 +28,8 @@ COPY --from=builder /build/bin/platform_linux_amd64 /app/platform # 设置可执行权限 RUN chmod +x /app/platform -# 创建存放密钥文件的目录 -RUN mkdir -p /app/certs - -# 声明暴露端口(实际端口通过环境变量传入) -ENV APP_PORT=8080 -EXPOSE ${APP_PORT} - -# 声明卷,用于在运行时挂载私密的证书文件 -VOLUME ["/app/certs"] +# 声明暴露端口 +EXPOSE 8080 # 启动平台服务 CMD ["/app/platform"] \ No newline at end of file diff --git a/README.md b/README.md index c4cd7f3..03fac08 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ ## todo +- 支付宝使用实际 appid - 长效业务接入 - 页面 账户总览 - 页面 提取记录 @@ -9,21 +10,20 @@ - globals 合并到 services 或者反之 - 自定义的服务错误没有必要,可以统一在 handler 层使用包装的 fiber.Error - 公众号的到期提示 +- 支付回调处理 +- 保存 session 到数据库 ### 下阶段 -- 支付回调处理 -- 保存 session 到数据库 +- 增加 domain 层,缓解同包字段过长的问题 - 扩展 device 权限验证方式,提供一种方法区分内部和外部服务 - 废弃 password 授权模式,迁移到 authorization code 授权模式 - oauth token 验证授权范围 - 实现白银节点的 warp 服务,用来去重与端口分配,保证测试与生产环境不会产生端口竞争 -- 增加 domain 层,缓解同包字段过长的问题 - callback 结果直接由 api 端提供,不通过前端转发 - debug:白银节点提供一些工具接口,方便快速操作 - 批量下线端口 - 统一使用 validator 进行参数验证 -- 格式化控制台输出 ### 长期 diff --git a/pkg/env/env.go b/pkg/env/env.go index 420c438..0e7535c 100644 --- a/pkg/env/env.go +++ b/pkg/env/env.go @@ -263,9 +263,9 @@ var ( WechatPayAppId string WechatPayMchId string WechatPayMchPrivateKeySerial string - WechatPayMchPrivateKeyPath string + WechatPayMchPrivateKey string WechatPayPublicKeyId string - WechatPayPublicKeyPath string + WechatPayPublicKey string WechatPayApiCert string WechatPayCallbackUrl string WechatPayProduction = false @@ -288,9 +288,9 @@ func loadWechatPay() { panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_SERIAL 的值不能为空") } - WechatPayMchPrivateKeyPath = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY_PATH") - if WechatPayMchPrivateKeyPath == "" { - panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_PATH 的值不能为空") + WechatPayMchPrivateKey = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY") + if WechatPayMchPrivateKey == "" { + panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY 的值不能为空") } WechatPayPublicKeyId = os.Getenv("WECHATPAY_PUBLIC_KEY_ID") @@ -298,9 +298,9 @@ func loadWechatPay() { panic("环境变量 WECHATPAY_PUBLIC_KEY_ID 的值不能为空") } - WechatPayPublicKeyPath = os.Getenv("WECHATPAY_PUBLIC_KEY_PATH") - if WechatPayPublicKeyPath == "" { - panic("环境变量 WECHATPAY_PUBLIC_KEY_PATH 的值不能为空") + WechatPayPublicKey = os.Getenv("WECHATPAY_PUBLIC_KEY") + if WechatPayPublicKey == "" { + panic("环境变量 WECHATPAY_PUBLIC_KEY 的值不能为空") } WechatPayApiCert = os.Getenv("WECHATPAY_API_CERT") diff --git a/web/globals/wechat.go b/web/globals/wechatpay.go similarity index 75% rename from web/globals/wechat.go rename to web/globals/wechatpay.go index b0f52b1..b3c99fa 100644 --- a/web/globals/wechat.go +++ b/web/globals/wechatpay.go @@ -2,6 +2,7 @@ package globals import ( "context" + "encoding/base64" "platform/pkg/env" "github.com/wechatpay-apiv3/wechatpay-go/core" @@ -21,13 +22,24 @@ type WechatPayClient struct { func InitWechatPay() { - // 加载 rsa 密钥文件 - appPrivateKey, err := utils.LoadPrivateKeyWithPath(env.WechatPayMchPrivateKeyPath) + // 加载商户私钥 + private, err := base64.StdEncoding.DecodeString(env.WechatPayMchPrivateKey) if err != nil { panic(err) } - wechatPublicKey, err := utils.LoadPublicKeyWithPath(env.WechatPayPublicKeyPath) + appPrivateKey, err := utils.LoadPrivateKey(string(private)) + if err != nil { + panic(err) + } + + // 加载微信支付公钥 + public, err := base64.StdEncoding.DecodeString(env.WechatPayPublicKey) + if err != nil { + panic(err) + } + + wechatPublicKey, err := utils.LoadPublicKey(string(public)) if err != nil { panic(err) }