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

28 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 你的现象与原因归纳
- 你只看到 `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` 能产生差异数据(如金额不一致、缺失条目)。
我将按以上步骤先进行只读验证(接口与日志路径),随后按修复方案更新入库错误处理并回归测试,确保你在“退款管理”与“对账管理”都能看到数据。