How to add product in Magento using REST API?
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;
}
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
}
}