Shopify Storefront API

cartLinesUpdate 把数量改成 0 行项目没删掉怎么办

现象#

购物车减到 0 时调用 cartLinesUpdate(lines: [{ id, quantity: 0 }]),响应里那一行仍在,totalQuantity 变了但 lines 长度没变,偶尔还收到 userErrors 里的 INVALID。

原因#

  • CartLineUpdateInput.quantity 的语义是设置数量,0 并非稳定的删除指令,不同版本表现不一致
  • 删除行有专门的 cartLinesRemove,参数是行 id 而不是 merchandise id
  • 传成 ProductVariant 的 GID 时,mutation 可能直接忽略该行而不报错
  • 行 id 在 cartLinesAdd 之后会变化,前端缓存的旧 id 已经指向不存在的行

处理步骤#

  1. 在减到 0 的分支改调 cartLinesRemove(cartId:, lineIds: [lineId])
  2. 确认 lineId 来自 cart.lines.nodes[].id,形如 gid://shopify/CartLine/...
  3. mutation 后立刻回读 cart { totalQuantity lines(first: 50) { nodes { id quantity } } }
  4. 对 userErrors 打印 field 与 message,不要只看 HTTP 200 就认为成功
  5. 前端购物车状态以回读结果为准,不要本地先减再等服务端响应

验收标准#

删除后 totalQuantity 与 lines 长度同时减少,cart.cost.subtotalAmount 同步变化,再次查询该行 id 已不存在。

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