Пример #1
0
        /// <summary>
        /// Получить точки для карты асинхронно
        /// </summary>
        /// <param name="pars"></param>
        /// <param name="rs"></param>
        /// <returns></returns>
        public Task <List <DeliveryPoint> > GetDeliveryPointsAsync(ApiParameters pars, RequestSettings rs = null) //t-ok
        {
            string url = $"https://map-api.viadelivery.pro/point-list" + pars.ToUrlQuery();

            return(TryGetObjectAsync <List <DeliveryPoint> >(url, HttpMethod.Get, rs ?? _defaultRequestSettings));
        }
Пример #2
0
        /// <summary>
        /// Запрос доступных значений для списков стран, городов, регионов
        /// <para>Для нормальной связанности данных, нужно правильно задавать фильтры вышестоящих объектов.
        /// т.е. для запроса/поиска улиц, желательно указать город и его регион</para>
        /// </summary>
        /// <param name="type">country/region/city/street - выбирает какие объекты вернет запрос</param>
        /// <param name="filterKeyword">фильтрация значения запрашиваемого справочника по подстроке</param>
        /// <param name="filterCity">включить фильтрацию по городу. если не задан - все города</param>
        /// <param name="fiterRegion">включить фильтрацию по региону. если не задан - все регионы</param>
        /// <param name="rs"></param>
        /// <param name="filterCountry">позволяет включить фильтрацию по коду страны. если не задан = RU</param>
        /// <returns></returns>
        public List <string> GetGeoDictionaryVariants(GeoType type, string filterKeyword,
                                                      string filterCity, string fiterRegion, RequestSettings rs = null, string filterCountry = "RU") //t-ok
        {
            string url = $"https://map-api.viadelivery.pro/geo-dictionary?type={type.ToString().ToLower()}";

            if (!string.IsNullOrWhiteSpace(filterCountry))
            {
                url += ($"&filter_country={filterCountry}");
            }
            if (!string.IsNullOrWhiteSpace(fiterRegion))
            {
                url += ($"&filter_region={fiterRegion}");
            }
            if (!string.IsNullOrWhiteSpace(filterCity))
            {
                url += ($"&filter_city={filterCity}");
            }
            if (!string.IsNullOrWhiteSpace(filterKeyword))
            {
                url += ($"&filter_keyword={filterKeyword}");
            }

            return(TryGetObject <List <string> >(url, HttpMethod.Get, rs ?? _defaultRequestSettings));
        }
Пример #3
0
        private async Task <T> TryGetObjectAsync <T>(string url, HttpMethod httpMethod, RequestSettings rs)
            where T : class
        {
            var responseString = await _httpLoader.GetStringAsync(url, httpMethod, rs ?? _defaultRequestSettings).ConfigureAwait(false);

            if (string.IsNullOrWhiteSpace(responseString))
            {
                throw new Exception("Возникла ошибка при отправке или при получении данных от сервера.");
            }
            var deserializedObject = AnswerToObject <T>(responseString, _serializer);

            if (deserializedObject == null)
            {
                throw new Exception($"Возникла ошибка при десериализации данных к типу {typeof(T)}. Данные: ({responseString})");
            }
            return(deserializedObject);
        }
Пример #4
0
        /// <summary>
        /// Информация о конкретной точке по ее Id асинхронно
        /// </summary>
        /// <param name="pointId">Id точки</param>
        /// <param name="rs"></param>
        /// <returns></returns>
        public Task <DeliveryPoint> GetDeliveryPointByIdAsync(string pointId, RequestSettings rs = null)
        {
            string url = $"https://map-api.viadelivery.pro/point-list?id={_shopId}&point_id={pointId}";

            return(TryGetObjectAsync <DeliveryPoint>(url, HttpMethod.Get, rs ?? _defaultRequestSettings));
        }
Пример #5
0
        /// <summary>
        /// Получение точек выдачи для карты в формате InSales
        /// </summary>
        /// <param name="body">InSalesPointListRequestBody</param>
        /// <returns>список объектов InSalesPoint</returns>
        public List <InSalesPoint> GetInsalesPointList(InSalesPointListRequestBody body, RequestSettings rs = null)
        {
            var r = (rs ?? RequestSettings.CreateNew());

            r.Body = _serializer.SerializeObject(body);
            //здесь прописан путь из документации. для develop-режима не понятно где взять
            var url = $"https://api.viasarci.com/insales/point-list?id={_shopId}";

            return(TryGetObject <List <InSalesPoint> >(url, HttpMethod.Post, r));
        }
Пример #6
0
        private Task <PickupPointsRequestResult> GetPickupObjectsAsync(string type,
                                                                       long?masterId, long?limit, long?offset, RequestSettings rs = null, string language = "RU")
        {
            var r = (rs ?? RequestSettings.CreateNew()).SetJson();

            r.Body = _serializer.SerializeObject(new { Language = language, Type = type, Limit = limit, Offset = offset, MasterId = masterId });
            var url = _apiUrl + "/api/get_objects?sid=@" + _securityToken;

            return(TryGetObjectAsync <PickupPointsRequestResult>(url, HttpMethod.Post, r));
        }
