后台显示退款成功,Credit Memo 也存在,但 SKU 库存没有增加。退款金额与退货入库是两个动作:财务上退钱,不代表商品物理上已经回到可销售仓库。Magento 允许在 Credit Memo 行项目上选择 Return to Stock;MSI 和外部 WMS 又会进一步决定回到哪个 Source。

先看 Credit Memo 行项目

SELECT cm.increment_id, cm.state, cm.created_at,
       item.sku, item.qty, item.back_to_stock
FROM sales_creditmemo AS cm
JOIN sales_creditmemo_item AS item ON item.parent_id = cm.entity_id
WHERE cm.order_id = 123;

back_to_stock 能说明创建贷项通知时的选择,但还要结合商品是否已经发货、商品类型和库存模块。虚拟商品没有物理库存;Bundle/Configurable 应检查实际扣减的简单子 SKU。

退款入口改变执行链

从 Magento invoice 创建在线退款,支付模块与库存逻辑通常按服务层执行;只在支付平台后台退款,Magento 根本不知道;第三方 ERP 直接创建 Credit Memo 若绕过标准 API,也可能没有触发库存回补。记录是谁、从哪个系统、通过哪个接口发起。

MSI 要找原扣减 Source

订单下单先写 reservation,发货时从具体 Source 扣减。退货时是否回原 Source、默认 Source 还是等待仓库验收,取决于流程和扩展。查询 shipment source、source item 数量与 reservation 时间线,避免只看聚合 salable quantity。

若商品尚未发货,取消/退款通常通过 reservation 补偿恢复可售量,而不是增加某个 Source 的物理 quantity;因此“Source 数量没变”可能是正确的。已发货退货则需要明确实物入库。

不要手工加库存掩盖流程

直接在 source item 上加数量,随后 WMS 回传一次退货,库存会重复增加。先确定 Magento 与 WMS 谁是物理库存主系统,并用退货单号建立幂等记录。需要临时修复时,也要记录原数量、事件和调整原因。

一张订单做全链路测试

测试未发货取消、已发货全额退款、部分数量退款、不同 Source 发货和可配置商品。每一步记录 order/invoice/shipment/credit memo、reservation 汇总、source quantity 与 salable quantity。库存是否“回来”必须与实物和订单阶段一致,而不是只看退款按钮成功提示。

部分退款要核对数量,不只看金额

管理员可以只退运费或调整金额而不退商品数量;这种 Credit Memo 不应增加库存。反过来,退两件只勾一件 Return to Stock,也只能回补一件。比较 credit memo item qty、back_to_stock、订单已退款数量和 shipment 数量,防止按总退款金额推断库存动作。