库存报 The quantity can't be negative
现象#
用 inventorySetQuantities 把某地点可用量改成 -5 想表示超卖,接口返回 200,但 userErrors 里是 INVALID_QUANTITY_NEGATIVE,后台库存页数字也没变。
原因#
- available 是由 on_hand 减去已承诺与预留算出的派生值,不能直接写成负数
- mutation 只在校验全部通过后落库,任一行的 quantity 为负会让整个批次回滚
- 后台「继续销售缺货商品」只影响前台能否下单,不改变库存字段的取值范围
- quantity 传成了带千分位或货币符号的字符串,解析后变成非法数值被拒
处理步骤#
- 先查
inventoryItem与location的 GID,确认两者都已关联该商品 - 把 name 改成
on_hand,reason 填correction,用实数表达盘点结果 - 请求里保留
compareQuantity做乐观锁,避免覆盖别人刚做的调整 - 要表达缺货仍可下单,去变体上勾选
Continue selling when out of stock - 重放前用
inventoryLevel查询读回 quantities,确认基准值再提交
验收标准#
再次调用后 userErrors 为空数组,inventoryLevel.quantities 里 available 等于预期整数,后台该地点的库存显示同值。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。