Web-сервисы: Сервис поиска
Введение
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
Ссылка на тестовый сервис
С работой тестового сервиса поиска вы можете ознакомиться на нашем демо-сервере.
Установка
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/MasterWeb и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки WebServices.
Создание виртуального каталога
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
- 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)
- 2. В открывшемся окне выбрать Администрирование (Administrative Tools).
- 3. Запустить Internet Information Services (IIS) Manager.
- 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).
- 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».
Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:
- 1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
- 2. <add key = "connectionStringShort" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog=название базы данных ПК Мастер-Тур"/>
При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка searchConnectionString веб-сервисом не поддерживается.
Настройка
После установки «Поисковый сервис» доступен по адресу http: //ip- адрес сервера Мастер-Веб/WebServices/Search.asmx.
Настройки web.config приложения ПК Мастер-Web
Дополнительные настройки, задаваемые в файле web.config, находящемся в папке MasterWeb позволяют задать дополнительные условия для отображения и проверки данных.
№ | Описание | Значение | Настройка |
---|---|---|---|
1 | Путь к приложению WebServices | Ссылка на приложение WebServices | <add key="webServicesSource" value="http://localhost/MasterWeb/WebService"/>
|
Настройки web.config «Поискового сервиса»
Дополнительные настройки, задаваемые в файле web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников.
№ | Описание | Значение | Настройка |
---|---|---|---|
1 | Отображение наличия мест в экранах, если релиз-период = 0 |
|
<add key="setRequestIfReleaseIsZero" value="true" />
|
2 | Проверка агентской квоты |
|
<add key="checkAgentQuotesEnabled" value="true" />
|
3 | Проверка общей квоты, если закончились места в агентской |
|
<add key="checkAgentAndCommonQuote" value="true" />
|
4 | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность |
|
<add key="checkNoLongQuota" value="true" />
|
5 | Наличие мест, отображаемое при наступлении релиз-периода |
|
<add key="expiredReleaseQuoteResult" value="request" />
|
Добавление секций
- 1. В секции <ConfigSections> необходимо добавить подсекцию:
<sectionGroup name="Megatec.Web.Services"> <section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/> </sectionGroup>
- 2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
<Megatec.Web.Services> <servicesAccessibility Enabled="true"> <Services> <add name="DoSearch" enabled="true"/> </Services> </servicesAccessibility> </Megatec.Web.Services>
Подготовка данных
Описание класса SearchFilter
Параметр PageSize является обязательным и его значение должно быть менее 1000.
/// <summary> /// Поисковый фильтр /// </summary> public class SearchFilter { public enum SearchSource : short { PriceTables = 0, BindingTables = 1, } public enum KindOfTours : int { All = 0, PacketTours = 1, LandTours = 2 } /// <summary> /// Вид тура /// </summary> public KindOfTours KindOfToursMask { get { return this.kindOfTours; } set { this.kindOfTours = value; } } /// <summary> /// Маска аттрибутов тура /// </summary> public int TurListAttributeMask { get { return this.turlistAttributeMask; } set { this.turlistAttributeMask = value; } } /// <summary> /// Партнер по отелю /// </summary> public int HotelPartnerKey { get { return this.hotelPartnerKey; } set { this.hotelPartnerKey = value; } } [XmlAttribute] public int MaxChildAge { get { return this.maxChildAge; } set { this.maxChildAge = value; } } /// <summary> /// Интервал дат /// </summary> public DateInterval TurDateRange { get { return this._turDateRange; } set { this._turDateRange = value; } } /// <summary> /// Интервал продолжительностей /// </summary> public DurationInterval DurationRange { get { return this._durationRange; } set { this._durationRange = value; } } /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey { get { if (this._countryKeys.Count == 0) return -1; return (int)this._countryKeys[0]; } set { this._countryKeys.Clear(); if (value > 0) this._countryKeys.Add(value); } } /// <summary> /// Массив ключей стран /// </summary> public ArrayList CountryKeys { get { return this._countryKeys; } } /// <summary> /// Поставлен ли флажок все авиакомпании (данный параметр еще не реализован) /// </summary> [XmlAttribute] public bool IsAllAirlines { get { return this._isAllAirlines; } set { this._isAllAirlines = value; } } /// <summary> /// Поставлен ли флажок все страны /// </summary> [XmlAttribute] public bool IsAllCountries { get { return this._isAllCountries; } set { this._isAllCountries = value; } } /// <summary> /// Поиск на все продолжительности /// </summary> [XmlAttribute] public bool IsAllDurations { get { return this._isAllDurations; } set { this._isAllDurations = value; } } /// <summary> /// Массив продолжительностей /// </summary> public ArrayList Durations { get { return durations; } } [XmlAttribute] public bool ExcludeNoPlaces { get { return excludeNoPlaces; } set { excludeNoPlaces = value; } } /// <summary> /// Массив продолжительностей в днях /// </summary> public ArrayList Days { get { return days; } } /// <summary> /// Массив продолжительностей в ночах /// </summary> public ArrayList Nights { get { return nights; } } /// <summary> /// Проверять ли квоты /// </summary> [XmlAttribute] public bool CheckQuotes { get { return checkQuotes; } set { checkQuotes = value; } } /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int DepartFromKey { get { if (this._departFromKeys.Count == 0) return -1; return (int)this._departFromKeys[0]; } set { this._departFromKeys.Clear(); if (value >= 0) this._departFromKeys.Add(value); } } /// <summary> /// Ключ города прибытия (данный параметр еще не реализован) /// </summary> [XmlAttribute] public int DepartToKey { get { if (this._departToKeys.Count == 0) return -1; return (int)this._departToKeys[0]; } set { this._departToKeys.Clear(); if (value > 0) this._departToKeys.Add(value); } } /// <summary> /// Массив ключей городов вылета /// </summary> public ArrayList DepartFromKeys { get { return this._departFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsFrom { get { return this._isAllDepartsFrom; } set { this._isAllDepartsFrom = value; } } /// <summary> /// Массив ключей городов прибытия /// </summary> public ArrayList DepartToKeys { get { return this._departToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsTo { get { return this._isAllDepartsTo; } set { this._isAllDepartsTo = value; } } /// <summary> /// Массив ключей аэропортов вылета /// </summary> public ArrayList AirportFromKeys { get { return this._airportFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsFrom { get { return this._isAllAirportsFrom; } set { this._isAllAirportsFrom = value; } } /// <summary> /// Массив ключей аэропортов прибытия /// </summary> public ArrayList AirportToKeys { get { return this._airportToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsTo { get { return this._isAllAirportsTo; } set { this._isAllAirportsTo = value; } } /// <summary> /// Ключ отеля /// </summary> [XmlAttribute] public int HotelKey { get { if (this._hotelKeys.Count == 0) return -1; return (int)this._hotelKeys[0]; } set { this._hotelKeys.Clear(); if (value > 0) this._hotelKeys.Add(value); } } /// <summary> /// Ключ тура /// </summary> [XmlAttribute] public int TourKey { get { return this._tourKey; } set { this._tourKey = value; } } /// <summary> /// Ограничение цены /// </summary> [XmlAttribute] public double PriceLimit { get { return this._priceLimit; } set { this._priceLimit = value; } } /// <summary> /// Список ключей курортов /// </summary> public ArrayList ResortKeys { get { return this._resortKeys; } } /// <summary> /// Поставлен ли флажок все курорты /// </summary> [XmlAttribute] public bool IsAllResort { get { return this._isAllResort; } set { this._isAllResort = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList CityKeys { get { return this._cityKeys; } } /// <summary> /// Установлен ли в фильтре флаг все города /// </summary> [XmlAttribute] public bool IsAllCity { get { return this._isAllCity; } set { this._isAllCity = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList HotelKeys { get { return this._hotelKeys; } } /// <summary> /// Список ключей сервисов в отеле /// </summary> public ArrayList HotelOptionsKeys { get { return this._hotelOptionsKeys; } } /// <summary> /// Установлен ли в фильтре флаг все отели /// </summary> [XmlAttribute] public bool IsAllHotels { get { return this._isAllHotels; } set { this._isAllHotels = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeKeys { get { return this._tourTypeKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourType { get { return this._isAllTourType; } set { this._isAllTourType = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeDetailKeys { get { return this._tourTypeDetailKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourTypeDetails { get { return this._isAllTourTypeDetails; } set { this._isAllTourTypeDetails = value; } } /// <summary> /// Список звездностей отелей /// </summary> public ArrayList HotelStars { get { return this._hotelStars; } } /// <summary> /// Поиск по всем звездностям /// </summary> [XmlAttribute] public bool IsAllHotelStars { get { return this._isAllHotelStars; } set { this._isAllHotelStars = value; } } /// <summary> /// Список ключей питаний /// </summary> public ArrayList PansionKeys { get { return this._pansionKeys; } } /// <summary> /// Поиск по всем питаниях /// </summary> [XmlAttribute] public bool IsAllPansion { get { return this._isAllPansion; } set { this._isAllPansion = value; } } /// <summary> /// Список кодов авиакомпаний /// </summary> public ArrayList AirlineCodes { get { return this._airlineCodes; } } /// <summary> /// Список ключей типов номеров /// </summary> public ArrayList RoomKeys { get { return this.roomKeys; } } /// <summary> /// Список ключей категорий проживания /// </summary> public ArrayList RoomCategoryKeys { get { return this.roomCategoryKeys; } } /// <summary> /// Список ключей типов размещения /// </summary> public ArrayList AccomodationKeys { get { return this.accomodationKeys; } } /// <summary> /// Список ключей дополнительных услуг в отеле /// </summary> public ArrayList AddHotelServiceKeys { get { return this._addHotelServiceKeys; } } /// <summary> /// Поиск по все услугам в отеле /// </summary> [XmlAttribute] public bool IsAllAddHotelService { get { return this._isAllAddHotelService; } set { this._isAllAddHotelService = value; } } /// <summary> /// Искать только основные типы размещения /// </summary> [XmlAttribute] public bool MainOnly { get { return mainOnly; } set { mainOnly = value; } } /// <summary> /// Искать только туры для групп агентов, в которые входит данное агентство /// </summary> [XmlAttribute] public bool GroupOnly { get { return groupOnly; } set { groupOnly = value; } } /// <summary> /// Количество взрослых /// </summary> [XmlAttribute] public int Adults { get { return adults; } set { adults = value; } } /// <summary> /// Количество детей /// </summary> [XmlAttribute] public int Childs { get { return childs; } set { childs = value; } } /// <summary> /// Возраст первого ребенка /// </summary> [XmlAttribute] public int FirstChildAge { get { return firstChildAge; } set { firstChildAge = value; } } /// <summary> /// Возраст второго ребенка /// </summary> [XmlAttribute] public int SecondChildAge { get { return secondChildAge; } set { secondChildAge = value; } } /// <summary> /// Маска квот на проживание /// </summary> [XmlAttribute] public QuotaResult.Status HotelQuotaMask { get { return hotelQuotaMask; } set { hotelQuotaMask = value; } } /// <summary> /// Маска квот на перелет /// </summary> [XmlAttribute] public QuotaResult.Status AviaQuotaMask { get { return aviaQuotaMask; } set { aviaQuotaMask = value; } } /// <summary> /// Количество строк на странице /// </summary> [XmlAttribute] public int PageSize { get { return this.pageSize; } set { this.pageSize = value; } } /// <summary> /// Ограничение цены снизу /// </summary> [XmlAttribute] public double PriceMinimum { get { return this._priceMinimum; } set { this._priceMinimum = value; this.isNullPriceMinimum = false; } } /// <summary> /// Ограничена ли цена снизу /// </summary> [XmlAttribute] public bool IsNullPriceMinimum { get { return this.isNullPriceMinimum; } set { this.isNullPriceMinimum = value; } } /// <summary> /// Дополнительный фильтр /// </summary> [XmlAttribute] public string AddFilter { get { return addFilter; } set { addFilter = value; } } } }
Описание класса SearchParams
/// <summary> /// Класс, описывающий параметры подбора тура /// </summary> public class SearchParams { /// <summary> /// Идентификатор агенства, от имени которого производится поиск /// </summary> [XmlAttribute("Agent")] public int AgentKey = 0; /// <summary> /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. /// Настройка web.config: "checkAgentQuotesEnabled". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckAQ")] public bool CheckAgentQuota = true; /// <summary> /// Проверять общую квоту, если агентская закончилась. /// Настройка web.config: "checkAgentAndCommonQuote". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckCQ")] public bool CheckCommonQuota = true; /// <summary> /// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре, /// иначе цены в расчет на принимается, а используется только расписание перелетов. /// Используется только, если FindFlight = true. /// Настройка web.config: "checkFlightPacket". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckFP")] public bool CheckFlightPacket = true; /// <summary> /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. /// Настройка web.config: "checkNoLongQuota". /// Значение по умолчанию: true /// </summary> [XmlAttribute("CheckNLQ")] public bool CheckNoLongQuota = true; /// <summary> /// Проверять квоты от всех различных партнеров. /// Настройка web.config: "checkAllPartnersQuota". /// Значение по умолчанию: false /// </summary> [XmlAttribute("CheckAPQ")] public bool CheckAllPartnersQuota = true; /// <summary> /// Результат возвращаемый, если у квоты истек релиз-период. /// Настройка web.config: "expiredReleaseQuoteResult". /// Значение по умолчанию: QuotaResult.Status.Request. /// </summary> [XmlAttribute("ExpRelRes")] public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request; /// <summary> /// Подбирать авиаперелет по туру, на который есть свободные места. /// </summary> [XmlAttribute("FindFlight")] public bool FindFlight = true; /// <summary> /// Список классов перелета (ключи бизнес- и эконом-класса) /// </summary> [XmlAttribute("FlightGroups")] public string FlightGroups = String.Empty; /// <summary> /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList /// Настройка web.config: "quotedDynamicPriceTour". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("IsPT")] public bool IsPriceTour = true; /// <summary> /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. /// Настройка web.config: "noPlacesQuoteResult". /// Значение по умолчанию: QuotaResult.Status.No. /// </summary> [XmlAttribute("NPResult")] public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No; /// <summary> /// Тип отбора /// </summary> [XmlAttribute("PagingType")] public short PagingType = Megatec.Search.PagingType.Simple; /// <summary> /// Возращать ли поле, содержащее список ключей классов услуг по туру /// </summary> [XmlAttribute("Services")] public bool Services = false; /// <summary> /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. /// Настройка web.config: "setRequestIfReleaseIsZero". /// Значение по умолчанию: false. /// </summary> [XmlAttribute("SetRequestOnRelease")] public bool SetRequestOnRelease = false; /// <summary> /// Параметры сортировки (выражение ORDER BY) /// </summary> [XmlAttribute("Sort")] public string Sort = string.Empty; /// <summary> /// Производить сортировку на сервере БД или на клиенте /// </summary> [XmlAttribute("SortInDB")] public bool SortInDB = true; }
Описание класса SearchResult
[XmlInclude(typeof(SearchResultItem))] public class SearchResult { /// <summary> /// Общее количество найденных записей /// </summary> [XmlAttribute("Total")] public int TotalCount /// <summary> /// Количество отобранных записей /// </summary> [XmlAttribute("Parsed")] public int ParsedCount /// <summary> /// Не используется /// </summary> [XmlAttribute("Step")] public double DynamicPriceStepValue /// <summary> /// Коллекция найденных результатов /// </summary> [XmlElement("SearchResultItem")] public List<SearchResultItem> Items }
Описание класса SearchResultItem
public class SearchResultItem: IRoomDescription { /// <summary> /// Количество основных мест /// </summary> [XmlAttribute] public int MainPlaces /// <summary> /// Количество неосновных мест /// </summary> [XmlAttribute] public int AddPlaces /// <summary> /// Основное или неосновное размещение /// </summary> [XmlAttribute] public bool IsMain /// <summary> /// Дата, до которой актуален тур /// </summary> [XmlAttribute] public DateTime TourValid /// <summary> /// Дата создания тура /// </summary> [XmlAttribute] public DateTime TourCreated /// <summary> /// Дата заезда /// </summary> [XmlAttribute] public DateTime TourDate /// <summary> /// Продолжительность тура в днях /// </summary> [XmlAttribute] public int Days /// <summary> /// Количество ночей проживания в туре /// </summary> [XmlAttribute] public int Nights /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int CityFromKey /// <summary> /// Ключ города прилета /// </summary> [XmlAttribute] public int CityToKey /// <summary> /// Ключ аэропорта вылета /// </summary> [XmlAttribute] public int AirportFromKey /// <summary> /// Ключ аэропорта прилета /// </summary> [XmlAttribute] public int AirportToKey /// <summary> /// Ключ расчитанного тура (TP_Tours) /// </summary> [XmlAttribute] public int TourKey /// <summary> /// Ключ типа тура (TipTur) /// </summary> [XmlAttribute] public int TourTypeKey /// <summary> /// Ключ тура из конструктора туров (turList) /// </summary> [XmlAttribute] public int TurListKey /// <summary> /// Ключ расчитанного варианта (TP_Lists) /// </summary> [XmlAttribute] public int PriceListKey /// <summary> /// Ключ цены (TP_Prices) /// </summary> [XmlAttribute] public int PriceKey /// <summary> /// Цена /// </summary> [XmlAttribute] public decimal Price /// <summary> /// Ключ главного отеля /// </summary> [XmlAttribute] public int HotelKey /// <summary> /// Ключ партнера для главного отеля /// </summary> [XmlAttribute] public int HotelPartnerKey /// <summary> /// Ключ курорта главного отеля /// </summary> [XmlAttribute] public int ResortKey /// <summary> /// Ключ города главного отеля /// </summary> [XmlAttribute] public int CityKey /// <summary> /// Звездность главного отеля /// </summary> [XmlAttribute] public string HotelCategory /// <summary> /// Ключ питания главного отеля /// </summary> [XmlAttribute] public int PansionKey /// <summary> /// Ключ номера в главном отеле /// </summary> [XmlAttribute] public int HotelRoomKey /// <summary> /// Ключ типа номера в главном отеле /// </summary> [XmlAttribute] public int RoomKey /// <summary> /// Ключ категории номера в главном отеле /// </summary> [XmlAttribute] public int RoomCategoryKey /// <summary> /// Ключ размещения в главном отеле /// </summary> [XmlAttribute] public int AccomodationKey /// <summary> /// Минимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom /// <summary> /// Максимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeTo /// <summary> /// Минимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom2 /// <summary> /// Максимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeTo2 /// <summary> /// Название отеля /// </summary> [XmlAttribute] public string HotelName /// <summary> /// Название тура /// </summary> [XmlAttribute] public string TourName /// <summary> /// Название питания /// </summary> [XmlAttribute] public string PansionName /// <summary> /// Код питания /// </summary> [XmlAttribute] public string PansionCode /// <summary> /// Название типа номера /// </summary> [XmlAttribute] public string RoomName /// <summary> /// Код типа номера /// </summary> [XmlAttribute] public string RoomCode /// <summary> /// Название категории номера /// </summary> [XmlAttribute] public string RoomCategoryName /// <summary> /// Код категории номера /// </summary> [XmlAttribute] public string RoomCategoryCode /// <summary> /// Название размещения /// </summary> [XmlAttribute] public string AccomodationName /// <summary> /// Код размещения /// </summary> [XmlAttribute] public string AccomodationCode /// <summary> /// Название курорта /// </summary> [XmlAttribute] public string ResortName /// <summary> /// Название города /// </summary> [XmlAttribute] public string CityName /// <summary> /// Порядок сортировки типа номера /// </summary> [XmlAttribute] public int RoomOrder /// <summary> /// Порядок сортировки категории номера /// </summary> [XmlAttribute] public int RoomCategoryOrder /// <summary> /// Порядок сортировки размещения /// </summary> [XmlAttribute] public int AccomodationOrder /// <summary> /// Валюта /// </summary> [XmlAttribute] public string Currency /// <summary> /// Ключи услуг, входящих в тур (через запятую) /// </summary> [XmlAttribute] public string Services /// <summary> /// Ключ прямого перелета (Charter) /// </summary> [XmlAttribute] public int CharterKey /// <summary> /// Ключ обратного перелета (Charter) /// </summary> [XmlAttribute] public int CharterBackKey /// <summary> /// День предоставления проживания /// </summary> [XmlAttribute] public int HotelDay /// <summary> /// Количество ночей проживания в отеле /// </summary> [XmlAttribute] public int HotelNights /// <summary> /// День прямого перелета /// </summary> [XmlAttribute] public int CharterDay /// <summary> /// День обратного перелета /// </summary> [XmlAttribute] public int CharterBackDay /// <summary> /// Пакет прямого перелета /// </summary> [XmlAttribute] public int CharterPacketKey /// <summary> /// Партнер прямого перелета /// </summary> [XmlAttribute] public int CharterPartnerKey /// <summary> /// Пакет обратного перелета /// </summary> [XmlAttribute] public int CharterBackPacketKey /// <summary> /// Партнер обратного перелета /// </summary> [XmlAttribute] public int CharterBackPartnerKey /// <summary> /// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример /// 10:100 /// </summary> [XmlAttribute] public string HotelQuota /// <summary> /// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример: /// 10:100|0:100|10:100 /// </summary> [XmlAttribute] public string CharterThereQuota /// <summary> /// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу /// </summary> [XmlAttribute] public string CharterBackQuota /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Id /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Key /// <summary> /// URL с описанием отеля /// </summary> [XmlAttribute] public string HotelURL /// <summary> /// URL с описанием тура /// </summary> [XmlAttribute] public string TourURL /// <summary> /// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterInfo /// <summary> /// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterBackInfo /// <summary> /// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelKeys /// <summary> /// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelRoomKeys /// <summary> /// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelNights /// <summary> /// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelStars /// <summary> /// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllPansionKeys /// <summary> /// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены) /// </summary> [XmlAttribute] public int DynamicHotelPriceStepIndex /// <summary> /// Корректировка базовой цены для отеля (пока в шагах) /// </summary> [XmlAttribute] public double DynamicHotelPriceCorrection }
Работа в системе
Использование сервиса подборов тура
Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами:
- SearchFilter filter – объект класса, описывающего критерии подбора тура
- int pageNumber – порядковый номер запрашиваемой страницы
- SearchParams searchParams – объект класса, описывающего параметры подбора тура
Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem.
Пример запроса к сервису
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <DoSearch xmlns="http://megatec.ru/"> <filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false" IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false"> <ExcludeTourType>false</ExcludeTourType> <KindOfToursMask>All</KindOfToursMask> <TurListAttributeMask>0</TurListAttributeMask> <CruiseCountryKey>0</CruiseCountryKey> <HotelPartnerKey>0</HotelPartnerKey> <CruisePortKey>0</CruisePortKey> <TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" /> <PansionKeys>1</PansionKeys> </filter> <pageNumber>0</pageNumber> <searchParams> <CalculateVisaDeadline>false</CalculateVisaDeadline> <NotDefaultSort>false</NotDefaultSort> <IsShowCOName>false</IsShowCOName> </searchParams> </DoSearch> </soap:Body> </soap:Envelope>