/// <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)); }
/// <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)); }
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); }
/// <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)); }
/// <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)); }
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)); }
=> 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
//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); }
=> 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
=> 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
=> 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
/// <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
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); }