I create an Integration -> Activate -> Obtained the Access Token
Like is described here: http://devdocs.magento.com/guides/v2.2/get-started/authentication/gs-authentication-token.html
And in my test project I get this in response object:
Content:
"{\"message\":\"Consumer is not authorized to access %resources\",\"parameters\":{\"resources\":\"Magento_Catalog::categories\"}}"
StatusCode:
System.Net.HttpStatusCode.Unauthorized
I create a class Magento:
public class Magento
{
private RestClient Client { get; set; }
private string Token { get; set; }
public Magento(string magentoUrl, string token)
{
Token = token;
Client = new RestClient(magentoUrl);
}
private 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 string CreateCategory(int id, int ParentId, string categoryName, bool IsActive, bool IncludeInMenu)
{
var request = CreateRequest("/rest/V1/categories", Method.POST, Token);
var cat = new ProductCategory();
var category = new Category();
category.Id = id;
category.ParentId = ParentId;
category.Name = categoryName;
category.IsActive = IsActive;
category.IncludeInMenu = IncludeInMenu;
cat.Category = category;
string json = JsonConvert.SerializeObject(cat, 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 ":(" + response.Content;
}
}
public void GetSku(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)
{
M2Product product = JsonConvert.DeserializeObject<M2Product>(response.Content);
}
}
public string CreateCategory(string categoryName)
{
var request = CreateRequest("/rest/V1/categories", Method.POST, Token);
var cat = new ProductCategory();
var category = new Category();
category.Name = categoryName;
cat.Category = category;
string json = JsonConvert.SerializeObject(cat, 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 ":( "+ response.Content;
}
}
}
public class ProductCategory
{
[JsonProperty("category")]
public Category Category { get; set; }
}
public class Category
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("parent_id")]
public int ParentId { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("is_active")]
public bool IsActive { get; set; }
[JsonProperty("position")]
public int Position { get; set; }
[JsonProperty("level")]
public int Level { get; set; }
[JsonProperty("children")]
public string Children { get; set; }
[JsonProperty("created_at")]
public string CreatedAt { get; set; }
[JsonProperty("updated_at")]
public string UpdatedAt { get; set; }
[JsonProperty("path")]
public string Path { get; set; }
[JsonProperty("available_sort_by")]
public IList<string> AvailableSortBy { get; set; }
[JsonProperty("include_in_menu")]
public bool IncludeInMenu { get; set; }
}
public class StockItem
{
[JsonProperty("item_id")]
public int ItemId { get; set; }
[JsonProperty("product_id")]
public int ProductId { get; set; }
[JsonProperty("stock_id")]
public int StockId { get; set; }
[JsonProperty("qty")]
public int Qty { get; set; }
[JsonProperty("is_in_stock")]
public bool IsInStock { get; set; }
[JsonProperty("is_qty_decimal")]
public bool IsQtyDecimal { get; set; }
[JsonProperty("show_default_notification_message")]
public bool ShowDefaultNotificationMessage { get; set; }
[JsonProperty("use_config_min_qty")]
public bool UseConfigMinQty { get; set; }
[JsonProperty("min_qty")]
public int MinQty { get; set; }
[JsonProperty("use_config_min_sale_qty")]
public int UseConfigMinSaleQty { get; set; }
[JsonProperty("min_sale_qty")]
public int MinSaleQty { get; set; }
[JsonProperty("use_config_max_sale_qty")]
public bool UseConfigMaxSaleQty { get; set; }
[JsonProperty("max_sale_qty")]
public int MaxSaleQty { get; set; }
[JsonProperty("use_config_backorders")]
public bool UseConfigBackorders { get; set; }
[JsonProperty("backorders")]
public int Backorders { get; set; }
[JsonProperty("use_config_notify_stock_qty")]
public bool UseConfigNotifyStockQty { get; set; }
[JsonProperty("notify_stock_qty")]
public int NotifyStockQty { get; set; }
[JsonProperty("use_config_qty_increments")]
public bool UseConfigQtyIncrements { get; set; }
[JsonProperty("qty_increments")]
public int QtyIncrements { get; set; }
[JsonProperty("use_config_enable_qty_inc")]
public bool UseConfigEnableQtyInc { get; set; }
[JsonProperty("enable_qty_increments")]
public bool EnableQtyIncrements { get; set; }
[JsonProperty("use_config_manage_stock")]
public bool UseConfigManageStock { get; set; }
[JsonProperty("manage_stock")]
public bool ManageStock { get; set; }
[JsonProperty("low_stock_date")]
public object LowStockDate { get; set; }
[JsonProperty("is_decimal_divided")]
public bool IsDecimalDivided { get; set; }
[JsonProperty("stock_status_changed_auto")]
public int StockStatusChangedAuto { get; set; }
}
public class ExtensionAttributes
{
[JsonProperty("stock_item")]
public StockItem StockItem { get; set; }
}
public class CustomAttribute
{
[JsonProperty("attribute_code")]
public string AttributeCode { get; set; }
[JsonProperty("value")]
public object Value { get; set; }
}
public class M2Product
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("sku")]
public string Sku { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("attribute_set_id")]
public int AttributeSetId { get; set; }
[JsonProperty("price")]
public int Price { get; set; }
[JsonProperty("status")]
public int Status { get; set; }
[JsonProperty("visibility")]
public int Visibility { get; set; }
[JsonProperty("type_id")]
public string TypeId { get; set; }
[JsonProperty("created_at")]
public string CreatedAt { get; set; }
[JsonProperty("updated_at")]
public string UpdatedAt { get; set; }
[JsonProperty("extension_attributes")]
public ExtensionAttributes ExtensionAttributes { get; set; }
[JsonProperty("product_links")]
public IList<object> ProductLinks { get; set; }
[JsonProperty("options")]
public IList<object> Options { get; set; }
[JsonProperty("media_gallery_entries")]
public IList<object> MediaGalleryEntries { get; set; }
[JsonProperty("tier_prices")]
public IList<object> TierPrices { get; set; }
[JsonProperty("custom_attributes")]
public IList<CustomAttribute> CustomAttributes { get; set; }
}
And a form
public partial class Form1 : Form
{
static private string siteAddress = "http://magento.com/";
static private string token = "d21312d97hosbblablablaqtqawlbw";
Magento objMagneto;
public Form1()
{
InitializeComponent();
objMagneto = new Magento(siteAddress, token);
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void adgClasa_Click(object sender, EventArgs e)
{
MessageBox.Show(objMagneto.CreateCategory(10, 0, "PC Components", true, true)); // id, ParentId, name, IsActive, IncludeInMenu
}
}
Best Answer
I see you are using RestClient and Newtonsoft Json both great libraries!
Using the 2.2 REST API and RestClient I use the following: -