Веб-служба поиска авиабилетов: различия между версиями
(→Сложный маршрут) |
|||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 3: | Строка 3: | ||
Это сервис внутри Nemo, который позволяет получить результаты поиска. | Это сервис внутри Nemo, который позволяет получить результаты поиска. | ||
− | Для подключения к веб-службе поиска авиабилетов необходимо открыть доступ нужному пользователю. Это можно сделать в разделе ''' | + | Для подключения к веб-службе поиска авиабилетов необходимо открыть доступ нужному пользователю. Это можно сделать в разделе '''«Настройки системы»''' ⇨ '''«Интеграция»''' ⇨ '''«Nemo (SOAP API)»'''. |
После добавления пользователя, ему будут присвоены Номер (ClientId) и API ключ клиента, которые нужно использовать для подключения. | После добавления пользователя, ему будут присвоены Номер (ClientId) и API ключ клиента, которые нужно использовать для подключения. | ||
Строка 254: | Строка 254: | ||
<Tariff Code="?" SegNum="?"/> | <Tariff Code="?" SegNum="?"/> | ||
<!--Code — код тарифа, SegNum — номер сегмента, к которому применён тариф--> | <!--Code — код тарифа, SegNum — номер сегмента, к которому применён тариф--> | ||
+ | <FareFamilies> | ||
+ | <!--FareFamilies - наличие данного параметра у сегмента, означает, что у а\к заведены семейства тарифов--> | ||
+ | <FullName>?</FullName> | ||
+ | <!--FullName - название тарифа, который принадлежит семейству тарифов, у сегмента--> | ||
+ | </FareFamilies> | ||
+ | </Tariff> | ||
</Tariffs> | </Tariffs> | ||
<FareCalc>?</FareCalc> | <FareCalc>?</FareCalc> | ||
Строка 291: | Строка 297: | ||
В ссылках на просмотр страницы результата поиска и на бронирование конкретного перелета, домен агентства/субагентства определяется следующим образом: | В ссылках на просмотр страницы результата поиска и на бронирование конкретного перелета, домен агентства/субагентства определяется следующим образом: | ||
− | * Если текущий домен агентства/субагентства есть в настройках (''' | + | * Если текущий домен агентства/субагентства есть в настройках ('''Управление сайтом''' ⇨ '''Домены и протоколы''' ⇨ '''Доменное имя сайта для загрузки настроек'''), то этот домен используется в ссылках. |
* Если текущего домена нет в настройках, то используется первый домен из настроек. | * Если текущего домена нет в настройках, то используется первый домен из настроек. | ||
* Если в настройках не прописано ни одного домена, то используется текущий домен. | * Если в настройках не прописано ни одного домена, то используется текущий домен. | ||
Строка 321: | Строка 327: | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | <syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | ||
− | <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http:// | + | <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://CLIEN_DOMAIN/nemoflights/?version%3D1.0%26for%3DSearchFlights"> |
<soapenv:Header/> | <soapenv:Header/> | ||
<soapenv:Body> | <soapenv:Body> | ||
Строка 602: | Строка 608: | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | <syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | ||
− | <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http:// | + | <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://CLIEN_DOMAIN/nemoflights/?version%3D1.0%26for%3DSearchFlights" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
<SOAP-ENV:Body> | <SOAP-ENV:Body> | ||
<ns1:searchResponse> | <ns1:searchResponse> | ||
Строка 608: | Строка 614: | ||
<Response> | <Response> | ||
<SearchFlights> | <SearchFlights> | ||
− | <Flights SearchId="221983" ResultURL="http%3A%2F% | + | <Flights SearchId="221983" ResultURL="http%3A%2F%2FCLIEN_DOMAIN%2F%3Fgo%3Dsearch%2Fview_results%26uid%3D221983"> |
<Flight FlightId="1387400001" Nemo2FlightId="142939437030005"> | <Flight FlightId="1387400001" Nemo2FlightId="142939437030005"> | ||
<WebService>SABRE</WebService> | <WebService>SABRE</WebService> | ||
Строка 876: | Строка 882: | ||
<Currency>RUB</Currency> | <Currency>RUB</Currency> | ||
<ShowNames>true</ShowNames> | <ShowNames>true</ShowNames> | ||
+ | <EndUserData> | ||
+ | <EndUserIP>---</EndUserIP> | ||
+ | <EndUserBrowserAgent>---</EndUserBrowserAgent> | ||
+ | <RequestOrigin>---</RequestOrigin> | ||
+ | </EndUserData> | ||
</Source> | </Source> | ||
</RequestBin> | </RequestBin> | ||
Строка 890: | Строка 901: | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
<syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | <syntaxhighlight lang="xml" line enclose="div" style="font-size:9pt;background: #F9F9F9; border: 1px dashed #2F6FAB; padding: 10px 5px; margin: 10px 0;"> | ||
− | <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http:// | + | <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://CLIEN_DOMAIN/nemoflights/?version%3D1.0%26for%3DSearchFlights" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
<SOAP-ENV:Body> | <SOAP-ENV:Body> | ||
<ns1:searchResponse> | <ns1:searchResponse> | ||
Строка 896: | Строка 907: | ||
<Response> | <Response> | ||
<SearchFlights> | <SearchFlights> | ||
− | <Flights SearchId=" | + | <Flights SearchId="221998" ResultURL="http%3A%2F%2FCLIEN_DOMAIN%2F%3Fgo%3Dsearch%2Fview_results%26uid%3D221998"> |
− | <Flight FlightId=" | + | <Flight FlightId="1387500001" Nemo2FlightId="142939757060034"> |
− | <WebService> | + | <WebService>AMADEUS</WebService> |
− | <ValCompany/> | + | <ValCompany>SU</ValCompany> |
− | <URL>http%3A%2F% | + | <URL>http%3A%2F%2FCLIEN_DOMAIN%2F%3Fgo%3Dbooking%2Finfo%26uid%3D221998%26flight%3D1387500001</URL> |
<Segments> | <Segments> | ||
<Segment SegNum="1" SegGroupNum="0"> | <Segment SegNum="1" SegGroupNum="0"> | ||
+ | <SupplierCode/> | ||
<DepAirp CodeType="IATA" Name="Прага">PRG</DepAirp> | <DepAirp CodeType="IATA" Name="Прага">PRG</DepAirp> | ||
− | <DepTerminal | + | <DepTerminal>1</DepTerminal> |
− | <ArrAirp CodeType="IATA" Name=" | + | <ArrAirp CodeType="IATA" Name="Шереметьево, Москва">SVO</ArrAirp> |
− | <ArrTerminal | + | <ArrTerminal>E</ArrTerminal> |
− | <OpAirline> | + | <OpAirline>SU</OpAirline> |
− | <OpAirlineName> | + | <OpAirlineName>Аэрофлот</OpAirlineName> |
− | <MarkAirline> | + | <OpAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F3869-a73427f1141d3a37e1523c6193140a5d.svg</OpAirlineLogo> |
− | <MarkAirlineName> | + | <MarkAirline>SU</MarkAirline> |
− | <FlightNumber> | + | <MarkAirlineName>Аэрофлот</MarkAirlineName> |
− | <AircraftName> | + | <MarkAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F3869-a73427f1141d3a37e1523c6193140a5d.svg</MarkAirlineLogo> |
− | <AircraftType> | + | <FlightNumber>2017</FlightNumber> |
− | <DepDateTime> | + | <AircraftName>Airbus A320 (with Sharklets)</AircraftName> |
− | <ArrDateTime> | + | <AircraftType>32A</AircraftType> |
+ | <DepDateTime>2018-04-09T01:00:00</DepDateTime> | ||
+ | <ArrDateTime>2018-04-09T04:30:00</ArrDateTime> | ||
<StopNum>0</StopNum> | <StopNum>0</StopNum> | ||
+ | <StopPoints/> | ||
<BookingCodes> | <BookingCodes> | ||
<BookingCode ClassType="economy"> | <BookingCode ClassType="economy"> | ||
− | <BookingCode> | + | <BookingCode>B</BookingCode> |
</BookingCode> | </BookingCode> | ||
</BookingCodes> | </BookingCodes> | ||
− | <FlightTime> | + | <FlightTime>150</FlightTime> |
− | <RemainingSeats> | + | <RemainingSeats>7</RemainingSeats> |
− | <TimeZone Departure=" | + | <TimeZone Departure="2" Arrival="3"/> |
<ETicket>true</ETicket> | <ETicket>true</ETicket> | ||
+ | <isCharter>false</isCharter> | ||
+ | <BaggageAllowances> | ||
+ | <BaggageAllowance> | ||
+ | <PassengerType>ADT</PassengerType> | ||
+ | <Value>2</Value> | ||
+ | <Measurement>pc</Measurement> | ||
+ | </BaggageAllowance> | ||
+ | </BaggageAllowances> | ||
</Segment> | </Segment> | ||
− | <Segment SegNum="2" SegGroupNum | + | <Segment SegNum="2" SegGroupNum="1"> |
− | + | <SupplierCode/> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | ||
− | |||
− | |||
<DepAirp CodeType="IATA" Name="Домодедово, Москва">DME</DepAirp> | <DepAirp CodeType="IATA" Name="Домодедово, Москва">DME</DepAirp> | ||
− | <DepTerminal | + | <DepTerminal/> |
− | <ArrAirp CodeType="IATA" Name=" | + | <ArrAirp CodeType="IATA" Name="Мальпенса, Милан">MXP</ArrAirp> |
− | <ArrTerminal | + | <ArrTerminal>1</ArrTerminal> |
− | <OpAirline> | + | <OpAirline>I9</OpAirline> |
− | <OpAirlineName> | + | <OpAirlineName>Air Italy</OpAirlineName> |
− | <MarkAirline> | + | <OpAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F3670-209dae18965b8f4642531a739b0d28e7.jpg</OpAirlineLogo> |
− | <MarkAirlineName> | + | <MarkAirline>IG</MarkAirline> |
− | <FlightNumber> | + | <MarkAirlineName>Meridiana</MarkAirlineName> |
− | <AircraftName> | + | <MarkAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F4667-99e77869a19199f2092673d3d2e58cc7.gif</MarkAirlineLogo> |
− | <AircraftType> | + | <FlightNumber>822</FlightNumber> |
− | <DepDateTime> | + | <AircraftName>Boeing 737</AircraftName> |
− | <ArrDateTime> | + | <AircraftType>738</AircraftType> |
+ | <DepDateTime>2018-04-16T12:20:00</DepDateTime> | ||
+ | <ArrDateTime>2018-04-16T14:55:00</ArrDateTime> | ||
<StopNum>0</StopNum> | <StopNum>0</StopNum> | ||
+ | <StopPoints/> | ||
<BookingCodes> | <BookingCodes> | ||
<BookingCode ClassType="economy"> | <BookingCode ClassType="economy"> | ||
− | <BookingCode> | + | <BookingCode>W</BookingCode> |
</BookingCode> | </BookingCode> | ||
</BookingCodes> | </BookingCodes> | ||
− | <FlightTime> | + | <FlightTime>215</FlightTime> |
<RemainingSeats>4</RemainingSeats> | <RemainingSeats>4</RemainingSeats> | ||
− | <TimeZone Departure="3" Arrival=" | + | <TimeZone Departure="3" Arrival="2"/> |
<ETicket>true</ETicket> | <ETicket>true</ETicket> | ||
+ | <isCharter>false</isCharter> | ||
+ | <BaggageAllowances> | ||
+ | <BaggageAllowance> | ||
+ | <PassengerType>ADT</PassengerType> | ||
+ | <Value>2</Value> | ||
+ | <Measurement>pc</Measurement> | ||
+ | </BaggageAllowance> | ||
+ | </BaggageAllowances> | ||
</Segment> | </Segment> | ||
− | <Segment SegNum=" | + | <Segment SegNum="3" SegGroupNum="2"> |
− | + | <SupplierCode/> | |
− | + | <DepAirp CodeType="IATA" Name="Линате, Милан">LIN</DepAirp> | |
− | + | <DepTerminal/> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <DepAirp CodeType="IATA" Name=" | ||
− | <DepTerminal | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<ArrAirp CodeType="IATA" Name="Мадрид">MAD</ArrAirp> | <ArrAirp CodeType="IATA" Name="Мадрид">MAD</ArrAirp> | ||
− | <ArrTerminal | + | <ArrTerminal>4</ArrTerminal> |
− | <OpAirline> | + | <OpAirline>IB</OpAirline> |
− | <OpAirlineName> | + | <OpAirlineName>Iberia</OpAirlineName> |
− | <MarkAirline> | + | <OpAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F2895-ddf1fddccc18d7c343a1d84216e3f183.svg</OpAirlineLogo> |
− | <MarkAirlineName> | + | <MarkAirline>IG</MarkAirline> |
− | <FlightNumber> | + | <MarkAirlineName>Meridiana</MarkAirlineName> |
− | <AircraftName/> | + | <MarkAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F4667-99e77869a19199f2092673d3d2e58cc7.gif</MarkAirlineLogo> |
− | <AircraftType> | + | <FlightNumber>9265</FlightNumber> |
− | <DepDateTime> | + | <AircraftName>Аэробус 320</AircraftName> |
− | <ArrDateTime> | + | <AircraftType>320</AircraftType> |
+ | <DepDateTime>2018-04-23T07:10:00</DepDateTime> | ||
+ | <ArrDateTime>2018-04-23T09:30:00</ArrDateTime> | ||
<StopNum>0</StopNum> | <StopNum>0</StopNum> | ||
+ | <StopPoints/> | ||
<BookingCodes> | <BookingCodes> | ||
<BookingCode ClassType="economy"> | <BookingCode ClassType="economy"> | ||
− | <BookingCode> | + | <BookingCode>Y</BookingCode> |
</BookingCode> | </BookingCode> | ||
</BookingCodes> | </BookingCodes> | ||
<FlightTime>140</FlightTime> | <FlightTime>140</FlightTime> | ||
− | <RemainingSeats> | + | <RemainingSeats>9</RemainingSeats> |
− | <TimeZone Departure=" | + | <TimeZone Departure="2" Arrival="2"/> |
<ETicket>true</ETicket> | <ETicket>true</ETicket> | ||
+ | <isCharter>false</isCharter> | ||
+ | <BaggageAllowances> | ||
+ | <BaggageAllowance> | ||
+ | <PassengerType>ADT</PassengerType> | ||
+ | <Value>1</Value> | ||
+ | <Measurement>pc</Measurement> | ||
+ | </BaggageAllowance> | ||
+ | </BaggageAllowances> | ||
</Segment> | </Segment> | ||
</Segments> | </Segments> | ||
<PricingInfo Refundable="false"> | <PricingInfo Refundable="false"> | ||
<PassengerFare Type="ADT" Quantity="1"> | <PassengerFare Type="ADT" Quantity="1"> | ||
− | <BaseFare Currency=" | + | <TravellerRef xsi:nil="true"/> |
− | <EquiveFare Currency=" | + | <BaseFare Currency="KZT" Amount="544092"/> |
− | <TotalFare Currency=" | + | <EquiveFare Currency="KZT" Amount="544092"/> |
+ | <TotalFare Currency="KZT" Amount="631024"/> | ||
<Taxes> | <Taxes> | ||
− | <Tax CurCode=" | + | <Tax CurCode="KZT" TaxCode="XT" Amount="86932"/> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</Taxes> | </Taxes> | ||
<Tariffs> | <Tariffs> | ||
− | <Tariff Code=" | + | <Tariff Code="BFO" SegNum="1"> |
− | <Tariff Code=" | + | <FareFamilies/> |
− | <Tariff Code=" | + | </Tariff> |
+ | <Tariff Code="WLPREDME" SegNum="2"> | ||
+ | <FareFamilies/> | ||
+ | </Tariff> | ||
+ | <Tariff Code="YFLEX" SegNum="3"> | ||
+ | <FareFamilies/> | ||
+ | </Tariff> | ||
</Tariffs> | </Tariffs> | ||
− | <FareCalc | + | <FareCalc/> |
− | + | <LastTicketDateTime>2018-04-03T23:59:00</LastTicketDateTime> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <LastTicketDateTime> | ||
</PassengerFare> | </PassengerFare> | ||
</PricingInfo> | </PricingInfo> | ||
<Commission/> | <Commission/> | ||
− | <Charges Currency="RUB"> | + | <Charges Currency="RUB">330.66</Charges> |
− | <TotalPrice Currency="RUB"> | + | <TotalPrice Currency="RUB">112935</TotalPrice> |
</Flight> | </Flight> | ||
......... | ......... |
Текущая версия на 16:10, 8 октября 2020
Содержание
Подключение
Это сервис внутри Nemo, который позволяет получить результаты поиска.
Для подключения к веб-службе поиска авиабилетов необходимо открыть доступ нужному пользователю. Это можно сделать в разделе «Настройки системы» ⇨ «Интеграция» ⇨ «Nemo (SOAP API)».
После добавления пользователя, ему будут присвоены Номер (ClientId) и API ключ клиента, которые нужно использовать для подключения.
WSDL находится по адресу: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=SearchFlights
Общий формат запроса / ответа поиска
Запрос
Ответ
В ссылках на просмотр страницы результата поиска и на бронирование конкретного перелета, домен агентства/субагентства определяется следующим образом:
- Если текущий домен агентства/субагентства есть в настройках (Управление сайтом ⇨ Домены и протоколы ⇨ Доменное имя сайта для загрузки настроек), то этот домен используется в ссылках.
- Если текущего домена нет в настройках, то используется первый домен из настроек.
- Если в настройках не прописано ни одного домена, то используется текущий домен.
На поиск действуют ограничения заданные в настройках агентства, в частности ограничения по пассажирам и ограничение ближайшей разрешенной даты поиска билетов.
- Если дата поиска меньше ближайшей разрешенной даты для поиска билетов, то выводится сообщение об ошибке Invalid search param: Неверная дата вылета: слишком близкая
- Если количество взрослых пассажиров превышает допустимое ограничение - Invalid search param: Слишком много взрослых
- Если количество детей в поисковом запросе превышает допустимое ограничение - Invalid search param: Слишком много детей
- Если количество младенцев в поисковом запросе превышает допустимое ограничение - Invalid search param: Слишком много инфантов
- Если количество младенцев с местом в поисковом запросе превышает допустимое ограничение - Invalid search param: Слишком много инфантов
Примечание:
Если в запросе поиска указать PriceRefundType = “Both”, то для всех ГРС кроме Sabre будет отправляться 2 запроса. Если количество доп. цен в БФМ запросе в Сейбре больше 10, то и в нем будет 2 запроса. Количество доп. цен в запросе зависит от:
- Настроек прайсинга по альтернативным J типам в пакете реквизитов;
- Количества запрошенных классов перелетов;
- Количества запрошенных типов пассажиров;
- Настройки "Дополнительно запросить только публичные тарифы" в применявшемся правила маршрутизатора.
Примеры использования
Односторонний перелет
Пример одностороннего перелета: Москва — Санкт-Петербург, 1 взрослый, эконом класс, предпочитаемая авиакомпания — ЮТэйр.
Запрос
Ответ
Перелет туда-обратно
Пример перелета туда-обратно: Москва — Париж, 2 взрослых, бизнес класс. Выдача с именами авиакомпаний, воздушных судов, аэропортов.
Запрос
Ответ
Сложный маршрут
Пример сложного маршрута: Прага — Москва — Милан — Мадрид, 1 взрослый, 1 младенец, эконом класс. Выдача с именами авиакомпаний, воздушных судов, аэропортов.