Shopify 报错排障

库存报 The quantity can't be negative

现象#

用 inventorySetQuantities 把某地点可用量改成 -5 想表示超卖,接口返回 200,但 userErrors 里是 INVALID_QUANTITY_NEGATIVE,后台库存页数字也没变。

原因#

  • available 是由 on_hand 减去已承诺与预留算出的派生值,不能直接写成负数
  • mutation 只在校验全部通过后落库,任一行的 quantity 为负会让整个批次回滚
  • 后台「继续销售缺货商品」只影响前台能否下单,不改变库存字段的取值范围
  • quantity 传成了带千分位或货币符号的字符串,解析后变成非法数值被拒

处理步骤#

  1. 先查 inventoryItem 与 location 的 GID,确认两者都已关联该商品
  2. 把 name 改成 on_hand,reason 填 correction,用实数表达盘点结果
  3. 请求里保留 compareQuantity 做乐观锁,避免覆盖别人刚做的调整
  4. 要表达缺货仍可下单,去变体上勾选 Continue selling when out of stock
  5. 重放前用 inventoryLevel 查询读回 quantities,确认基准值再提交

验收标准#

再次调用后 userErrors 为空数组,inventoryLevel.quantities 里 available 等于预期整数,后台该地点的库存显示同值。

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