Bagaimana cara membuat produk yang dapat dikonfigurasi menggunakan REST API v2?

8

Saya mencoba membuat produk yang dapat dikonfigurasi yang disebut "Kudos Configurable" dengan opsi bagi pengguna untuk memilih dari hijau kecil, hijau besar, oranye kecil dan oranye besar.

Saya telah sampai pada tahap di mana produk yang dapat dikonfigurasi telah dibuat melalui API menggunakan JSON berikut dalam permintaan PUT ke / 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
           }
         }
       }
     }

Produk anak telah dibuat menggunakan API menggunakan JSON berikut untuk masing-masing dari 4 item dengan atribut untuk ukuran dan warna yang ditetapkan melalui metode yang sama.

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

Ini berfungsi dengan baik dan produk dibuat dengan atribut yang ditetapkan dengan benar.

Saya pikir tahap terakhir adalah menggunakan layanan yang dapat dikonfigurasiProductLinkManagementV1 untuk menautkan produk anak tetapi menggunakan permintaan POST ke / rest / V1 / produk yang dapat dikonfigurasi / KudosConfig / child dengan JSON berikut mengembalikan kesalahan permintaan buruk HTTP 400.

    {
      "childSku":"KudosConfigGreenSmall"
    }

Saya berpikir mungkin ada hal lain yang perlu saya lakukan pada produk induk tetapi saya berjuang untuk mencari tahu apa. Di dalam layanan catalogProductRepositoryV1 Anda dapat menambahkan dalam array configurable_product_options, saya sudah mencoba bermain dengan ini tetapi hanya mendapatkan kembali kesalahan permintaan yang buruk.

Siapa pun yang bisa menjelaskan hal ini akan sangat dihargai, sudah menghabiskan waktu terlalu lama untuk ini.

EDIT:

Sekarang telah mencoba menambahkan configureable_product_options ke permintaan PUT produk yang dapat dikonfigurasi, ini sekarang terlihat seperti ini.

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

Ketika saya mencoba ini, saya mendapatkan 400 tanggapan kembali dengan pesan:

Terjadi kesalahan saat menyimpan opsi.

Tidak terlalu membantu ...

Sedikit cepat dari Google menunjukkan bahwa ini adalah masalah https://github.com/magento/magento2/issues/5580 .

Langkah selanjutnya adalah melihat apakah pelanggan senang melakukan retas pada file configurable.php.

EDIT: Sekarang telah mencoba mengubah file yang dapat dikonfigurasi.php tetapi tampaknya tidak membuat perbedaan, masih mendapatkan kesalahan yang sama sehingga bingung lagi.

SD252
sumber

Jawaban:

6

Akhirnya sepertinya ini berfungsi. Saya pikir masalahnya adalah bahwa attribute_id dalam array opsi produk yang dapat dikonfigurasi harus berupa id numerik, bukan kode atribut, seperti ini:

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

Juga menambahkan tautan produk dalam permintaan yang sama sehingga permintaan produk akhir yang dapat dikonfigurasi terlihat seperti ini:

    {
      "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
sumber
Mengapa Anda menambahkan "product_id": 299?
DevonDahon
Saya tidak yakin, itu tidak perlu pada akhirnya dan itu tidak ada dalam kode akhir. Itu mungkin sesuatu yang saya coba untuk membuatnya berfungsi
SD252
Saya menyadari itu sebenarnya ditambahkan secara otomatis ketika membuat produk yang dapat dikonfigurasi.
DevonDahon
Pak, bisakah saya menggunakan kode ini di controller? untuk menambah produk yang dapat dikonfigurasi? jika ya, maka hubungi saya bagaimana cara menyimpan?
Nikhil waghela
Ya jangan ragu untuk menggunakannya, saya tidak yakin apa yang Anda maksud tentang bagaimana cara menyimpannya.
SD252