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

3.0 KiB
Raw Blame History

你的现象与原因归纳

  • 你只看到 payment_preorderspayment_notify_events 有数据,payment_refunds 等为空:
    • 支付回调写交易记录的地方使用了“静默写入”,失败不会报错:internal/api/pay/wechat_notify.go:92_ = ...Create(tx)),导致有回调事件但可能没有交易入库。
    • 退款创建同样采用“静默写入”:internal/api/admin/pay_refund_admin.go:79即使插入失败接口仍返回“success”所以你在前端看到提示但表里没数据。
    • 对账管理的数据依赖“导入账单”后才生成差异,未导入则 payment_billspayment_bill_diff 为空,属正常(internal/api/admin/pay_reconcile_admin.go:37-75,154-182)。

验证与定位步骤

  1. 查询订单详情聚合的退款:GET admin/pay/orders/:order_nointernal/router/router.go:175,实现 internal/api/admin/pay_orders_admin.go:216-226),确认 refunds 列表与 refundable_amount 是否合理。
  2. 查询全局退款列表:GET admin/pay/refunds?page=1&size=20internal/router/router.go:170,实现 internal/api/admin/pay_refund_admin.go:154-181)。
  3. 验证 DB 表存在与权限:确认 payment_refundspayment_transactions 表存在且可写;如果插入失败,当前代码不会抛错,需要看服务日志是否有“私钥/证书、权限、字段类型”等异常。
  4. 核验微信支付配置与回调:configs/fat_configs.toml:34-41wechatpay 配置、回调地址与路由匹配 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/importGET admin/pay/bills/diff

交付与测试计划

  • 修改错误处理后,执行一次完整流程:
    • 发起支付→收到回调→检查 payment_transactions 有记录。
    • 在订单详情发起退款→检查 payment_refunds 有记录,订单状态与积分流水一致。
    • 导入当天账单→检查 payment_bill_diff 能产生差异数据(如金额不一致、缺失条目)。

我将按以上步骤先进行只读验证(接口与日志路径),随后按修复方案更新入库错误处理并回归测试,确保你在“退款管理”与“对账管理”都能看到数据。