## 你的现象与原因归纳 - 你只看到 `payment_preorders`、`payment_notify_events` 有数据,`payment_refunds` 等为空: - 支付回调写交易记录的地方使用了“静默写入”,失败不会报错:`internal/api/pay/wechat_notify.go:92`(`_ = ...Create(tx)`),导致有回调事件但可能没有交易入库。 - 退款创建同样采用“静默写入”:`internal/api/admin/pay_refund_admin.go:79`,即使插入失败,接口仍返回“success”,所以你在前端看到提示,但表里没数据。 - 对账管理的数据依赖“导入账单”后才生成差异,未导入则 `payment_bills`、`payment_bill_diff` 为空,属正常(`internal/api/admin/pay_reconcile_admin.go:37-75,154-182`)。 ## 验证与定位步骤 1. 查询订单详情聚合的退款:`GET admin/pay/orders/:order_no`(`internal/router/router.go:175`,实现 `internal/api/admin/pay_orders_admin.go:216-226`),确认 `refunds` 列表与 `refundable_amount` 是否合理。 2. 查询全局退款列表:`GET admin/pay/refunds?page=1&size=20`(`internal/router/router.go:170`,实现 `internal/api/admin/pay_refund_admin.go:154-181`)。 3. 验证 DB 表存在与权限:确认 `payment_refunds`、`payment_transactions` 表存在且可写;如果插入失败,当前代码不会抛错,需要看服务日志是否有“私钥/证书、权限、字段类型”等异常。 4. 核验微信支付配置与回调:`configs/fat_configs.toml:34-41` 的 `wechatpay` 配置、回调地址与路由匹配 `internal/router/router.go:252`。 ## 修复方案(代码层) - 将静默写库改为显式错误处理并日志: - 支付交易入库:`internal/api/pay/wechat_notify.go:92` 改为检查返回错误,失败则记录日志并返回错误,避免“有事件无交易”。 - 退款入库:`internal/api/admin/pay_refund_admin.go:79` 改为显式处理插入错误;同时在后续积分流水与订单状态更新前确保退款记录已成功写入。 - 接口返回语义修正:退款接口在任何一步失败时返回错误,不再统一 `success`,确保前端提示与真实入库一致。 ## 对账管理的正确使用 - 在“对账管理”导入每日账单(交易/退款)后再查看差异:前端入口 `web/admin/src/views/reconcile/diff/index.vue:45-76`;后端导入与差异查询分别为 `POST admin/pay/bills/import`、`GET admin/pay/bills/diff`。 ## 交付与测试计划 - 修改错误处理后,执行一次完整流程: - 发起支付→收到回调→检查 `payment_transactions` 有记录。 - 在订单详情发起退款→检查 `payment_refunds` 有记录,订单状态与积分流水一致。 - 导入当天账单→检查 `payment_bill_diff` 能产生差异数据(如金额不一致、缺失条目)。 我将按以上步骤先进行只读验证(接口与日志路径),随后按修复方案更新入库错误处理并回归测试,确保你在“退款管理”与“对账管理”都能看到数据。