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): 添加称号效果参数验证测试
3.0 KiB
3.0 KiB
你的现象与原因归纳
- 你只看到
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)。
- 支付回调写交易记录的地方使用了“静默写入”,失败不会报错:
验证与定位步骤
- 查询订单详情聚合的退款:
GET admin/pay/orders/:order_no(internal/router/router.go:175,实现internal/api/admin/pay_orders_admin.go:216-226),确认refunds列表与refundable_amount是否合理。 - 查询全局退款列表:
GET admin/pay/refunds?page=1&size=20(internal/router/router.go:170,实现internal/api/admin/pay_refund_admin.go:154-181)。 - 验证 DB 表存在与权限:确认
payment_refunds、payment_transactions表存在且可写;如果插入失败,当前代码不会抛错,需要看服务日志是否有“私钥/证书、权限、字段类型”等异常。 - 核验微信支付配置与回调:
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能产生差异数据(如金额不一致、缺失条目)。
- 发起支付→收到回调→检查
我将按以上步骤先进行只读验证(接口与日志路径),随后按修复方案更新入库错误处理并回归测试,确保你在“退款管理”与“对账管理”都能看到数据。