Shopify Storefront API

cartCreate 加 deliveryGroups 报字段不存在

现象#

按直觉拼 cartCreate(input: { lines: [...], deliveryGroups: [...] }),返回 Field 'deliveryGroups' doesn't exist on type 'CartInput';删掉之后运费和地址又完全没带进结账。

原因#

  • deliveryGroups 是 Cart 的输出字段,只能查不能写,塞进 CartInput 必然被 schema 拒绝
  • 地址与市场上下文属于 buyerIdentity,要传 countryCode 或 deliveryAddressPreferences
  • 具体配送方式要在创建后用 cartSelectedDeliveryOptionsUpdate 选择,而不是在创建时指定
  • 想拿承运商实时运费还得在查询里加 @defer 并传 withCarrierRates: true

处理步骤#

  1. 从 input 里删掉 deliveryGroups,改为传 buyerIdentity: { countryCode: DE, email: ... }
  2. 需要预填地址时在 buyerIdentity.deliveryAddressPreferences 里放一个 deliveryAddress
  3. 创建后用 cart(id:) { deliveryGroups(first: 5) { nodes { id deliveryOptions { handle } } } } 查可选方式
  4. 选中方式时调用 cartSelectedDeliveryOptionsUpdate,传 deliveryGroupId 与 deliveryOptionHandle
  5. 要实时运费就在查询上加 @defer 并传 withCarrierRates: true

验收标准#

cartCreate 返回的 buyerIdentity.countryCode 与传入一致,deliveryGroups 至少一个节点且 deliveryOptions 非空。

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