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