bindbox-game/.trae/documents/补充证书路径接入与通知验签方案.md
邹方成 6ee627139c
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat: 新增支付测试小程序与微信支付集成
feat(pay): 添加支付API基础结构
feat(miniapp): 创建支付测试小程序页面与配置
feat(wechatpay): 配置微信支付参数与证书
fix(guild): 修复成员列表查询条件
docs: 更新代码规范文档与需求文档
style: 统一前后端枚举显示与注释格式
refactor(admin): 重构用户奖励发放接口参数处理
test(title): 添加称号效果参数验证测试
2025-11-17 00:42:08 +08:00

2.9 KiB
Raw Blame History

目标

  • 使用你已填写的配置按“config/cert”中的证书路径完成微信支付真实接入统一下单+小程序签名+通知验签/解密。

当前配置状况

  • 已存在 [wechatpay] 配置段并支持 ENV 覆盖:mchid/serial_no/private_key_path/api_v3_key/notify_urlconfigs/configs.go
  • 证书路径建议:将商户私钥 apiclient_key.pem 放在 ./configs/cert/apiclient_key.pem,并把 private_key_path 配置为该相对路径。

具体改造点

  • 证书路径接入:
    • 不新增新的配置段,直接使用 [wechatpay].private_key_path 指向 config/cert 中的私钥路径。
    • 若你希望本地校验平台证书(而非自动下载),增加可选字段:wechatpay.platform_cert_pathwechatpay.platform_public_key_id(可留空);否则走自动下载。
  • 统一下单JSAPI按已封装客户端调用
    • 读取 private_key_path → 初始化 core.ClientWithWechatPayAutoAuthCipher),自动管理平台证书。
    • jsapi.Prepay 返回 prepay_id,之后用已有 BuildJSAPIParams 生成 wx.requestPayment 所需参数。
  • 支付通知验签与解密:
    • 使用 SDK 的平台证书下载管理器:在通知处理处懒加载 downloader.MgrInstance().RegisterDownloaderWithPrivateKey(mchid, serial_no, private_key, api_v3_key)
    • notify.NewNotifyHandler(api_v3_key, RSAVerifier(certificateVisitor)) 验签;解密 resource.ciphertext 得到 payments.Transaction;按 out_trade_no/success_time 幂等推进订单。
    • 条件更新:WHERE status=1 防并发重复推进;已支付直接 ACK。

文件与位置(只改后端)

  • 设置路径:在 configs/*_configs.toml[wechatpay] 写入 private_key_path = "./configs/cert/apiclient_key.pem"(你已填写即可)。
  • 统一下单:internal/pkg/pay/client.go 已使用该路径初始化;无需再改。
  • 通知验签:internal/api/pay/wechat_notify.go 切换为 SDK 验签/解密实现(现在是占位版),引入 downloader + notify.Handler。

验证步骤

  • 编译通过:go build ./...
  • 预下单:调用 POST /api/app/pay/wechat/jsapi/preorder 返回小程序参数;wx.requestPayment 可正常调起。
  • 通知:微信推送或用 SDK 模拟请求,验签成功后订单由待支付→已支付,paid_at 为交易成功时间;重复通知幂等。

安全与合规

  • 私钥路径仅用于服务端签名;不要提交证书文件到仓库。
  • 金额单位统一为分;仅信任服务端订单金额。

我将执行的改动(收到确认后)

  1. 在各环境 *_configs.toml 确认/写入 wechatpay.private_key_path 指向 config/cert
  2. 将通知处理替换为 SDK 验签/解密版本(保留幂等与条件更新)。
  3. 增加可选本地平台证书配置支持(如你偏好离线证书验证)。
  4. 自测:预下单→支付→通知推进,重复通知幂等校验。