6

I want to add a product using the REST API in Magento 2.

How can I achieve this?

Manish
  • 3,106
  • 7
  • 31
  • 47
  • Possible duplicate of http://magento.stackexchange.com/questions/103438/magento-2-rest-api-add-product-with-category – Prashant Valanda Jun 13 '16 at 07:33
  • 2
    Thanks @PrashantValanda for your reference, I have gone through that but there I didn't get the steps to add products. Later I found and posted the answer here. – Manish Jun 13 '16 at 07:57

4 Answers4

4

Example script that create downloadable product

<?php
$curl = curl_init();
$URL = "http://magento.dev";

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/V1/integration/admin/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"username\":\"admin\", \"password\":\"123123q\"}",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "cache-control: no-cache",
    "content-type: application/json",
    "postman-token: 654c3084-0e0a-b3a1-043f-0960e695e520"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
  die();
} else {
  $key = $response;
}


$data = [
    "product"=> [
        "sku"=> "DownloadableProduct_18sdsd5",
        "name"=> "DownloadableProduct_185",
        "attribute_set_id"=> 4,
        "price"=> "1",
        "status"=> 1,
        "visibility"=> 4,
        "type_id"=> "downloadable",
        "extension_attributes"=> [
            "stock_item"=> [
                "manage_stock"=> 1,
                "is_in_stock"=> 1,
                "qty"=> "10"
            ],
            "downloadable_product_samples"=> [[
                "title"=> "sample1185869143",
                "sort_order"=> "0",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]],
            "downloadable_product_links"=> [[
                "title"=> "link-1-185862143",
                "sort_order"=> "1",
                "is_shareable"=> 0,
                "price"=> 2.43,
                "number_of_downloads"=> "2",
                "link_type"=> "url",
                "link_url"=> "http://example.com",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]]
        ],
        "custom_attributes"=> [[
            "attribute_code"=> "tax_class_id",
            "value"=> 2
        ], [
            "attribute_code"=> "quantity_and_stock_status",
            "value"=> [
                "qty"=> "10",
                "is_in_stock"=> 1
            ]
        ], [
            "attribute_code"=> "is_virtual",
            "value"=> 1
        ], [
            "attribute_code"=> "url_key",
            "value"=> "downloadableproduct-185892143"
        ], [
            "attribute_code"=> "links_title",
            "value"=> "Links title 185862143"
        ], [
            "attribute_code"=> "links_purchased_separately",
            "value"=> 1
        ], [
            "attribute_code"=> "samples_title",
            "value"=> "Samples185692143"
        ], [
            "attribute_code"=> "links_exist",
            "value"=> 1
        ]]
    ]
];


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/admin/V1/products/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => $data,
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: application/json",
    "authorization: Bearer " . $key,
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
KAndy
  • 20,811
  • 3
  • 49
  • 59
3

Is this a good approach or have any other better solution please suggest me.

Currently, I am doing this :

Step1. Generate admin token: I am using token for authorization, so create an admin token using this URL Http://{baseurl}/rest/V1/integration/admin/token

Step2. Add product : For adding the product, I am using following URL http://magentogit.com/rest/V1/products/{SKU} , this is magento2 default API using put method. For example:

http://baseurl/rest/V1/products/B201-SKU

 header:
   Content-Type - application/json
    Authorization - Bearer token

 Body:
{
  "product": {
    "sku": "B201-SKU",
    "name": "B202",
    "price": 30.00,
    "status": 1,
    "type_id": "simple",
    "attribute_set_id":4,
    "weight": 1
  }
}
Manish
  • 3,106
  • 7
  • 31
  • 47
2

Example script that create downloadable product

<?php
$curl = curl_init();
$URL = "http://magento.dev";

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/V1/integration/admin/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode(["username"=>"admin", "password"=>"123123q"]),
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "cache-control: no-cache",
    "content-type: application/json",
    "postman-token: 654c3084-0e0a-b3a1-043f-0960e695e520"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
  die();
} else {
  $key = $response;
}


