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.