Shopify 库存与地点

inventorySetQuantities 覆盖写入冲掉当天销量

现象#

ERP 每小时把 WMS 的库存绝对值写回 Shopify,下午三点那次同步后 Available 从 18 跳到 40,当天已经卖出的 22 件又被算成可售。

原因#

  • inventorySetQuantities 是绝对值覆盖,不关心 Shopify 期间发生的订单与调整
  • 写 on_hand 时可用量会同步变化,覆盖前若没有差额校验就会把销量抹掉
  • changeFromQuantity 传 null 等于跳过 compare-and-swap,并发下直接盖掉别人的写入
  • ERP 的库存口径含未上架与已预留数量,和 available 不是同一个含义

处理步骤#

  1. 先定清楚写 name: "on_hand" 还是 available,两者不要混着发
  2. 每次写入带 changeFromQuantity,遇到 CHANGE_FROM_QUANTITY_STALE 就重读再试
  3. 同步前比对 inventoryLevel.updatedAt,比 ERP 快照新就放弃本次写入
  4. 把 ERP 侧的预留量与在途量剔除,只推实物可售数
  5. 高频场景改增量:用 inventoryAdjustQuantities 传 delta,而不是绝对值

验收标准#

两次同步之间下单 5 件,第二次写入后 Available 等于 WMS 数量减 5,不再出现凭空回涨。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。