Como crio um produto configurável usando a API REST v2?

8

Estou tentando criar um produto configurável chamado "Kudos configurável", com opções para o usuário selecionar entre verde pequeno, verde grande, laranja pequeno e laranja grande.

Cheguei ao estágio em que um produto configurável foi criado por meio da API usando o seguinte JSON em uma solicitação PUT para / 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
           }
         }
       }
     }

Os produtos filhos foram criados usando a API usando o JSON a seguir para cada um dos 4 itens com atributos para tamanho e cor definidos pelo mesmo método.

    {
      "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"
          }
        ]
      }
    }

Isso está funcionando bem e os produtos são criados com os atributos definidos corretamente.

Eu pensava que o último estágio era usar o serviço configurableProductLinkManagementV1 para vincular os produtos filhos, mas usando uma solicitação POST para / rest / V1 / produtos configuráveis ​​/ KudosConfig / child com o seguinte JSON retorna erro de solicitação incorreta HTTP 400.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Estou pensando que pode haver algo mais que preciso fazer no produto pai, mas estou lutando para descobrir o que. Dentro do serviço catalogProductRepositoryV1, você pode adicionar uma matriz de configurable_product_options. Tentei brincar com isso, mas só tenho erros de solicitação incorretos.

Qualquer luz que alguém possa lançar sobre isso seria muito apreciada, já que passou muito tempo nisso.

EDITAR:

Agora você tentou adicionar as configurable_product_options à solicitação PUT do produto configurável, agora isso se parece com isso.

    {
      "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
                }
              ]
            }
          ]
        }
      }
    }

Quando tento isso, recebo uma resposta de 400 com a mensagem:

Ocorreu um erro ao salvar a opção.

Não é particularmente útil ...

Um pouco rápido no Google sugere que esse é o problema https://github.com/magento/magento2/issues/5580 .

O próximo passo é verificar se o cliente está satisfeito em fazer o hack no arquivo configurable.php.

EDIT: Agora tentei alterar o arquivo configurable.php, mas não parece ter feito a diferença, ainda recebendo o mesmo erro, de modo que perco novamente.

SD252
fonte

Respostas:

6

Finalmente parece ter esse trabalho. Eu acho que a questão é que o attribute_id dentro da matriz de opções configuráveis ​​do produto deve ser o ID numérico, não o código do atributo, assim:

        "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
            }
          ]

Também foram adicionados os links do produto na mesma solicitação, para que a solicitação final configurável do produto fique assim:

    {
      "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
fonte
Por que você adicionou "product_id": 299?
DevonDahon
Não tenho certeza, não era necessário no final e não está no código final. Provavelmente era algo que eu estava tentando fazê-lo funcionar
SD252
Percebi que ele foi realmente adicionado automaticamente ao criar o produto configurável.
DevonDahon 01/07/19
senhor, posso usar esse código no controlador? para adicionar produto configurável? se sim, então me diga como salvar?
Nikhil waghela
Sim, sinta-se à vontade para usá-lo, não sei o que você quer dizer sobre como salvá-lo.
SD252