¿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.

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

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.