Поддерживаемые API:
- Remap API v1.2
dotnet add package Confiti.MoySklad.Remap.Sdk
var credentials = new MoySkladCredentials()
{
AccessToken = "your-access-token"
// или
Username = "your-username",
Password = "your-password",
};
var api = new MoySkladApi(credentials);
var response = await api.Entity.Assortment.GetAllAsync();Создайте свой HttpClient
var httpClient = new HttpClient(new HttpClientHandler()
{
// gZip обязателен
AutomaticDecompression = DecompressionMethods.GZip
});
var credentials = new MoySkladCredentials()
{
AccessToken = "your-access-token"
};
var api = new MoySkladApi(credentials, httpClient);или добавьте в IServiceCollection
services
.AddHttpClient<MoySkladApi, MoySkladApi>(httpClient =>
{
return new MoySkladApi(new MoySkladCredentials { AccessToken = "your-access-token" }, httpClient);
})
.ConfigureHttpMessageHandlerBuilder(builder =>
{
if (builder.PrimaryHandler is HttpClientHandler httpClientHandler)
httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip;
});try
{
await api.Entity.Counterparty.GetAllAsync();
}
catch (MoySkladException ex)
{
// обработать код ошибки
if (ex.ErrorCode == 404) { ... }
// обработать ошибки
foreach (var error in ex.Errors) { ... }
// полное описание ошибки
// cодержит все коды/описания по каждой ошибке из ex.Errors.
_logger.Log(ex.Message);
}var response = await api.Security.Token.GetAsync(new MoySkladCredentials
{
Username = "new-username",
Password = "new-password",
});
var accessToken = response.Payload.AccessToken;var imagesResponse = await api.Entity.Product.Images.GetAllAsync(Guid.Parse("product-id"));
foreach (var image in imagesResponse.Payload.Rows)
{
var imageDataResponse = await api.Entity.Product.Images.DownloadAsync(image);
await using (imageDataResponse.Payload)
{
if (imageDataResponse.Payload is MemoryStream memoryStream)
{
var imageData = memoryStream.ToArray();
// обработать изображение
}
}
}await api.Entity.Product.Metadata.GetAsync();var response = await api.Entity.Assortment.GetAllAsync(query =>
{
// фильтр '='
query.FilterBy(p => p.Name).Should().Be("foo");
// фильтр '=' по коду в виде строки
query.FilterBy("code").Should().Be("bar");
// вложенный фильтр '='
query.FilterBy(p => p.Alcoholic.Type).Should().Be(123);
// множественный фильтр '='
query.FilterBy(p => p.Archived).Should().Be(true).Or.Be(false);
// фильтр '~'
query.FilterBy(p => p.Article).Should().Contains("foo");
// фильтр '~='
query.FilterBy(p => p.Barcode).Should().StartsWith("foo");
// фильтр '>=' и '<='
query.FilterBy(p => p.Updated).Should()
.BeGreaterOrEqualTo(DateTime.Parse("2020-07-10 12:00:00"))
.And
.BeLessOrEqualTo(DateTime.Parse("2020-07-12 12:00:00"));
// фильтр по пользовательскому полю
query.FilterBy("your-custom-attribute-href").Should().Be(123);
// фильтр по складу по ссылке
query.FilterBy(p => p.StockStore).Should().Be("https://api.moysklad.ru/api/remap/1.2/entity/store/59a894aa-0ea3-11ea-0a80-006c00081b5b");
// или с объектом Store
query.FilterBy(p => p.StockStore).Should().Be(store);
});var response = await api.Entity.Assortment.GetAllAsync(query =>
{
query.OrderBy(p => p.Name)
// или по любой строке
.ThenBy("your-custom-property-name");
// по убыванию
query.OrderBy(p => p.Name, OrderBy.Desc)
});var response = await api.Entity.Assortment.GetAllAsync(query =>
{
query.Limit(100);
query.Offset(50);
});var response = await api.Entity.Assortment.GetAllAsync(query =>
{
query.Search("foo");
});var response = await api.Entity.Assortment.GetAllAsync(query =>
{
query.GroupBy(GroupBy.Consignment);
});var response = await api.Entity.Assortment.GetAllAsync(query =>
{
query.ExpandBy(p => p.Images)
.ThenBy(p => p.Product)
// вложенный
.ThenBy(p => p.SalePrices.Currency)
.ThenBy(p => p.BuyPrice.Currency)
.ThenBy(p => p.Product.SalePrices.Currency)
.ThenBy(p => p.Product.BuyPrice.Currency)
// или по любой строке
.ThenBy("salePrices.currency")
});В корневой папке в файле build.ps1 укажите API_LOGIN и API_PASSWORD
build.ps1
# Enter your login and password
# $Env:API_LOGIN = "enter-your-api-login-here"
# $Env:API_PASSWORD = "enter-your-api-password-here"Я открыт для любого сотрудничества и расширения функционала данного проекта. Pull requests приветствуются, однако сначала откройте issue для обсуждения.
Если вам понравился данный проект, воткните ⭐