一笔 599 元订单退款完成,钱退了,随单送的 599 分还在账上,用户等于白拿了一笔。日志里能对上时间点,这种反而好排。
发分挂在订单完成钩子上,退款钩子只处理了金额和库存,没有对应的反向动作。部分退款时更没有判断到底退了多少。这一点先确认清楚,后面就不用反复试。
SELECT order_id, SUM(points) FROM wp_points_log WHERE order_id = 9021 GROUP BY order_id;
围绕「退款积分回滚」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:退款完成时按退款金额比例算出应扣分数;扣分走负数流水,余额不够就记成负值,别直接把退款拦掉;全额退款把该订单发的分整笔冲掉;用一笔部分退款单核对流水和余额。
结果对不对很好判断,全额退款后该订单积分净额为 0,部分退款按比例扣减,余额与流水一致。
