Shopify 2022-07 REST API编辑商品选项名报错问题咨询
Shopify 2022-07 REST API 修改商品选项名称报错解决方案
核心结论
Shopify 2022-07版本REST API完全支持编辑商品选项名称,你遇到的报错是请求参数结构错误导致的,不是接口权限或功能限制问题。
报错原因
你当前代码的options字段传参不符合接口规则:
- Shopify商品接口的
product.options字段要求传入商品全量选项的索引数组,更新时必须带上该商品所有原有选项的完整信息,仅修改你需要调整的字段即可。 - 你当前的写法只传入了单个目标选项对象,接口解析时会判定你要将商品的所有选项替换为仅传入的这1项,等同于触发删除其余所有原有选项的逻辑;当被判定待删除的选项下关联了超过1个变体值时,就会返回
could not delete option because it has more than 1 value错误,和你遇到的报错完全一致。 - 后台手动重命名能成功,是因为后台前端提交请求时自动拼接了全量选项参数,不会触发删除选项的判定逻辑。
修复方法
- 先调用
GET /admin/api/2022-07/products/{product_id}.json接口拉取目标商品的完整信息,拿到当前所有选项的id、position、values全量数据 - 在拉取到的options数组中,找到你要修改的目标选项,仅修改它的
name字段值 - 将修改后的完整options数组随PUT请求提交即可
修正后的PHP cURL代码示例
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, testurl.'products/4383793250431.json'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); $product = array( "product" => array( "id" => 4383793250431, // 建议明确传入商品ID,避免路由解析异常 "options" => array( // 注意:必须传入商品所有选项,按原有position顺序排列,不能只传要修改的单个选项 array( "id" => 5688792809599, "name" => "Material1", // 仅修改此处的选项名称 "position" => 1, // values必须和原有选项值完全一致,不要随意增删,否则会触发变体重建 "values" => array("Cotton", "Polyester") ) // 如果商品存在第2、第3个选项,必须按原有顺序全部补全到该数组中,不得遗漏 ) ) ); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($product)); $headers = array(); $headers[] = 'Content-Type: application/json'; $headers[] = 'X-Shopify-Access-Token: '.TEST_ADMIN_API_TOKEN; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } curl_close($ch);
注意事项
- 禁止仅传入需要修改的单个选项到
options字段,未传入的原有选项会被接口判定为需要删除 - 多选项商品必须保持所有选项的
position顺序和原有顺序一致,不要随意调整 - 选项下的
values字段必须和原有值保持一致,随意增删值会触发商品变体重建逻辑,可能导致原有变体关联关系丢失
内容的提问来源于stack exchange,提问作者freshITmeat
相关产品推荐
相关产品推荐

