Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat(pay): 添加支付API基础结构 feat(miniapp): 创建支付测试小程序页面与配置 feat(wechatpay): 配置微信支付参数与证书 fix(guild): 修复成员列表查询条件 docs: 更新代码规范文档与需求文档 style: 统一前后端枚举显示与注释格式 refactor(admin): 重构用户奖励发放接口参数处理 test(title): 添加称号效果参数验证测试
38 lines
2.9 KiB
Markdown
38 lines
2.9 KiB
Markdown
# 目标
|
||
- 使用你已填写的配置,按“config/cert”中的证书路径完成微信支付真实接入:统一下单+小程序签名+通知验签/解密。
|
||
|
||
# 当前配置状况
|
||
- 已存在 `[wechatpay]` 配置段并支持 ENV 覆盖:`mchid/serial_no/private_key_path/api_v3_key/notify_url`(configs/configs.go)。
|
||
- 证书路径建议:将商户私钥 `apiclient_key.pem` 放在 `./configs/cert/apiclient_key.pem`,并把 `private_key_path` 配置为该相对路径。
|
||
|
||
# 具体改造点
|
||
- 证书路径接入:
|
||
- 不新增新的配置段,直接使用 `[wechatpay].private_key_path` 指向 `config/cert` 中的私钥路径。
|
||
- 若你希望本地校验平台证书(而非自动下载),增加可选字段:`wechatpay.platform_cert_path` 和 `wechatpay.platform_public_key_id`(可留空);否则走自动下载。
|
||
- 统一下单(JSAPI)按已封装客户端调用:
|
||
- 读取 `private_key_path` → 初始化 `core.Client`(`WithWechatPayAutoAuthCipher`),自动管理平台证书。
|
||
- `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. 自测:预下单→支付→通知推进,重复通知幂等校验。 |