$data = [
    "product"=> [
        "sku"=> "DownloadableProduct_18sdsd5",
        "name"=> "DownloadableProduct_185",
        "attribute_set_id"=> 4,
        "price"=> "1",
        "status"=> 1,
        "visibility"=> 4,
        "type_id"=> "downloadable",
        "extension_attributes"=> [
            "stock_item"=> [
                "manage_stock"=> 1,
                "is_in_stock"=> 1,
                "qty"=> "10"
            ],
            "downloadable_product_samples"=> [[
                "title"=> "sample1185869143",
                "sort_order"=> "0",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]],
            "downloadable_product_links"=> [[
                "title"=> "link-1-185862143",
                "sort_order"=> "1",
                "is_shareable"=> 0,
                "price"=> 2.43,
                "number_of_downloads"=> "2",
                "link_type"=> "url",
                "link_url"=> "http://example.com",
                "sample_type"=> "url",
                "sample_url"=> "http://example.com"
            ]]
        ],
        "custom_attributes"=> [[
            "attribute_code"=> "tax_class_id",
            "value"=> 2
        ], [
            "attribute_code"=> "quantity_and_stock_status",
            "value"=> [
                "qty"=> "10",
                "is_in_stock"=> 1
            ]
        ], [
            "attribute_code"=> "is_virtual",
            "value"=> 1
        ], [
            "attribute_code"=> "url_key",
            "value"=> "downloadableproduct-185892143"
        ], [
            "attribute_code"=> "links_title",
            "value"=> "Links title 185862143"
        ], [
            "attribute_code"=> "links_purchased_separately",
            "value"=> 1
        ], [
            "attribute_code"=> "samples_title",
            "value"=> "Samples185692143"
        ], [
            "attribute_code"=> "links_exist",
            "value"=> 1
        ]]
    ]
];


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => $URL . "/rest/admin/V1/products/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode($data),
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: application/json",
    "authorization: Bearer " . $key,
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
KAndy
  • 20,811
  • 3
  • 49
  • 59
0

In order to create product in Magento 2. I assume that you use POSTMAN.

Use this endpoint to generate the token : http://mydomain.localhost/rest/V1/integration/admin/token

Then when you have your token, you are ready to use this endpoint : http://mydomain.localhost/V1/products

Here is how a payload looks like :

{
    "product": {
        "sku": "test",
        "name": "test",
        "attribute_set_id": 4, //chose the attribute set wanted
        "price": 50,
        "status": 1,
        "visibility": 1,
        "type_id": "simple",
        "weight": "0.5",
        "extension_attributes": {
            "category_links": [],
            "stock_item": {
                "qty": "1000",
                "is_in_stock": true,
                "use_config_max_sale_qty": true
            }
        },
        "custom_attributes": [
            {
                "attribute_code": "tax_class_id",
                "value": "2"
            }
        ]
    }
}

Now, If you want to add multiple products, you should use this endpoint : http://mydomain.localhost/rest/async/bulk/V1/products

Here is the payload :

[
    {
        "product": {
            "sku": "product-a",
            "name": "product-a",
            "attribute_set_id": 4,
            "price": 3.99,
            "status": 1,
            "visibility": 1,
            "type_id": "simple",
            "weight": "0.5",
            "extension_attributes": {
                "category_links": [],
                "stock_item": {
                    "qty": "1000",
                    "is_in_stock": true,
                    "use_config_max_sale_qty": true
                }
            },
            "custom_attributes": [
                {
                    "attribute_code": "tax_class_id",
                    "value": "2"
                }
            ]
        }
    },
    {
        "product": {
            "sku": "product-b",
            "name": "product-b",
            "attribute_set_id": 4,
            "price": 3.99,
            "status": 1,
            "visibility": 1,
            "type_id": "simple",
            "weight": "0.5",
            "extension_attributes": {
                "category_links": [],
                "stock_item": {
                    "qty": "1000",
                    "is_in_stock": true,
                    "use_config_max_sale_qty": true
                }
            },
            "custom_attributes": [
                {
                    "attribute_code": "tax_class_id",
                    "value": "2"
                }
            ]
        }
    }
]

In order to use the bulk import, you would need to run the queue. bin/magento queue:consumers:start async.operations.all

If you need to do it in code, basically you need to take the right interface, check the data that the interface needs to work and pass the data

Hope it helps.

Sony
  • 1,154
  • 7
  • 14