# 目标
- 使用你已填写的配置，按“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. 自测：预下单→支付→通知推进，重复通知幂等校验。