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