Пример #7
0
        => GetPickupObjects("pickup_points", masterId, limit, offset, rs, language);     //t-ok

        /// <summary>
        /// Получение списка точек доставки асинхронно
        /// </summary>
        /// <param name="masterId"></param>
        /// <param name="limit"></param>
        /// <param name="offset"></param>
        /// <param name="language"></param>
        /// <param name="rs"></param>
        /// <returns></returns>
        public Task <PickupPointsRequestResult> GetPickupPointsAsync(long masterId,
                                                                     long?limit = null, long?offset = null, string language = "RU", RequestSettings rs = null)
        => GetPickupObjectsAsync("pickup_points", masterId, limit, offset, rs, language);     //t-ok
Пример #8
0
        //todo Не прверялось
        public bool GetOrdersDataPrint(List <string> orderIds, string saveAsFullPath, RequestSettings rs = null)
        {
            //здесь прописан путь из документации. для develop-режима не понятно где взять
            var url = "https://api.viasarci.com/api/get_orders_data_print?sid=@" + _securityToken;

            rs.Body = _serializer.SerializeObject(new { OrderIds = orderIds, Token = "@" + _securityToken });
            _httpLoader.DownloadFile(url, HttpMethod.Post, saveAsFullPath, rs ?? _defaultRequestSettings);
            return(true);
        }
Пример #9
0
        => GetObjects("street", masterId, limit, offset, rs, language);     //t-ok

        /// <summary>
        /// Получение списка улиц асинхронно
        /// </summary>
        /// <param name="masterId"></param>
        /// <param name="limit"></param>
        /// <param name="offset"></param>
        /// <param name="language"></param>
        /// <param name="rs"></param>
        /// <returns></returns>
        public Task <RefObjectRequestResult> GetStreetsAsync(long masterId,
                                                             long?limit = null, long?offset = null, string language = "RU", RequestSettings rs = null)
        => GetObjectsAsync("street", masterId, limit, offset, rs, language);     //t-ok
Пример #10
0
        => GetObjectsAsync("city", masterId, limit, offset, rs, language);     //t-ok

        /// <summary>
        /// Получение списка городов
        /// </summary>
        /// <param name="masterId">ID мастер объекта (если не задан, будут возвращены все объекты данного типа),
        /// возможно задавать id не не только непосредственного мастер объекта, а любого мастер объекта.
        /// Например: все точки доставки по улице, все точки доставки города</param>
        /// <param name="limit">количество получаемых строк</param>
        /// <param name="offset">отступ в строчках</param>
        /// <param name="language">язык выдачи</param>
        /// <returns></returns>
        public RefObjectRequestResult GetCities(long masterId,
                                                long?limit = null, long?offset = null, string language = "RU", RequestSettings rs = null)
        => GetObjects("city", masterId, limit, offset, rs, language);     //t-ok
Пример #11
0
        => GetObjects("country", null, null, null, rs, language);     //t-ok

        /// <summary>
        /// Получение списка стран асинхронно
        /// </summary>
        /// <param name="language"></param>
        /// <returns>RefObjectRequestResult</returns>
        public Task <RefObjectRequestResult> GetCountriesAsync(string language = "RU", RequestSettings rs = null)
        => GetObjectsAsync("country", null, null, null, rs, language);     //t-ok
Пример #12
0
 /// <summary>
 /// Получение списка стран
 /// </summary>
 /// <param name="language"></param>
 /// <returns>RefObjectRequestResult</returns>
 public RefObjectRequestResult GetCountries(string language = "RU", RequestSettings rs = null)
 => GetObjects("country", null, null, null, rs, language);     //t-ok
Пример #13
0
        private static HttpWebRequest CreateRequest(string url, HttpMethod httpMethod, RequestSettings requestSettings)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = httpMethod.Method;

            if (requestSettings.TimeoutMs > 0)
            {
                request.Timeout = requestSettings.TimeoutMs;
            }

            if (!string.IsNullOrWhiteSpace(requestSettings.UserAgent))
            {
                request.UserAgent = requestSettings.UserAgent;
            }

            if (requestSettings.Headers.Count > 0)
            {
                var contentType = requestSettings.Headers.Where(x => string.Equals(x.Key, "content-type", StringComparison.OrdinalIgnoreCase))
                                  .FirstOrDefault();

                if (!contentType.Equals(default(KeyValuePair <string, string>)))
                {
                    request.ContentType = contentType.Value;
                }

                foreach (KeyValuePair <string, string> header in requestSettings.Headers
                         .Where(x => !string.Equals(x.Key, "content-type", StringComparison.OrdinalIgnoreCase)))
                {
                    request.Headers[header.Key] = header.Value;
                }
            }

            if (!string.IsNullOrWhiteSpace(requestSettings.Accept))
            {
                request.Accept = requestSettings.Accept;
            }

            request.ContentLength = 0;

            if (!string.IsNullOrWhiteSpace(requestSettings.Body) && !string.Equals(request.Method, "GET",
                                                                                   StringComparison.OrdinalIgnoreCase))
            {
                byte[] bytes = Encoding.UTF8.GetBytes(requestSettings.Body);
                request.ContentLength = bytes.Length;
                using (var requestStream = request.GetRequestStream())
                {
                    requestStream.Write(bytes, 0, bytes.Length);
                }
            }
            else if (requestSettings.FormData.Count > 0)
            {
                byte[] bytes = Encoding.UTF8.GetBytes(string.Join("&",
                                                                  requestSettings.FormData.Select(x => $"{x.Key}={x.Value}")));
                request.ContentLength = bytes.Length;
                request.ContentType   = "application/x-www-form-urlencoded";
                using (var requestStream = request.GetRequestStream())
                {
                    requestStream.Write(bytes, 0, bytes.Length);
                }
            }
            return(request);
        }