yeg
2026-09-18 0df97e3090a94493c1d8d9cd2909916d343c96e6
refs
用户 yeg <1347747024@qq.com>
星期五, 九月 18, 2026 15:14 +0800
提交者 yeg <1347747024@qq.com>
星期五, 九月 18, 2026 15:14 +0800
提交0df97e3090a94493c1d8d9cd2909916d343c96e6
目录 6d7f936f9e948bbf749c2519522cd20e2c035340 目录 | zip | gz
parent 131a28347f2c3ce272f61fce425a6eea4fa5e51c 查看 | 对比
fix(payment): 无实付金额的订单改走本地退款,不再向通道发起

0 元订单(整单被权益免费额度覆盖、下单即待核销)里没有钱,通道侧也没有原交易可指,
退款却按通道退款处理,卡在金额闸门上抛 Invalid refund amount:用户从「待使用」里出不去,
这一次免费额度也永远占着。开发库里有 12 单停在「有退款按钮、点了必定报错」的状态。

根因是退款把「能退的东西」等同于「通道收过的钱」。改为 paid_amount = 0 时本地结清:
不发通道请求,通道相关列留空并写一条自解释回执(LOCAL_NO_PAYABLE_AMOUNT),在同一事务里
让订单退出待核销,被占用的免费额度随之释放;不留「退款中」,因为那个状态的含义是等通道的
结论,而这单没有通道那一侧。悬账退款不受影响,仍然只走通道。

回归测试走真实链路(配了免费额度的商品 → 人才端下单 → 使用记录点退款),断言额度确实回来,
并用 verifyNoInteractions 锁住「从头到尾没碰过通道」;另有一条边界用例保证 0 元单上显式要求
退非零金额仍然被拒。修复前该用例报的正是用户那句 Invalid refund amount。
1个文件已添加
1个文件已修改
230 ■■■■■ 已修改文件
talent-card-server/src/main/java/com/talentcard/server/business/payment/HuifuRefundService.java 39 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/ZeroAmountRefundTests.java 191 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史