Come posso creare un prodotto configurabile utilizzando l'API REST v2?


8

Sto cercando di creare un prodotto configurabile chiamato "Kudos Configurable" con opzioni che l'utente può selezionare tra verde piccolo, verde grande, arancione piccolo e arancione grande.

Sono arrivato al punto in cui un prodotto configurabile è stato creato tramite l'API utilizzando il seguente JSON in una richiesta 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
           }
         }
       }
     }

I prodotti figlio sono stati creati utilizzando l'API utilizzando il seguente JSON per ciascuno dei 4 articoli con attributi per dimensioni e set di colori con lo stesso metodo.

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

Funziona bene e i prodotti vengono creati con gli attributi impostati correttamente.

Avevo pensato che l'ultima fase fosse usare il servizio configurableProductLinkManagementV1 per collegare i prodotti figlio ma usando una richiesta POST a / rest / V1 / configurable-products / KudosConfig / child con il seguente errore JSON restituisce HTTP 400 errore richiesta errata.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Sto pensando che potrebbe esserci qualcos'altro che devo fare sul prodotto genitore, ma sto lottando per capire cosa. All'interno del servizio catalogProductRepositoryV1 è possibile aggiungere una matrice di configurable_product_options, ho provato a giocare con questo, ma ho ricevuto solo errori di richiesta errata.

Qualsiasi luce che chiunque possa far luce su questo sarebbe molto apprezzata, già impiegata troppo a lungo in questo.

MODIFICARE:

Ora ho provato ad aggiungere configurable_product_options nella richiesta PUT del prodotto configurabile, questo ora appare così.

    {
      "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 provo questo, ricevo una risposta 400 con il messaggio:

Si è verificato un errore durante il salvataggio dell'opzione.

Non particolarmente utile ...

Un breve suggerimento su Google suggerisce che questo è il problema https://github.com/magento/magento2/issues/5580 .

Il prossimo passo è vedere se il cliente è felice di fare l'hacking sul file configurable.php.

EDIT: Ora ho provato a cambiare il file configurable.php ma non sembra aver fatto la differenza, ottenendo ancora lo stesso errore, così sconcertato di nuovo.

Risposte:


6

Finalmente sembra avere questo lavoro. Penso che il problema sia che il nome_attributo nell'array delle opzioni di prodotto configurabile dovrebbe essere l'id numerico, non il codice dell'attributo, in questo modo:

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

Aggiunti anche i collegamenti del prodotto nella stessa richiesta in modo che la richiesta finale configurabile del prodotto sia simile alla seguente:

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

Perché hai aggiunto "product_id": 299?
— DevonDahon,

Non sono sicuro, alla fine non era necessario e non è nel codice finale. Probabilmente era qualcosa che stavo cercando di farlo funzionare
— SD252,

Mi sono reso conto che in realtà è stato aggiunto automaticamente durante la creazione del prodotto configurabile.
— DevonDahon,

signore, posso usare questo codice nel controller? per aggiungere un prodotto configurabile? se sì, allora tel mi come salvare?
— Nikhil Waghela,

Sì, sentiti libero di usarlo, non sono sicuro di cosa intendi su come salvarlo.
— SD252,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.