如何使用REST API v2创建可配置产品?


8

我正在尝试创建一个名为“ Kudos Configurable”的可配置产品,其中的选项供用户从小绿色,大绿色,小橙色和大橙色中选择。

我已经到了通过对/ rest / V1 / products / KudosConfig的PUT请求中使用以下JSON通过API创建可配置产品的阶段。

    {
      "product":{
        "sku":"KudosConfig",
        "name":"Kudos Configurable",
        "price":30.00,
        "status":4,
        "type_id":"configurable",
        "attribute_set_id":4,
        "weight":1,
        "extension_attributes":{
          "stock_item":{
            "qty":10,
            "is_in_stock":true
           }
         }
       }
     }

子产品是使用API​​使用以下JSON创建的,用于以下4个项目中的每个项目,并通过相同的方法设置了尺寸和颜色属性。

    {
      "product":{
        "sku":"KudosConfigGreenSmall ",
        "name":"Kudos Configurable Green Small",
        "price":30.00,
        "status":0,
        "type_id":"virtual",
        "visibility":1,
        "attribute_set_id":4,
        "weight":1,
        "extension_attributes":{
          "stock_item":{
            "qty":10,
            "is_in_stock":true
          }
        },
        "custom_attributes":[
          {
            "attribute_code":"kudos_colour",
            "value":"328"
          },
          {
            "attribute_code":"kudos_size",
            "value":"330"
          }
        ]
      }
    }

这工作正常,并且使用正确设置的属性创建了产品。

我以为最后一步是使用configurableProductLinkManagementV1服务来链接子产品,但是使用POST请求到/ rest / V1 / configurable-products / KudosConfig / child并使用以下JSON返回HTTP 400错误请求错误。

    {
      "childSku":"KudosConfigGreenSmall"
    }

我认为母产品可能还需要做些其他事情,但是我正在努力找出要解决的问题。在catalogProductRepositoryV1服务中,您可以添加configurable_product_options数组,我尝试过使用此方法,但仅返回了错误的请求错误。

任何人都可以从中找到任何亮点,我们将不胜感激,因为已经花了太长时间。

编辑:

现在尝试将configurable_product_options添加到可配置产品PUT请求中,现在看起来像这样。

    {
      "product":{
        "sku":"KudosConfig",
        "name":"Kudos Configurable",
        "price":30.00,
        "status":4,
        "type_id":"configurable",
        "attribute_set_id":4,
        "weight":1,
        "extension_attributes":{
          "stock_item":{
            "qty":10,
            "is_in_stock":true
          },
          "configurable_product_options":[
            {
              "attribute__id":"kudos_colour",
              "label":"Colour",
              "values":[
                {
                  "value_index":340
                },
                {
                  "value_index":341
                }
              ]
            },
            {
              "attribute__id":"kudos_size",
              "label":"Size",
              "values":[
                {
                  "value_index":343
                },
                {
                  "value_index":342
                }
              ]
            }
          ]
        }
      }
    }

当我尝试此操作时,我收到一条消息400:

保存选项时出了点问题。

没有特别的帮助...

快速搜索表明这是问题https://github.com/magento/magento2/issues/5580。

下一步是查看客户是否愿意对configurable.php文件进行破解。

编辑:现在尝试更改configurable.php文件,但似乎没有什么不同,仍然得到相同的错误,因此再次被绊倒。

Answers:


6

终于似乎有了这项工作。我认为问题在于,可配置产品选项数组中的attribute_id应该是数字ID,而不是属性代码,如下所示:

        "configurable_product_options":[
        {
          "attribute__id":"192",
          "label":"Colour",
          "values":[
            {
              "value_index":340
            },
            {
              "value_index":341
            }
          ]
        },
        {
          "attribute__id":"193",
          "label":"Size",
          "values":[
            {
              "value_index":343
            },
            {
              "value_index":342
            }
          ]

在同一请求中还添加了产品链接,因此最终可配置的产品请求如下所示:

    {
      "product":{
        "sku":"KudosConfig",
        "name":"Kudos Configurable",
        "price":30,
        "status":1,
        "type_id":"configurable",
        "attribute_set_id":4,
         "extension_attributes":{
           "stock_item":{
             "is_in_stock":true
           },
           "configurable_product_options":[
             {
               "attribute__id":"193",
               "label":"Colour",
               "position":0,
               "values":[
                 {
                   "value_index":340
                 },
                 {
                   "value_index":341
                 }
               ],
               "product_id":299
             },
             {
               "attribute__id":"192",
               "label":"Size",
               "position":1,
               "values":[
                 {
                   "value_index":343
                 },
                 {
                   "value_index":342
                 }
               ],
               "product_id":299
             }
           ],
         "configurable_product_links":[
           300,
           301,
           302,
           303
         ]
       }
     }
   }

为什么添加“ product_id”:299?
— DevonDahon

我不确定,最后没有必要,最终代码中也没有。这可能是我试图使其正常工作的原因
— SD252

我意识到它实际上是在创建可配置产品时自动添加的。
— DevonDahon

先生,我可以在控制器中使用此代码吗?用于添加可配置产品?如果是,那请给我打电话如何保存?
— Nikhil waghela '17

是的,随时使用它,我不确定您对保存它的含义。
— SD252
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.