API 1.0
http://demo.zetaweb.ru/webservices/api.asmx
http://demo.zetaweb.ru/webservices/api.asmx?WSDL
Примеры методов
Авторизация
Получение cookie для дальнейшего использования в методах, требующих авторизации.
Пример кода на C#:
public async Task<Cookie> AuthorizeAsync(string login, string password, CancellationToken cancellationToken)
{
using (var client = new Api.Api())
{
if (string.IsNullOrEmpty(login))
{
throw new Exception("Не указано значение параметра 'Login'");
}
if (string.IsNullOrEmpty(password))
{
throw new Exception("Не указано значение параметра 'Password'");
}
client.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko";
client.CookieContainer = new CookieContainer();
var url = "http://demo.zetaweb.ru/webservices/api.asmx";
client.Url = url;
client.AuthenticationValue = new Authentication { User = login, Password = password };
var success = await Task.Run(() => client.Authenticate(), cancellationToken);
if (!success)
{
throw new Exception("Ошибка авторизации");
}
var cookie = client.CookieContainer
.GetCookies(new UriBuilder(client.Url).Uri)
.Cast<Cookie>()
.First(x => ".ZETAWEBAUTH" == x.Name);
return cookie;
}
}
Получение списка производителей (брендов) по коду (артикулу)
Получение списка деталей по коду (артикулу).
Пример кода на C#:
public async Task<IEnumerable<Part>> GetPartsAsync(string vendorCode, string login, string password, CancellationToken cancellationToken)
{
try
{
using (var client = new Api.Api())
{
var cookie = await AuthorizeAsync(login, password, cancellationToken);
client.CookieContainer.Add(cookie);
var result = await Task.Run(() => client.ProductsBySearchStringGet(vendorCode, 0, false, false, null, null, 1, 1000), cancellationToken);
if (result == null)
throw new Exception("Ошибка при получении ответа");
if (!result.Any())
return new Part[0];
var list = result
.Where(x => x.IsClarify)
.Select(row => new Part
{
Name = row.ProductName,
OriginalVendorName = row.ProductBrand,
VendorCode = row.ProductArticle
})
.ToList();
return list;
}
}
catch (Exception e)
{
// handle exception here
}
}
Получение списка предложений (цен и наличия)
Получение списка деталей по коду (артикулу) и наименованию производителя с ценами, наличием и сроками поставки.
Пример кода на C#:
public async Task<IEnumerable<PartOffer>> GetPartsOffersAsync(string vendorCode, string vendorName,
bool searchedPartOffersOnly, string login, string password, CancellationToken cancellationToken)
{
try
{
using (var client = new Api.Api())
{
var cookie = await AuthorizeAsync(login, password, cancellationToken);
client.CookieContainer.Add(cookie);
// получение списка производителей (брендов)
var result = await Task.Run(() => client.ProductsBySearchStringGet(vendorCode, 0, false, false, null, null, 1, 1000), cancellationToken);
if (result == null)
throw new Exception("Ошибка при получении ответа");
if (!result.Any())
return new PartOffer[0];
var hasClarify = result
.Any(x => x.IsClarify);
if (hasClarify)
{
// если имеются уточнения - получаем идентификатор производителя
var brandId = result
.Where(x => x.IsClarify && string.Equals(vendorName, x.ProductBrand, StringComparison.OrdinalIgnoreCase))
.Select(x => x.ProductBrandId)
.FirstOrDefault();
// позвращаем пустой ответ, если производитель не найден
if (brandId == null)
return new PartOffer[0];
// получение предложений по коду (артикулу) и производителю (бренду)
result = await Task.Run(() => client.ProductsBySearchStringGet(vendorCode, 0, false, false, brandId, null, 1, 1000), cancellationToken);
}
else
{
if (!result.Any(x => string.Equals(vendorCode, x.ProductArticle.ToPurifiedString(), StringComparison.OrdinalIgnoreCase)
&& string.Equals(vendorName, x.ProductBrand, StringComparison.OrdinalIgnoreCase)))
{
// получаем идентификатор производителя
var brandId = result
.Where(x => string.Equals(vendorName, x.ProductBrand, StringComparison.OrdinalIgnoreCase))
.Select(x => x.ProductBrandId)
.FirstOrDefault();
if (brandId == null)
return new PartOffer[0];
// получение предложений по коду (артикулу) и производителю (бренду)
result = await Task.Run(() => client.ProductsBySearchStringGet(vendorCode, 0, false, false, brandId, null, 1, 1000), cancellationToken);
}
}
if (result == null)
throw new Exception("Ошибка при получении ответа");
if (!result.Any())
return new PartOffer[0];
// если нужны толкьо предложения по искомой запчасти без аналогов
if (searchedPartOffersOnly)
{
result = result
.Where(x => string.Equals(vendorCode, x.ProductArticle.ToPurifiedString(), StringComparison.OrdinalIgnoreCase)
&& string.Equals(vendorName, x.ProductBrand, StringComparison.OrdinalIgnoreCase))
.ToArray();
}
var list = rows
.SelectMany(x => x.Stores, (x, z) => new PartOffer
{
Id = JsonConvert.SerializeObject(new
{
x.ProductId,
x.ProductDescriptionId
}),
Part = new Part
{
Name = string.Concat(string.Empty, x.ProductName, string.IsNullOrEmpty(x.ProductDescriptionName)
? string.Empty
: ", ", x.ProductDescriptionName),
OriginalVendorName = x.ProductBrand,
VendorCode = x.ProductArticle,
},
StoreMeasureUnitName = x.ProductRestUnit,
StoreSaleMultiplicity = 1,
StoreId = z.StoreId == null
? string.Empty
: z.StoreId.ToString(),
StoreName = string.Join(", ", z.StoreDescription, z.StoreAbbreviation),
StoreQuantity = z.StoreProductQuantity ?? 0,
StorePrice = z.StoreProductPrice ?? 0,
StoreMinimumDeliveryTime = z.StoreProductDeliveryTime,
StoreMaximumDeliveryTime = z.StoreProductDeliveryTime,
StoreSuccessfulDeliveryPercentage = null,
StoreType = StoreType.Unknown,
})
.ToList();
return list;
}
}
catch (Exception e)
{
// handle exception here
}
}
Last updated