Веб-служба поиска авиабилетов: различия между версиями
(→Сложный маршрут) |
(→Сложный маршрут) |
||
Строка 895: | Строка 895: | ||
<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> | ||
Строка 901: | Строка 901: | ||
<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> |
− | < | + | <OpAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F3869-a73427f1141d3a37e1523c6193140a5d.svg</OpAirlineLogo> |
− | < | + | <MarkAirline>SU</MarkAirline> |
− | < | + | <MarkAirlineName>Аэрофлот</MarkAirlineName> |
− | + | <MarkAirlineLogo>http%3A%2F%2FCLIEN_DOMAIN%2FguideStatic%2Fimages%2Fcarrier%2Flogotype%2F3869-a73427f1141d3a37e1523c6193140a5d.svg</MarkAirlineLogo> | |
− | + | <FlightNumber>2017</FlightNumber> | |
− | + | <AircraftName>Airbus A320 (with Sharklets)</AircraftName> | |
− | < | + | <AircraftType>32A</AircraftType> |
− | + | <DepDateTime>2018-04-09T01:00:00</DepDateTime> | |
− | + | <ArrDateTime>2018-04-09T04:30:00</ArrDateTime> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <FlightNumber> | ||
− | <AircraftName>Airbus | ||
− | <AircraftType> | ||
− | <DepDateTime> | ||
− | <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=" | + | <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 | + | <FareFamilies/> |
− | <Tariff Code=" | + | </Tariff> |
− | + | <Tariff Code="WLPREDME" SegNum="2"> | |
− | + | <FareFamilies/> | |
− | + | </Tariff> | |
− | + | <Tariff Code="YFLEX" SegNum="3"> | |
− | + | <FareFamilies/> | |
− | + | </Tariff> | |
− | |||
− | |||
− | |||
− | |||
− | <Tariff Code=" | ||
− | |||
− | <Tariff | ||
</Tariffs> | </Tariffs> | ||
− | <FareCalc | + | <FareCalc/> |
− | <LastTicketDateTime> | + | <LastTicketDateTime>2018-04-03T23:59:00</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> | ||
......... | ......... |
Версия 12:31, 2 апреля 2018
Содержание
Подключение
Это сервис внутри Nemo, который позволяет получить результаты поиска.
Для подключения к веб-службе поиска авиабилетов необходимо открыть доступ нужному пользователю. Это можно сделать в разделе «Администрирование» ⇨ «Веб-служба. Авторизация».
После добавления пользователя, ему будут присвоены Номер (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 младенец, эконом класс. Выдача с именами авиакомпаний, воздушных судов, аэропортов.