Comment créer un produit configurable à l'aide de l'API REST v2?

8

J'essaie de créer un produit configurable appelé "Kudos Configurable" avec des options permettant à l'utilisateur de choisir entre le petit vert, le grand vert, le petit orange et le grand orange.

Je suis arrivé au stade où un produit configurable a été créé via l'API en utilisant le JSON suivant dans une demande PUT à / 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
           }
         }
       }
     }

Les produits enfants ont été créés à l'aide de l'API en utilisant le JSON suivant pour chacun des 4 éléments avec des attributs de taille et de couleur définis via la même méthode.

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

Cela fonctionne bien et les produits sont créés avec les attributs correctement définis.

J'avais pensé que la dernière étape consistait à utiliser le service configurableProductLinkManagementV1 pour lier les produits enfants, mais en utilisant une demande POST vers / rest / V1 / configurable-products / KudosConfig / child avec le JSON suivant renvoie une erreur de demande incorrecte HTTP 400.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Je pense qu'il pourrait y avoir autre chose que je dois faire sur le produit parent, mais j'ai du mal à trouver quoi. Dans le service catalogProductRepositoryV1, vous pouvez ajouter un tableau d'options_produits_configurables, j'ai essayé de jouer avec cela, mais je n'ai récupéré que des erreurs de demande incorrectes.

Toute lumière que n'importe qui pourrait jeter sur ce sujet serait très appréciée, déjà dépensée beaucoup trop longtemps à ce sujet.

ÉDITER:

J'ai maintenant essayé d'ajouter les configurable_product_options dans la demande PUT de produit configurable, cela ressemble maintenant à ceci.

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

Lorsque j'essaie, je reçois une réponse 400 avec le message:

Une erreur s'est produite lors de l'enregistrement de l'option.

Pas particulièrement utile ...

Un petit peu de recherche sur Google suggère que c'est le problème https://github.com/magento/magento2/issues/5580 .

La prochaine étape consiste à voir si le client est heureux de pirater le fichier configurable.php.

EDIT: J'ai maintenant essayé de changer le fichier configurable.php mais ne semble pas avoir fait de différence, obtenant toujours la même erreur, donc perplexe à nouveau.

SD252
la source

Réponses:

6

Semble enfin avoir ce fonctionnement. Je pense que le problème est que l'attribut_id dans le tableau d'options de produit configurable doit être l'ID numérique, pas le code d'attribut, comme ceci:

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

A également ajouté les liens du produit dans la même demande afin que la demande de produit configurable finale ressemble à ceci:

    {
      "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
la source
Pourquoi avez-vous ajouté "product_id": 299?
DevonDahon
Je ne suis pas sûr, ce n'était pas nécessaire à la fin et ce n'est pas dans le code final. C'était probablement quelque chose que j'essayais de faire fonctionner
SD252
J'ai réalisé qu'il a été ajouté automatiquement lors de la création du produit configurable.
DevonDahon
monsieur, puis-je utiliser ce code dans le contrôleur? pour ajouter un produit configurable? si oui, alors dites-moi comment économiser?
Nikhil waghela
Oui, n'hésitez pas à l'utiliser, je ne sais pas ce que vous voulez dire sur la façon de l'enregistrer.
SD252