微信支付密钥使用 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 mkdir -p /app/certs
# 声明暴露端口(实际端口通过环境变量传入)
ENV APP_PORT=8080
EXPOSE ${APP_PORT}
# 声明卷,用于在运行时挂载私密的证书文件
VOLUME ["/app/certs"]
# 声明暴露端口
EXPOSE 8080
# 启动平台服务
CMD ["/app/platform"]

View File

@@ -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 进行参数验证
- 格式化控制台输出
### 长期

16
pkg/env/env.go vendored
View File

@@ -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")

View File

@@ -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)
}