Hello i am trying to update a product in a magento store using the API REST, my version of Magento is 2.1.8
To do the test firstly i get the token, secondly i get an existing item by SKU, then send the same item to update with the smae values.
i have my code setup this way
Main.cs
namespace ConsoleApplicationMagento { class Program { static void Main(string[] args) { Magento magento = new Magento("http://192.168.0.226:86"); string token = magento.GetAdminToken("grupototal", "opxvMjLAlD48heuWg==").Trim('"'); Product product = magento.GetProdcutBySku(token, "RFH1188PRZJ0UN-DR"); magento.UpdateProdcutBySku(product, token); } } }
Magento.cs
using Newtonsoft.Json; using RestSharp; namespace ConsoleApplicationMagento { internal class Magento { private RestClient Client { get; set; } public Magento(string magentoUrl) { Client = new RestClient(magentoUrl); } public Magento(string magentoUrl, string token) { Client = new RestClient(magentoUrl); } public string GetAdminToken(string userName, string passWord) { var request = CreateRequest("/rest/V1/integration/admin/token", Method.POST); var user = new Credentials(); user.username = userName; user.password = passWord; string json = JsonConvert.SerializeObject(user, Formatting.Indented); request.AddParameter("application/json", json, ParameterType.RequestBody); var response = Client.Execute(request); if(response.StatusCode == System.Net.HttpStatusCode.OK) { return response.Content; } else { return ""; } } public RestRequest CreateRequest(string endPoint, Method method) { var request = new RestRequest(endPoint, method); request.RequestFormat = DataFormat.Json; return request; } public Product GetProdcutBySku(string token, string sku) { var request = CreateRequest("/rest/V1/products/" + sku, Method.GET, token); var response = Client.Execute(request); if(response.StatusCode == System.Net.HttpStatusCode.OK) { Product product = JsonConvert.DeserializeObject<Product>(response.Content); return product; } return null; } public RestRequest CreateRequest(string endPoint, Method method, string token) { var request = new RestRequest(endPoint, method); request.RequestFormat = DataFormat.Json; request.AddHeader("Authorization", "Bearer " + token); request.AddHeader("Accept", "application/json"); return request; } public bool UpdateProdcutBySku(Product product, string token) { var request = CreateRequest("/rest/V1/products/" + product.sku, Method.PUT, token); string json = JsonConvert.SerializeObject(product, Formatting.Indented); json = "{\"product\":" + json + ",\"saveOptions\": true}"; request.AddParameter("application/json", json, ParameterType.RequestBody); var result = Client.Execute(request); if (result.StatusCode == System.Net.HttpStatusCode.OK) { return true; } else { return false; } } } }
I am getting bad request saying the "cost" value must be set
But i am using the json struture from here to do UPDATE an i cant find any field called COST
https://magento.redoc.ly/2.3.5-admin/tag/productssku
My update json text
{"product":{ "id": 59, "sku": "RFH1188PRZJ0UN-DR", "name": "Zapato casual de estrellas dorado", "attribute_set_id": 4, "price": 2000, "status": 1, "visibility": 1, "type_id": "simple", "created_at": "2018-06-18 21:31:40", "updated_at": "2018-06-28 19:51:19", "weight": 1, "extension_attributes": { "stock_item": { "item_id": 59, "product_id": 59, "stock_id": 1, "qty": 1000, "is_in_stock": true, "is_qty_decimal": false, "show_default_notification_message": false, "use_config_min_qty": true, "min_qty": 0, "use_config_min_sale_qty": 1, "min_sale_qty": 1, "use_config_max_sale_qty": true, "max_sale_qty": 10000, "use_config_backorders": true, "backorders": 0, "use_config_notify_stock_qty": true, "notify_stock_qty": 1, "use_config_qty_increments": true, "qty_increments": 0, "use_config_enable_qty_inc": true, "enable_qty_increments": false, "use_config_manage_stock": true, "manage_stock": true, "low_stock_date": null, "is_decimal_divided": false, "stock_status_changed_auto": 0 } }, "product_links": [], "options": [], "media_gallery_entries": [ { "id": 224, "media_type": "image", "label": "Zapato casual de estrellas dorado", "position": 1, "disabled": false, "types": [ "image", "small_image", "thumbnail" ], "file": "/r/f/rfh1188pr_estrellas_doradas_lateral.jpg" }, { "id": 225, "media_type": "image", "label": "", "position": 2, "disabled": false, "types": [], "file": "/e/s/estrellas_plateadas_doradas_frontal.jpg" } ], "tier_prices": [], "custom_attributes": [ { "attribute_code": "description", "value": "Zapato casual unicolor con estrellas y trenzas" }, { "attribute_code": "short_description", "value": "Zapato casual unicolor con estrellas y trenzas" }, { "attribute_code": "meta_title", "value": "Zapato casual de estrellas dorado" }, { "attribute_code": "meta_keyword", "value": "Zapato, Estilo, Genero, Casual" }, { "attribute_code": "meta_description", "value": "Zapato casual unicolor con estrellas y trenzas" }, { "attribute_code": "image", "value": "/r/f/rfh1188pr_estrellas_doradas_lateral.jpg" }, { "attribute_code": "small_image", "value": "/r/f/rfh1188pr_estrellas_doradas_lateral.jpg" }, { "attribute_code": "thumbnail", "value": "/r/f/rfh1188pr_estrellas_doradas_lateral.jpg" }, { "attribute_code": "color", "value": "18" }, { "attribute_code": "category_ids", "value": [ "3", "4", "11", "27" ] }, { "attribute_code": "options_container", "value": "container2" }, { "attribute_code": "required_options", "value": "0" }, { "attribute_code": "has_options", "value": "0" }, { "attribute_code": "image_label", "value": "Zapato casual de estrellas dorado" }, { "attribute_code": "small_image_label", "value": "Zapato casual de estrellas dorado" }, { "attribute_code": "thumbnail_label", "value": "Zapato casual de estrellas dorado" }, { "attribute_code": "country_of_manufacture", "value": "CN" }, { "attribute_code": "url_key", "value": "Zapato-casual-de-estrellas-dorado-2" }, { "attribute_code": "msrp_display_actual_price_type", "value": "0" }, { "attribute_code": "tax_class_id", "value": "2" }, { "attribute_code": "marca", "value": "Refresh" }, { "attribute_code": "modelo", "value": "RFH1188PR" } ] },"saveOptions": true}
I will appreciate any advice, thank you