如何使用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.