как создать bundle product в Magento 2 с помощью REST API?

#magento2

#magento2

Вопрос:

Я хочу создать bundle product через REST API в клиенте postman, но, похоже, я не могу найти подходящий API для создания такого же. Я могу добавить параметры пакета через REST API, но для добавления этих параметров мне нужен пакет продуктов.Итак, кто-нибудь может мне помочь с проблемой?

Ответ №1:

У меня возникла некоторая проблема при попытке создать bundle product с помощью Magento 2 API, но, наконец, я разобрался с этим, поскольку этот пост появляется каждый раз, когда я гуглю, я отвечу здесь запросом, который вам нужно сделать через postman, чтобы создать bundle product. Используя URL http://{{host}}/rest/default /V1/products с методом POST и заголовок авторизации с токеном, полученным с http://{{host}}/rest/default /V1 /integration /admin /token, вам нужно будет отправить следующее тело в формате JSON, чтобы создать пакет продуктов со связанными продуктами:

 {
  "product": {
    "sku": "some-bundle-sku",
    "name": null,
    "attribute_set_id": 4,
    "price": 1000,
    "status": 1,
    "visibility": 1,
    "type_id": "bundle",
    "created_at": "2018-01-01 00:00:00",
    "updated_at": "2018-01-01 00:00:00",
    "extension_attributes": {
      "stock_item": {
        "qty": 100
      },
      "website_ids": [
        1
      ],
      "category_links": [],
      "bundle_product_options": [
        {
          "option_id": 0,
          "position": 1,
          "sku": "bundle-option-sku",
          "title": "Bundle products",
          "type": "select",
          "required": true,
          "product_links": [
            {
              "sku": "some prod 1 sku",
              "option_id": 1,
              "qty": 1,
              "position": 1,
              "is_default": false,
              "price": null,
              "price_type": null,
              "can_change_quantity": 0
            },
            {
              "sku": "some prod 2 sku",
              "option_id": 1,
              "qty": 1,
              "position": 2,
              "is_default": false,
              "price": null,
              "price_type": null,
              "can_change_quantity": 0
            }
          ]
        }
      ]
    },
    "custom_attributes": [
      {
        "attribute_code": "price_view",
        "value": "0"
      }
    ]
  },
  "saveOptions": true
}
  

Убедитесь, что продукты, которые вы добавляете в «product_links», существуют, иначе продукт bundle не будет создан. Обратите внимание на «bundle_product_options», это должен быть массив опций, моя ошибка заключалась в том, что я пытался создать одну опцию, и я не передавал ее в массив.

Ответ №2:

Как создать Bundle Product в Magento 2 с помощью REST API:

 //API URL for authentication

$apiURL="http://{host}/rest/V1/integration/admin/token";

//parameters passing with URL

$data = array("username" => "<username>", "password" => "<password>");  

$data_string = json_encode($data);

$ch = curl_init($apiURL);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Content-Length: ".strlen($data_string)));

$token = curl_exec($ch);

//decoding generated token and saving it in a variable

$token =  json_decode($token);

print_r($token);

//Using above token into header

$headers = array("Content-Type: application/json", "Authorization: Bearer ".$token);

//API URL to Add Product(s) in Magento

$requestUrl='http://{host}/rest/default/V1/products';

$toBeAdded = '{
  "product": {
    "sku": "some-bundle-sku",
    "name": Demo-Bundle,
    "attribute_set_id": 4,
    "price": 1000,
    "status": 1,
    "visibility": 1,
    "type_id": "bundle",
    "created_at": "2019-04-28 00:00:00",
    "updated_at": "2019-04-28 00:00:00",
    "extension_attributes": {
      "stock_item": {
        "qty": 100
      },
      "website_ids": [
        1
      ],
      "category_links": [],
      "bundle_product_options": [
        {
          "option_id": 0,
          "position": 1,
          "sku": "bundle-option-sku",
          "title": "Bundle products",
          "type": "select",
          "required": true,
          "product_links": [
            {
              "sku": "Sample",
              "option_id": 1,
              "qty": 1,
              "position": 1,
              "is_default": false,
              "price": 20,
              "price_type": null,
              "can_change_quantity": 0
            },
            {
              "sku": "Demo",
              "option_id": 1,
              "qty": 1,
              "position": 2,
              "is_default": false,
              "price": 30,
              "price_type": null,
              "can_change_quantity": 0
            }
          ]
        }
      ]
    },
    "custom_attributes": [
      {
        "attribute_code": "price_view",
        "value": "0"
      }
    ]
  },
  "saveOptions": true
}';

$ch = curl_init();
$ch = curl_init($requestUrl); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
curl_setopt($ch, CURLOPT_POST, true);

$options = array(
    CURLOPT_POSTFIELDS=>$toBeAdded
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
$result=  json_decode($result);

echo "<pre>";
print_r($result);
  

Это должно решить ваши проблемы. Также убедитесь, что назначенный пользователь имеет доступ к желаемым ресурсам, и продукт, который вы добавляете в качестве параметров пакета, должен завершиться в вашей среде Magento.

Удачного кодирования! Приветствия!

Ответ №3:

Чтобы создать bundle product в Magento 2 с помощью REST API, нам будет выполнен некоторый шаг, см. ниже:

ШАГ 1- Сначала давайте напишем конфигурации (URL, имя пользователя, пароль)

// данные конфигурации

 $url="http://www.example.com/index.php/";
$token_url=$url."rest/V1/integration/admin/token";
$product_url=$url. "rest/V1/products";
$username="your admin username";
$password="your admin password";

$product_links = array(
                        array("sku"=>"cpu1","qty"=>1)
                    );
  

ШАГ 2- Затем давайте получим токен доступа

//Аутентификация rest API magento2, получение токена доступа

 $ch = curl_init();
$data = array("username" => $username, "password" => $password);
$data_string = json_encode($data);

$ch = curl_init($token_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string))
    );
$token = curl_exec($ch);
$adminToken=  json_decode($token);
  

ШАГ 3- Нет, давайте подготовим данные продукта

// Создать настраиваемый продукт

 $configProductData = array(

        'sku'               => 'bundle'. uniqid(),
        'name'              => 'Bundle' . uniqid(),
        'visibility'        => 4, /*'catalog',*/
        'type_id'           => 'bundle',
        'price'             => 99.95,
        'status'            => 1,
        'attribute_set_id'  => 4,
        'weight'            => 1,
        'custom_attributes' => array(
                array( 'attribute_code' => 'category_ids', 'value' => ["42","41","32"] ),
                array( 'attribute_code' => 'description', 'value' => 'Description' ),
                array( 'attribute_code' => 'short_description', 'value' => 'Short Description' ),
                array( 'attribute_code' => 'price_view', 'value' => '0' ),
                array( 'attribute_code' => 'price_type', 'value' => '0' ),
        ),
        'extension_attributes' => array("bundle_product_options"=>array(
            array("title"=>"CPU","type"=>"select","product_links"=>$product_links),
        ),
        )
);
$productData = json_encode(array('product' => $configProductData));
  

ШАГ 4- В конце мы отправим данные продукта в magento для создания продукта

 $setHaders = array('Content-Type:application/json','Authorization:Bearer '.$adminToken);

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $product_url);
curl_setopt($ch,CURLOPT_POSTFIELDS, $productData);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $setHaders);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);