Wie erstelle ich ein konfigurierbares Produkt mit der REST-API v2?

8

Ich versuche, ein konfigurierbares Produkt namens "Kudos Configurable" mit Optionen zu erstellen, mit denen der Benutzer zwischen kleinem Grün, großem Grün, kleinem Orange und großem Orange wählen kann.

Ich bin an dem Punkt angelangt, an dem ein konfigurierbares Produkt über die API mit dem folgenden JSON in einer PUT-Anforderung an / rest / V1 / products / KudosConfig erstellt wurde.

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

Die untergeordneten Produkte wurden mithilfe der API unter Verwendung des folgenden JSON für jedes der 4 Elemente erstellt, wobei Attribute für Größe und Farbe mit derselben Methode festgelegt wurden.

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

Dies funktioniert einwandfrei und die Produkte werden mit den korrekt eingestellten Attributen erstellt.

Ich hatte gedacht, dass die letzte Phase darin bestand, den Dienst configureProductLinkManagementV1 zu verwenden, um die untergeordneten Produkte zu verknüpfen, aber eine POST-Anforderung an / rest / V1 / konfigurierbare Produkte / KudosConfig / child mit dem folgenden JSON-Rückgabefehler HTTP 400 zu verwenden.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Ich denke, dass ich möglicherweise noch etwas für das übergeordnete Produkt tun muss, aber ich habe Mühe, herauszufinden, was. Innerhalb des Dienstes catalogProductRepositoryV1 können Sie eine Reihe konfigurierbarer_Produktoptionen hinzufügen. Ich habe versucht, damit zu spielen, habe aber nur fehlerhafte Anforderungsfehler zurückbekommen.

Jedes Licht, das jemand darauf werfen kann, wäre sehr dankbar, das bereits viel zu lange dafür aufgewendet wurde.

BEARBEITEN:

Habe jetzt versucht, die configure_product_options zur konfigurierbaren Produkt-PUT-Anfrage hinzuzufügen, sieht dies nun so aus.

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

Wenn ich dies versuche, erhalte ich eine Antwort von 400 mit der Nachricht:

Beim Speichern der Option ist ein Fehler aufgetreten.

Nicht besonders hilfreich ...

Ein bisschen Googeln deutet darauf hin, dass dies das Problem ist, https://github.com/magento/magento2/issues/5580 .

Der nächste Schritt besteht darin, zu prüfen, ob der Kunde den Hack für die Datei configure.php gerne ausführt.

BEARBEITEN: Ich habe jetzt versucht, die Datei configure.php zu ändern, aber es scheint keinen Unterschied gemacht zu haben, und es wird immer noch der gleiche Fehler angezeigt, der erneut auftritt.

SD252
quelle

Antworten:

6

Endlich scheint das zu funktionieren. Ich denke, das Problem ist, dass die attribute_id im konfigurierbaren Produktoptionsarray die numerische ID sein sollte, nicht der Attributcode, wie folgt:

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

Außerdem wurden die Produktlinks in derselben Anfrage hinzugefügt, sodass die endgültige konfigurierbare Produktanfrage folgendermaßen aussieht:

    {
      "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
quelle
Warum haben Sie "product_id": 299 hinzugefügt?
DevonDahon
Ich bin mir nicht sicher, es war am Ende nicht notwendig und es ist nicht im endgültigen Code. Es war wahrscheinlich etwas, was ich versuchte, es zum
Laufen
Ich habe festgestellt, dass es beim Erstellen des konfigurierbaren Produkts tatsächlich automatisch hinzugefügt wurde.
DevonDahon
Sir, kann ich diesen Code in der Steuerung verwenden? um ein konfigurierbares Produkt hinzuzufügen? Wenn ja, dann ruf mich an, wie ich sparen soll.
Nikhil Waghela
Ja, Sie können es gerne verwenden. Ich bin mir nicht sicher, was Sie damit meinen, wie Sie es speichern sollen.
SD252