¿Cómo creo un producto configurable usando la API REST v2?

8

Estoy tratando de crear un producto configurable llamado "Kudos Configurable" con opciones para que el usuario seleccione entre verde pequeño, verde grande, naranja pequeño y naranja grande.

Llegué a la etapa en la que se creó un producto configurable a través de la API utilizando el siguiente JSON en una solicitud PUT a / 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
           }
         }
       }
     }

Los productos secundarios se han creado utilizando la API utilizando el siguiente JSON para cada uno de los 4 elementos con atributos de tamaño y color establecidos mediante el mismo 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"
          }
        ]
      }
    }

Esto funciona bien y los productos se crean con los atributos establecidos correctamente.

Pensé que la última etapa era usar el servicio configurableProductLinkManagementV1 para vincular los productos secundarios, pero usando una solicitud POST a / rest / V1 / configurable-products / KudosConfig / child con el siguiente JSON devuelve el error de solicitud incorrecta HTTP 400.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Estoy pensando que podría haber algo más que deba hacer en el producto principal, pero estoy luchando para resolver qué. Dentro del servicio catalogProductRepositoryV1 puede agregar una variedad de opciones_product_configurable, he intentado jugar con esto pero solo he recibido errores de solicitud incorrectos.

Cualquier luz que alguien pueda arrojar sobre esto sería muy apreciada, ya pasó demasiado tiempo en esto.

EDITAR:

Ahora he intentado agregar las opciones de producto configurable en la solicitud PUT del producto configurable, esto ahora se ve así.

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

Cuando intento esto, recibo una respuesta 400 con el mensaje:

Algo salió mal al guardar la opción.

No particularmente útil ...

Un poco de Google sugiere que este es el problema https://github.com/magento/magento2/issues/5580 .

El siguiente paso es ver si el cliente está feliz de hackear el archivo configurable.php.

EDITAR: ahora he intentado cambiar el archivo configurable.php pero no parece haber hecho una diferencia, aún obteniendo el mismo error tan perplejo de nuevo.

SD252
fuente

Respuestas:

6

Finalmente parece que esto funciona. Creo que el problema es que el atributo_id dentro de la matriz de opciones de producto configurable debe ser la identificación numérica, no el código de atributo, como este:

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

También se agregaron los enlaces de productos en la misma solicitud para que la solicitud de producto configurable final se vea así:

    {
      "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
fuente
¿Por qué agregaste "product_id": 299?
DevonDahon
No estoy seguro, no fue necesario al final y no está en el código final. Probablemente era algo que estaba tratando de hacer que funcione
SD252
Me di cuenta de que en realidad se agregó automáticamente al crear el producto configurable.
DevonDahon
señor, ¿puedo usar este código en el controlador? para agregar producto configurable? en caso afirmativo, entonces dime cómo ahorrar?
Nikhil waghela
Sí, siéntase libre de usarlo, no estoy seguro de lo que quiere decir sobre cómo guardarlo.
SD252