REST API v2を使用して構成可能な製品を作成するにはどうすればよいですか?


8

ユーザーが小緑、大緑、小オレンジ、大オレンジから選択できるオプションを備えた、「Kudos Configurable」と呼ばれる構成可能な製品を作成しようとしています。

/ rest / V1 / products / KudosConfigへのPUTリクエストで次のJSONを使用して、APIを介して設定可能な製品が作成される段階になりました。

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

子商品は、同じメソッドを介してサイズと色の属性が設定された4つのアイテムのそれぞれについて、次のJSONを使用するAPIを使用して作成されています。

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

これは正常に機能し、属性が正しく設定された製品が作成されます。

最後の段階は、configurableProductLinkManagementV1サービスを使用して子製品をリンクすることだと思っていましたが、次のJSONで/ rest / V1 / configurable-products / KudosConfig / childへのPOSTリクエストを使用すると、HTTP 400不正なリクエストエラーが返されます。

    {
      "childSku":"KudosConfigGreenSmall"
    }

親製品で他にやらなければならないことがあるのではないかと思っていますが、何を解決するのに苦労しています。configurable_product_optionsの配列を追加できるcatalogProductRepositoryV1サービス内で、これを試してみましたが、不正なリクエストエラーのみが返されました。

誰もがこれに当てることができるどんな光でも非常に高く評価されます、すでにこれにあまりにも長い時間を費やしました。

編集:

これで、configurable_product_optionsを構成可能な製品のPUTリクエストに追加しようとしましたが、これは次のようになります。

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

これを試すと、次のメッセージで400応答が返されます。

オプションの保存中に問題が発生しました。

特に役に立たなかった...

Googlingのクイックビットは、これがhttps://github.com/magento/magento2/issues/5580の問題であることを示唆しています

次のステップは、お客様がconfigurable.phpファイルをハックできるかどうかを確認することです。

編集:configurable.phpファイルを変更しようとしましたが、違いはないようですが、同じエラーが発生するため、再び困惑しました。

回答:


6

最後にこれが機能しているようです。問題は、次のように、構成可能な製品オプションの配列内のattribute_idが、属性コードではなく数値のIDである必要があることだと思います。

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

また、同じリクエストに製品リンクを追加したため、最終的な構成可能な製品リクエストは次のようになります。

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

なぜ "product_id":299を追加したのですか?
DevonDahon 2017年

確かに、それは結局必要ではなく、最終的なコードにもありません。それはおそらく私がそれを機能させるために試みていたものでした
SD252

構成可能な製品を作成するときに実際に自動的に追加されることに気付きました。
DevonDahon 2017

サー、コントローラーでこのコードを使用できますか?構成可能な製品を追加するには?はいの場合、保存方法を教えてください。
Nikhil waghela 2017

はい、お気軽にご利用ください。保存方法の意味がわかりません。
SD252 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.