Web-сервисы: Сервис TourML

Материал из Megatec
Перейти к: навигация, поиск

Версия статьи от 16-01-2017.

Содержание

Введение

Задача получения данных из программного комплекса Мастер-Тур и передача полученных данных сторонним системам, а также получение данных из сторонних систем в программном комплексе Мастер-Тур весьма актуальна.

Предлагаемое компанией Мегатек решение состоит в использовании общепризнанного механизма взаимодействия между различными системами - 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)


875.PNG

  • 2. В открывшемся окне выбрать Администрирование (Administrative Tools)


876.PNG

  • 3. Запустить Internet Information Services (IIS) Manager


877.PNG

  • 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties)


878.PNG

  • 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК»


879.PNG

Подключение к базе данных ПК «Мастер-Тур»

В файле 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 Настройка, включающая возможность передавать ключи типов туров через запятую.
  • true - использовать фильтрацию по ключам типов туров через запятую;
  • false или отсутствие настройки - не использовать фильтрацию по ключам типов туров через запятую.
<add key="isUseTipTursFilter" value="true" />
3 Настройка, включающая возможность отображения наличия мест для квот определенным пользователям. В значении настройки через запятую перечисляются пользователи, которым должны быть доступны для показа количество мест.

Если настройка не указана или задано пустое значение, квоты доступны всем.

<add key="showFullQuotasUserNames" value="username" />
4 Настройка, отвечающая за отображение количества мест в квоте.
  • true - отображает количество мест в квоте;
  • false или отсутствие настройки - количество мест в квоте не отображается.
<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
  • true – показывает все выставленные онлайн СПО и не выставленные онлайн СПО с ключами;
  • false или отсутствие настройки – показывает только выставленные онлайн СПО туры
<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.
  • true – метод выполняется по запросу к URL;
  • false или отсутствие настройки – запрос не вызывает метод

(Пример: http: //ip-адрес сервера/TourMl/Service.asmx/GetHotelKeys?checkPoint=2014-01-01&cityKey=614&Login=test&Password=qUqP5cyxm6YcTAhz05Hph5gvu9M=)

<add key="allowSimpleAuth" value="true"/>
11 Настройка метода проверки квот.
  • true или отсутствие настройки– квоты проверяются исходя из настроек в базе;
  • false – квоты сервисами не проверяются
<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"/>