You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify GraphQL创建产品时options参数类型转换错误排查

问题描述

我正在使用Shopify Admin的GraphiQL编辑器测试推送产品至店铺的mutation,代码如下:

mutation createProduct($input: ProductInput!) {
  productCreate(input: $input) {
    product {
      title
      descriptionHtml
      vendor
      handle
      tags
      variants(first: 50)  {
          nodes  {
              inventoryItem {
                  tracked
                  sku
              }
              price
              sku
          }
      }
      options { 
          name
          position
          values
      }
    }
  }
}

根据文档,$input为ProductInput!类型,我以为input.options是包含name、position、values字段的对象数组,但传入如下参数时:

...
"options": [
   {
     "name": "Size",
     "position": 1,
     "values": [ "Small", "Medium", "Large" ]
   }
]
...

Shopify API返回错误:

"message": "Variable $input of type ProductInput! was provided invalid value for options.0 (Could not coerce value {name:\"Taille\",position:1,values:[\"S\",\"M\",\"L\"]} to String)"

此前用REST API时可以通过这种方式传入产品选项,请问GraphQL中如何实现相同效果(比如设置Size和Color两个选项)?是不是文档和实际实现不一致?

解决方案

错误原因

你混淆了Shopify不同API的字段定义:Admin API的ProductInput里的options字段不是对象数组,而是字符串数组,用来定义产品的选项名称(比如["Size", "Color"]),而不是包含名称、位置、值的完整对象。你之前看的是Storefront API的ProductOption对象定义,和Admin API的输入参数规则不一样。

正确实现方式

在Admin GraphQL API中,创建产品时:

  • options字段传入选项名称的字符串数组,用来指定产品有哪些选项(比如["Size", "Color"])
  • 选项的具体值需要和产品变体(variants)绑定,通过变体的optionValues字段来设置每个变体对应的选项值。

示例:创建带Size和Color选项的产品

Mutation代码:

mutation createProduct($input: ProductInput!) {
  productCreate(input: $input) {
    product {
      title
      options {
        name
        position
        values
      }
      variants(first: 50) {
        nodes {
          sku
          price
          optionValues {
            name
            value
          }
        }
      }
    }
    userErrors {
      message
      field
    }
  }
}

变量参数:

{
  "input": {
    "title": "测试产品",
    "vendor": "测试供应商",
    "options": ["Size", "Color"], // 字符串数组,定义选项名称
    "variants": [
      {
        "sku": "PROD-S-R",
        "price": "29.99",
        "optionValues": [
          { "name": "Size", "value": "Small" },
          { "name": "Color", "value": "Red" }
        ]
      },
      {
        "sku": "PROD-M-B",
        "price": "39.99",
        "optionValues": [
          { "name": "Size", "value": "Medium" },
          { "name": "Color", "value": "Blue" }
        ]
      }
    ]
  }
}

关于文档的说明

你之前参考的是Storefront API的ProductOption对象(用于查询产品信息),而Admin API的ProductInput(用于创建/更新产品)的options字段规则不同,属于文档参考错误,并非文档与实际实现不一致。Admin API的ProductInput定义里,options是[String!]类型,用来快速定义选项名称,选项值则通过变体关联。

内容的提问来源于stack exchange,提问作者Yassine Badache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:24:53