微信支付密钥使用 base64 字符串替换文件配置

This commit is contained in:
2025-05-10 10:07:10 +08:00
parent 071a0e1a6c
commit c987d0cb98
4 changed files with 29 additions and 24 deletions

View File

@@ -28,15 +28,8 @@ COPY --from=builder /build/bin/platform_linux_amd64 /app/platform
# 设置可执行权限 # 设置可执行权限
RUN chmod +x /app/platform RUN chmod +x /app/platform
# 创建存放密钥文件的目录 # 声明暴露端口
RUN mkdir -p /app/certs EXPOSE 8080
# 声明暴露端口(实际端口通过环境变量传入)
ENV APP_PORT=8080
EXPOSE ${APP_PORT}
# 声明卷,用于在运行时挂载私密的证书文件
VOLUME ["/app/certs"]
# 启动平台服务 # 启动平台服务
CMD ["/app/platform"] CMD ["/app/platform"]

View File

@@ -1,5 +1,6 @@
## todo ## todo
- 支付宝使用实际 appid
- 长效业务接入 - 长效业务接入
- 页面 账户总览 - 页面 账户总览
- 页面 提取记录 - 页面 提取记录
@@ -9,21 +10,20 @@
- globals 合并到 services 或者反之 - globals 合并到 services 或者反之
- 自定义的服务错误没有必要,可以统一在 handler 层使用包装的 fiber.Error - 自定义的服务错误没有必要,可以统一在 handler 层使用包装的 fiber.Error
- 公众号的到期提示 - 公众号的到期提示
- 支付回调处理
- 保存 session 到数据库
### 下阶段 ### 下阶段
- 支付回调处理 - 增加 domain 层,缓解同包字段过长的问题
- 保存 session 到数据库
- 扩展 device 权限验证方式,提供一种方法区分内部和外部服务 - 扩展 device 权限验证方式,提供一种方法区分内部和外部服务
- 废弃 password 授权模式,迁移到 authorization code 授权模式 - 废弃 password 授权模式,迁移到 authorization code 授权模式
- oauth token 验证授权范围 - oauth token 验证授权范围
- 实现白银节点的 warp 服务,用来去重与端口分配,保证测试与生产环境不会产生端口竞争 - 实现白银节点的 warp 服务,用来去重与端口分配,保证测试与生产环境不会产生端口竞争
- 增加 domain 层,缓解同包字段过长的问题
- callback 结果直接由 api 端提供,不通过前端转发 - callback 结果直接由 api 端提供,不通过前端转发
- debug白银节点提供一些工具接口方便快速操作 - debug白银节点提供一些工具接口方便快速操作
- 批量下线端口 - 批量下线端口
- 统一使用 validator 进行参数验证 - 统一使用 validator 进行参数验证
- 格式化控制台输出
### 长期 ### 长期

16
pkg/env/env.go vendored
View File

@@ -263,9 +263,9 @@ var (
WechatPayAppId string WechatPayAppId string
WechatPayMchId string WechatPayMchId string
WechatPayMchPrivateKeySerial string WechatPayMchPrivateKeySerial string
WechatPayMchPrivateKeyPath string WechatPayMchPrivateKey string
WechatPayPublicKeyId string WechatPayPublicKeyId string
WechatPayPublicKeyPath string WechatPayPublicKey string
WechatPayApiCert string WechatPayApiCert string
WechatPayCallbackUrl string WechatPayCallbackUrl string
WechatPayProduction = false WechatPayProduction = false
@@ -288,9 +288,9 @@ func loadWechatPay() {
panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_SERIAL 的值不能为空") panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_SERIAL 的值不能为空")
} }
WechatPayMchPrivateKeyPath = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY_PATH") WechatPayMchPrivateKey = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY")
if WechatPayMchPrivateKeyPath == "" { if WechatPayMchPrivateKey == "" {
panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_PATH 的值不能为空") panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY 的值不能为空")
} }
WechatPayPublicKeyId = os.Getenv("WECHATPAY_PUBLIC_KEY_ID") WechatPayPublicKeyId = os.Getenv("WECHATPAY_PUBLIC_KEY_ID")
@@ -298,9 +298,9 @@ func loadWechatPay() {
panic("环境变量 WECHATPAY_PUBLIC_KEY_ID 的值不能为空") panic("环境变量 WECHATPAY_PUBLIC_KEY_ID 的值不能为空")
} }
WechatPayPublicKeyPath = os.Getenv("WECHATPAY_PUBLIC_KEY_PATH") WechatPayPublicKey = os.Getenv("WECHATPAY_PUBLIC_KEY")
if WechatPayPublicKeyPath == "" { if WechatPayPublicKey == "" {
panic("环境变量 WECHATPAY_PUBLIC_KEY_PATH 的值不能为空") panic("环境变量 WECHATPAY_PUBLIC_KEY 的值不能为空")
} }
WechatPayApiCert = os.Getenv("WECHATPAY_API_CERT") WechatPayApiCert = os.Getenv("WECHATPAY_API_CERT")

View File

@@ -2,6 +2,7 @@ package globals
import ( import (
"context" "context"
"encoding/base64"
"platform/pkg/env" "platform/pkg/env"
"github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core"
@@ -21,13 +22,24 @@ type WechatPayClient struct {
func InitWechatPay() { func InitWechatPay() {
// 加载 rsa 密钥文件 // 加载商户私钥
appPrivateKey, err := utils.LoadPrivateKeyWithPath(env.WechatPayMchPrivateKeyPath) private, err := base64.StdEncoding.DecodeString(env.WechatPayMchPrivateKey)
if err != nil { if err != nil {
panic(err) 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 { if err != nil {
panic(err) panic(err)
} }