Web-сервисы: Сервис TourML
Версия статьи от 16-01-2017.
Содержание
- 1 Введение
- 2 Настройки
- 3 Общая информация о методах веб-сервиса
- 3.1 Выгрузка цен (TL)
- 3.1.1 Метод GetSPOArrayByKeyCompressed
- 3.1.2 Метод GetSPOByKey
- 3.1.3 Метод GetSPOByKey_DC
- 3.1.4 Метод GetSPOByKeyCompressed
- 3.1.5 Метод GetSPOByKeyCompressed_DC
- 3.1.6 Метод GetSPOPageByKey
- 3.1.7 Метод GetSPOPageByKeyCompressed
- 3.1.8 Метод GetValidTourList
- 3.1.9 Метод GetValidTourListCompressed
- 3.1.10 Метод GetValidTourListFrom
- 3.1.11 Метод GetValidTourListFrom_DC
- 3.1.12 Метод GetValidTourListFromCompressed
- 3.2 Импорт квот и Stop-Sale (QL)
- 3.3 Актуализация цены и бронирование (BOO)
- 3.4 Работа с заявкой (AGR)
- 3.5 Подбор вариантов (GBI)
- 3.6 Подбор перелетов (FLF)
- 3.7 Любые другие (MICS)
- 3.8 Специальные (SPEC)
- 3.1 Выгрузка цен (TL)
- 4 Авторизация при использовании web-сервиса
- 5 Вызов методов веб-сервиса. Возможные проблемы при авторизации
- 6 Функции загрузки информации о турах
- 6.1 Формат TourML
- 6.2 Порядок работы с web-сервисом
- 7 Рекомендации по составлению запросов
- 8 Ответы на часто задаваемые вопросы
- 9 Приложение A. Функции загрузки информации о турах и ценах
- 10 Приложение B. Функции проверки бронирования и бронирования
- 11 Приложение С. Функции работы с путевкой
Введение
Задача получения данных из программного комплекса Мастер-Тур и передача полученных данных сторонним системам, а также получение данных из сторонних систем в программном комплексе Мастер-Тур весьма актуальна.
Предлагаемое компанией Мегатек решение состоит в использовании общепризнанного механизма взаимодействия между различными системами - WEB-сервис, работающий с единым, для туристической области в России, форматом – TourML.
Формат TourML представляет из себя текстовый XML документ, использование которого позволяет избежать проблем, связанных с внутренними изменениями в программном комплексе Мастер-Тур. Использование веб-сервиса позволяет разработать систему один раз и забыть об особенностях реализации внутренних механизмов программного комплекса Мастер-Тур.
Ссылка на тестовый сервис
С работой тестового сервиса TourML для 9-й версии и 11-й версии вы можете ознакомиться на нашем демо-сервере.
Установка
Для установки сервиса TourML нужно создать директорию сервиса TourML в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS) и выложить туда распакованные файлы из архива TourML_9.2.x.xxxxx.zip. В управлении IIS необходимо создать виртуальный каталог для папки TourML.
Создание виртуального каталога
По умолчанию корневым каталогом 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, расположенном в папке TourML пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:
- 1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
- 2. <add key = "connectionStringShort" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog=название базы данных ПК Мастер-Тур;"/>
Настройки
После установки «Сервис TourML» доступен по адресу:
http://ip- адрес сервера Мастер-Веб/TourML/Service.asmx
Настройки в файле WEB.CONFIG
Дополнительные настройки, задаваемые в файле web.config, позволяют задать дополнительные условия для отображения и проверки данных.
| № | Описание | Значение | Настройка |
|---|---|---|---|
| 1 | Настройка, определяющая ключи типов туров, которые будут передаваться. | Ключи типов туров через запятую. | <add key="tipTursFilter" value="5,6,10" />
|
| 2 | Настройка, включающая возможность передавать ключи типов туров через запятую. |
|
<add key="isUseTipTursFilter" value="true" />
|
| 3 | Настройка, включающая возможность отображения наличия мест для квот определенным пользователям. | В значении настройки через запятую перечисляются пользователи, которым должны быть доступны для показа количество мест.
Если настройка не указана или задано пустое значение, квоты доступны всем. |
<add key="showFullQuotasUserNames" value="username" />
|
| 4 | Настройка, отвечающая за отображение количества мест в квоте. |
|
<add key="isShowQuantity" value="true" />
|
| 5 | Настройка, снижающая нагрузку обращений к базе за счет увеличения времени отработки метода GetAgreementsByKeys. Время, указанное в настройке, является промежутком между временем окончания отработки метода и временем возврата результата. | Значение задержки измеряется в секундах.
Рекомендуется указывать значение от 7 до 15 сек. Например, метод возвращал данные через 5 сек. Если в настройке указать значение 10 сек, то время обработки метода и возвращения результата будет составлять 15 сек. |
<add key="delayBeforeReturn" value="10"/>
|
| 6 | Настройка, включающая в методе GetReferences возможность отображения партнеров, предоставляющих услуги отеля, определенным пользователям. | В значении настройки через запятую перечисляются логин пользователей, которым должны быть доступны для показа партнеры по услуге. | <add key="showBOOAddInfoUserNames" value="test" />
|
| 7 | Настройка, определяющая загрузку не выставленных в онлайн СПО туров. Работает только при включенной настройке notOnlineTourTypes |
|
<add key="showNotOnlineSPO" value="true" />
|
| 8 | Настройка, определяющая ключи типов туров СПО. Ключи хранятся в таблице TipTur. | key – перечисляются ключи типов туров через запятую | <add key="notOnlineTourTypes" value="5" />
|
| 9 | Настройка, включающая в методе GetFlightQuotes отображение информации по авиаперелетам (расписание и квоты). | В значении настройки через запятую перечисляются ключи тарифов, по которым производится вывод информации по авиаперелетам. | <add key="tarifsToLoadFlightQuotes" value="89,67,114"/>
|
| 10 | Настройка, позволяющая через запросы к URL и авторизацию с помощью параметров запроса Login и Password, вызывать методы в TourMl. |
(Пример: http: //ip-адрес сервера/TourMl/Service.asmx/GetHotelKeys?checkPoint=2014-01-01&cityKey=614&Login=test&Password=qUqP5cyxm6YcTAhz05Hph5gvu9M=) |
<add key="allowSimpleAuth" value="true"/>
|
| 11 | Настройка метода проверки квот. |
|
<add key="UseNewSetToQuota" value="true"/>
|
Общая информация о методах веб-сервиса
В данном разделе представлена общая информация о методах веб-сериса, которые можно использовать для взаимодействия с программным комплексом Мастер-Тур.
| № | Название метода | Выгрузка цен (TL) | Импорт квот и Stop-Sale (QL) | Актуализация цены и бронирование (BOO) | Работа с заявкой (AGR) | Подбор вариантов (GBI) | Подбор перелетов (FLF) | Любые другие (MICS) | Специальные (SPEC) |
| 1 | CancelAgreement | — | — | — | + | — | — | — | — |
| 2 | CheckBooking | — | — | + | — | — | — | — | — |
| 3 | CreateBooking | — | — | + | — | — | — | — | — |
| 4 | GetAgencies | — | — | + | — | — | — | — | — |
| 5 | GetAgreementCredentials | — | — | + | — | — | — | — | — |
| 6 | GetAgreementsByCode | — | — | — | + | — | — | — | — |
| 7 | GetAgreementsByKeys | — | — | — | + | — | — | — | — |
| 8 | GetAgreementsByNumber | — | — | — | + | — | — | — | — |
| 9 | GetBookingInfo | — | — | — | — | + | — | — | — |
| 10 | GetCountries | — | — | + | — | — | — | — | — |
| 11 | GetCourse | — | — | — | — | — | — | + | — |
| 12 | GetFlightQuotes | — | + | — | — | — | — | — | — |
| 13 | GetHotelKeys | — | + | — | — | — | — | — | — |
| 14 | GetHotelQuotes | — | + | — | — | — | — | — | — |
| 15 | GetInfo | — | — | — | — | — | — | — | + |
| 16 | GetNationalCourse | — | — | — | — | — | — | + | — |
| 17 | GetNationalRateCode | — | — | — | — | — | — | + | — |
| 18 | GetReferences | — | — | — | — | — | — | + | — |
| 19 | GetSPOArrayByKeyCompressed | + | — | — | — | — | — | — | — |
| 20 | GetSPOByKey | + | — | — | — | — | — | — | — |
| 21 | GetSPOByKeyCompressed | + | — | — | — | — | — | — | — |
| 22 | GetSPOByKeyCompressed_DC | + | — | — | — | — | — | — | — |
| 23 | GetSPOByKey_DC | + | — | — | — | — | — | — | — |
| 24 | GetSPOPageByKey | + | — | — | — | — | — | — | — |
| 25 | GetSPOPageByKeyCompressed | + | — | — | — | — | — | — | — |
| 26 | GetSimpleDogovorsBronni | — | — | — | + | — | — | — | — |
| 27 | GetSimpleDogovorsByCreateDates | — | — | — | + | — | — | — | — |
| 28 | GetStopSalesAndQuotes | — | + | — | — | — | — | — | — |
| 29 | GetStopSalesAndQuotes2 | — | + | — | — | — | — | — | — |
| 30 | GetStopSalesAndQuotesByHotels | — | + | — | — | — | — | — | — |
| 31 | GetStopSalesAndQuotesCompressed | — | + | — | — | — | — | — | — |
| 32 | GetValidTourList | + | — | — | — | — | — | — | — |
| 33 | GetValidTourListCompressed | + | — | — | — | — | — | — | — |
| 34 | GetValidTourListFrom | + | — | — | — | — | — | — | — |
| 35 | GetValidTourListFromCompressed | + | — | — | — | — | — | — | — |
| 36 | GetValidTourListFrom_DC | + | — | — | — | — | — | — | — |
| 37 | GetVersion | + | + | + | + | + | + | + | + |
| 38 | Info | — | — | — | — | — | — | — | + |
| 39 | ValidatePriceServices | — | — | + | — | — | — | — | — |
Выгрузка цен (TL)
Метод GetSPOArrayByKeyCompressed
Данный метод осуществляет загрузку цен (данные возвращаются в сжатом виде по частям).
Запись полученных результатов производится в таблицы FileRepos и FileHeaders в том случае, если у пользователя, который осуществляет загрузку цен указаны права Insert, Delete, Select и Update. Права указываются в свойствах таблиц в разделе Permissions.
Список принимаемых параметров:
- SpoKey – ключ СПО
В результате пользователь получает
Вызов метода GetSPOArrayByKeyCompressed с параметром spoKey=11
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://tourml.ru/service/2004-08-13/products">
<soapenv:Header/>
<soapenv:Body>
<prod:GetSPOArrayByKeyCompressed>
<prod:spoKey>11</prod:spoKey>
</prod:GetSPOArrayByKeyCompressed>
</soapenv:Body>
</soapenv:Envelope>
|
Возвращаемый результат метода GetSPOArrayByKeyCompressed
<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" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://tourml.ru/service/2004-08-13/products/GetSPOArrayByKeyCompressedResponse</wsa:Action>
<wsa:MessageID>uuid:551d0c97-8840-4f53-9945-6cd75f78870e</wsa:MessageID>
<wsa:RelatesTo>uuid:52803223-43b1-4f5d-a74b-770f384dd7e6</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-9e43b1e3-bc8f-4af0-9e0f-7d92d98fc016">
<wsu:Created>2015-02-09T13:01:44Z</wsu:Created>
<wsu:Expires>2015-02-09T13:06:44Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<GetSPOArrayByKeyCompressedResponse xmlns="http://tourml.ru/service/2004-08-13/products">
<GetSPOArrayByKeyCompressedResult>
<base64Binary>PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8VG91ck1MIH
</base64Binary>
<base64Binary>PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8VG91ck1MIH
</base64Binary>
</GetSPOArrayByKeyCompressedResult>
</GetSPOArrayByKeyCompressedResponse>
</soap:Body>
</soap:Envelope>
|
Метод GetSPOByKey
Данный метод осуществляет загрузку цен по выбранному туру.
Список принимаемых параметров:
- SpoKey – ключ СПО
В результате пользователь получает информацию по ценам на соответствующие им дни.
Вызов метода GetSPOByKey с параметром spoKey=11
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prod="http://tourml.ru/service/2004-08-13/products">
<soapenv:Header/>
<soapenv:Body>
<prod:GetSPOByKey>
<prod:spoKey>11</prod:spoKey>
</prod:GetSPOByKey>
</soapenv:Body>
</soapenv:Envelope>
|
Возвращаемый результат метода GetSPOByKey
<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" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://tourml.ru/service/2004-08-13/products/GetSPOByKeyResponse</wsa:Action>
<wsa:MessageID>uuid:2ce65d3f-307b-46a9-a6bb-49761781adf9</wsa:MessageID>
<wsa:RelatesTo>uuid:d31e4bf8-1b66-438c-b869-5eea9eebd782</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp wsu:Id="Timestamp-e7b032a0-1e95-4283-9bad-91b242d0ba19">
<wsu:Created>2015-02-09T14:46:16Z</wsu:Created>
<wsu:Expires>2015-02-09T14:51:16Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<GetSPOByKeyResponse xmlns="http://tourml.ru/service/2004-08-13/products">
<TourML version="1.0" date="2015-01-30" time="14:41:16" xmlns="http://tourml.ru/products/2004-04-19">
<header name="Название ТО" uri="URL" vendor="Megatec">
<comment/>
<loadTime timeValue="100" lastKey="-1" xmlns="http://www.megatec.ru/tourml/extensions"/>
</header>
<references>
<countries>
<country key="460" name="Россия" nameLat="Russia"/>
<country key="3" name="Бельгия" nameLat="Belgium"/>
</countries>
<resorts/>
<cities>
<city key="1" name="Москва" nameLat="Moscow" code="MOW" countryKey="460"/>
<city key="63" name="Брюссель" nameLat="en_Брюссель" code="BRU" countryKey="3"/>
</cities>
<categories>
<category key="707724292" name="4*" nameLat="4*"/>
</categories>
<hotels>
<hotel key="3231" name="Zeebrugge" nameLat="Zeebrugge" code="zee" countryKey="3" cityKey="63"/>
</hotels>
<buildings>
<building key="3231" name="Основной корпус" nameLat="Base build" categoryKey="707724292" hotelKey="3231"/>
</buildings>
<airlines>
<airline key="18" name="Lufthunsa" nameLat="en_Lufthunsa" code="LH"/>
</airlines>
<airports>
<airport key="64" name="BRU" nameLat="BRU" code="BRU" cityKey="63" distance="0"/>
<airport key="12" name="Домодедово" nameLat="Домодедово" code="DME" cityKey="1" distance="0"/>
</airports>
<aircrafts>
<aircraft key="4" name="aerobus A-310" code="310"/>
</aircrafts>
<flights>
<flight key="524" code="068" fromCityKey="63" toCityKey="1" airlineKey="18">
<flightTime key="3" fromAirportKey="64" toAirportKey="12" dateBegin="2012-01-01" dateEnd="2021-01-01" weekDays="1234567" aircraftKey="4" timeBegin="07:05:00" timeEnd="10:10:00"/>
</flight>
<flight key="525" code="069" fromCityKey="1" toCityKey="63" airlineKey="18">
<flightTime key="4" fromAirportKey="12" toAirportKey="64" dateBegin="2012-01-01" dateEnd="2021-01-01" weekDays="1234567" aircraftKey="4" timeBegin="06:10:00" timeEnd="09:15:00"/>
</flight>
</flights>
<roomTypes>
<roomType key="38" name="2A" nameLat="2A" code="2A" numBed="2" numExBed="0"/>
</roomTypes>
<roomLocations/>
<roomViews/>
<roomCategories>
<roomCategory key="20" name="Standart" nameLat="Standart" code="STD"/>
</roomCategories>
<roomDescriptions>
<roomDescription key="20" catKey="20"/>
</roomDescriptions>
<roomAccomodations>
<roomAccomodation key="325" name="2A" nameLat="2A" code="2A" numBed="2">
<adult place="0" order="0"/>
<adult place="0" order="0"/>
</roomAccomodation>
</roomAccomodations>
<rooms>
<room key="1116" typeKey="38" roomDescKey="20" accomodationKey="325"/>
</rooms>
<serviceClasses/>
<serviceDescriptions/>
<serviceDescriptions1/>
<serviceDescriptions2/>
<transfers/>
<excursions/>
<transports/>
<cabines/>
<ships/>
<boardings>
<boarding key="11" name="Шведский стол" nameLat="All inclusive" code="AI"/>
<boarding key="4" name="Завтрак буфет" nameLat="Breakfast" code="BB"/>
<boarding key="10" name="Не предоставляется" nameLat="NO" code="RO"/>
<boarding key="2" name="Полупансион" nameLat="HalfBoard" code="HB"/>
<boarding key="1" name="Пансион" nameLat="FullBoard" code="FB"/>
</boardings>
<currencies>
<currency key="2" name="Euro" nameLat="Euro" code="EU"/>
</currencies>
<tariffs>
<tariff key="89" name="Экономический класс" nameLat="Coach economy" code="Y"/>
</tariffs>
<tourTypes>
<tourType key="10" name="Круиз" nameLat="en_Круиз"/>
<tourType key="9" name="Дополнительное спец. предложение" nameLat="en_Дополнительное спец. предложение"/>
<tourType key="8" name="Дополнительный тур" nameLat="en_Дополнительный тур"/>
<tourType key="7" name="Подмосковье:Специальные туры" nameLat="en_Подмосковье:Специальные туры"/>
<tourType key="6" name="Подмосковье:Календарные туры" nameLat="en_Подмосковье:Календарные туры"/>
<tourType key="5" name="Специальное предложение" nameLat="en_Специальное предложение"/>
<tourType key="4" name="Многодневная экскурсия" nameLat="en_Многодневная экскурсия"/>
<tourType key="3" name="Авиаперелет" nameLat="en_Авиаперелет"/>
<tourType key="2" name="Стандартный тур" nameLat="en_Стандартный тур"/>
<tourType key="1" name="Комбинированный тур" nameLat="en_Комбинированный тур"/>
<tourType key="0" name="Не определен" nameLat="en_Не определен"/>
</tourTypes>
<agencies/>
<orders xmlns="http://www.megatec.ru/tourml/extensions"/>
<users xmlns="http://www.megatec.ru/tourml/extensions"/>
<accounts xmlns="http://www.megatec.ru/tourml/extensions"/>
<operators/>
</references>
<sources>
<source name="Название ТО" uri="URL">
<quotaServices/>
<packets>
<packet>
<packetHeader>
<tour key="192" name="Тур в Брюссель № 42" tourTypeKey="2" countryKey="3"/>
<spo key="11" name="Тур в Брюссель № 42" for="byRoom" validFrom="2014-07-09" validTo="2015-12-31" currencyKey="2" state="Created" issue="2014-07-08T16:50:08.0000000+03:00">
<calculatingKeys/>
<dates>
<date>2014-07-09T00:00:00</date>
<date>2014-07-10T00:00:00</date>
<date>2014-07-11T00:00:00</date>
...
<date>2015-12-29T00:00:00</date>
<date>2015-12-30T00:00:00</date>
<date>2015-12-31T00:00:00</date>
</dates>
<comment/>
</spo>
<spoInfo xmlns="http://www.megatec.ru/tourml/extensions">
<priceQuantity>6492</priceQuantity>
</spoInfo>
</packetHeader>
<services>
<hotelServices>
<hotelService mealKey="10" roomKey="1116" buildingKey="3231">
<variant providerKey="0" dayBeg="1" nights="6" days="7" men="2" allowDelete="true" allowEditMainService="true" allowEditSubService="true" attribute="159" id="_519">
<info>
<additionalAttributes allowEditCity="true" allowEditPartner="true" allowEditDuration="true" xmlns="http://www.megatec.ru/tourml/extensions"/>
</info>
</variant>
...
</variant>
<variant providerKey="0" dayBeg="4" nights="0" days="0" men="2" allowDelete="true" allowEditMainService="true" allowEditSubService="true" attribute="31" id="_504">
<info>
<additionalAttributes allowEditCity="true" allowEditPartner="true" xmlns="http://www.megatec.ru/tourml/extensions"/>
|