0

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

    }

}
0

I see you are using RestClient and Newtonsoft Json both great libraries!

Using the 2.2 REST API and RestClient I use the following: -

var client = new RestClient(<endpoint>)
{
  Encoding = Encoding.UTF8,
  Authenticator = OAuth1Authenticator.ForProtectedResource(<ConsumerKey>, <ConsumerSecret>, <AccessToken>, <AccessTokenSecret>)
};
var request = new RestRequest("rest/V1/categories", Method.POST);
request.AddHeader("Content-Type", "application/json");
request.Parameters.Add(new Parameter("category", JsonConvert.SerializeObject(new { category }, Formatting.None), ContentType.Json, ParameterType.RequestBody));
var response = client.Execute(request);
var returnedObject = JsonConvert.DeserializeObject<McomCategory>(response.Content);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.