Как создать настраиваемый продукт, используя REST API v2?

8

Я пытаюсь создать настраиваемый продукт под названием «Kudos Configurable» с возможностью выбора пользователем: маленький зеленый, большой зеленый, маленький оранжевый и большой оранжевый.

Я дошел до стадии, когда настраиваемый продукт был создан с помощью API с использованием следующего JSON в запросе PUT для / rest / V1 / products / KudosConfig.

    {
      "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 с сообщением:

Что-то пошло не так при сохранении опции.

Не особенно полезно ...

Краткая информация о поиске в Google позволяет предположить, что это проблема https://github.com/magento/magento2/issues/5580 .

Следующим шагом является проверка того, готов ли клиент взломать файл configurable.php.

РЕДАКТИРОВАТЬ: Теперь попытался изменить файл configurable.php, но, похоже, ничего не изменилось, все еще получая ту же ошибку, снова озадаченную.

SD252
источник

Ответы:

6

Наконец, похоже, это работает. Я думаю, проблема в том, что attribute_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
         ]
       }
     }
   }
SD252
источник
Почему вы добавили "product_id": 299?
DevonDahon
Я не уверен, что это не было необходимо в конце, и это не в конечном коде. Вероятно, это было то, что я пытался заставить это работать
SD252
Я понял, что он был добавлен автоматически при создании настраиваемого продукта.
DevonDahon
Сэр, я могу использовать этот код в контроллере? для добавления настраиваемого продукта? если да, то скажи мне, как сохранить?
Нихил Вагхела
Да, не стесняйтесь использовать его, я не уверен, что вы имеете в виду, как сохранить его.
SD252