ПОДПИСЫВАЙТЕСЬ НА НАШ ТЕЛЕГРАМ-КАНАЛ @nemo_travel_official

Веб-служба выписки: различия между версиями

Материал из Центр поддержки системы бронировании
Перейти к навигации Перейти к поиску
(Общий формат запроса / ответа выписки)
(Информация)
 
(не показаны 32 промежуточные версии 12 участников)
Строка 1: Строка 1:
 +
{{Attention|В системе реализован усовершенствованный API-проект «Nemo Connect», настоятельно рекомендуем подключаться по схеме, описанной в документации по [http://docs.nemo.travel/ ссылке]}}
 +
 +
[[Категория:Интеграция]]
 +
[[Категория:Агентский API]]
 +
<!-- -->
 
== Информация ==
 
== Информация ==
  
 
Агентский АПИ выписки позволяет определить валидирующего перевозчика и значение комиссии от авиакомпании для брони, а также запустить процедуру выписки билета.
 
Агентский АПИ выписки позволяет определить валидирующего перевозчика и значение комиссии от авиакомпании для брони, а также запустить процедуру выписки билета.
  
Как правило для выписки билета достаточно чтобы у заказа был статус "Оплачено". При включенной опции '''''«Для успешных бронирований производить оформление: автоматически после изменения статуса на "Оплачено"''''' из раздела '''«Заказы»''' ⇨ '''«Настройки бронирования»''' билет будет автоматически выписан после оплаты. Однако, это не является обязательным условием, так как реализован дополнительный функционал, предоставляющий возможность получения выписки билета, не требующей оплаты. Такая опция реализована настройкой '''''«Допустимые ip адреса»''''' в разделе '''''«Администрирование»''' ⇨ '''«Веб-сервисы»''''', определяющей диапазон ip-адресов, для которых будет доступно получение выписки без оплаты. IP-адреса имеют следующий допустимый формат: 125.125.25.5/8, то есть возможно задавать с маской подсети. При этом если диапазон допустимых ip-адресов не задан, то выписка билета, не требующая оплаты, будет допустима всем.
+
Как правило для выписки билета достаточно чтобы у заказа был статус «Оплачено». При включенной опции {{Setting|Для успешных бронирований производить оформление: автоматически после изменения статуса на «Оплачено»}} из раздела '''Для техподдержки → Устаревшие настройки → Настройки бронирования''' билет будет автоматически выписан после оплаты. Однако, это является обязательным условием только для пользователей, имеется возможность получения выписки билета, не требующей оплаты, для этого необходимо чтобы у АПИ пользователя были соответствующие права. К примеру, АПИ учётка должна быть заведена на менеджера агентства.
  
В Nemo 2.0 в агентский сервис (интерфейс к серверу бронирования) добавлены дополнительные настройки для выписки авиабилетов. В новой версии АПИ позволяет:
+
Дополнительно была реализована настройка {{Setting|Допустимые IP адреса}} в разделе '''Настройки системы → Интеграция → Nemo 1.0 (SOAP API)''' , определяющая диапазон IP-адресов  для дополнительной защиты учётных записей, под которыми происходит выписка билета без оплаты или фиксации оплаты. IP-адреса имеют следующий допустимый формат: <syntaxhighlight lang="text" enclose="none" style="font-size: 1em; padding: 0 3px; background: #F0F0F0; border: 1px dashed #2F6FAB;">125.125.25.5/8</syntaxhighlight>, то есть возможно задавать с маской подсети. Выполнение запроса Ticketing без оплаты возможно только при работе под менеджером головного агентства, либо в случае использования значения "CC" в элементе PassengerFops.
 +
 
 +
{{Attention|При отсутствии в нашей системе данных о локаторе брони в системе авиакомпании операция выписки невозможна. Поэтому в ответе на запрос Ticketing может возвращаться ошибка вида «Запрошенная операция не разрешена для данного объекта».
 +
В случае отсутствия на стороне GDS данных о локаторе брони в системе авиакомпании, в параметре Segments.Segment.SupplierCode в ответе на запрос BookFlight будет возвращено пустое значение. В этом случае необходимо произвести отправку запроса [[Дополнительные_запросы_АПИ_авиабилетов#.D0.97.D0.B0.D0.BF.D1.80.D0.BE.D1.81_.D0.BD.D0.B0_.D0.BE.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B7.D0.B0.D0.BA.D0.B0.D0.B7.D0.B0 | UpdateBook]] несколько раз, пока  на стороне GDS информация не будет получена о локаторе брони в системе авиакомпании. После этого наша система получит от GDS данное значение. Запрос выписки билетов может быть отправлен только после того, как в параметре Segments.Segment.SupplierCode в ответе от Агентского API Nemo 1 будет получено ненулевое значение.}}
 +
 
 +
В {{NameProject2}} в агентский сервис (интерфейс к серверу бронирования) добавлены дополнительные настройки для выписки авиабилетов. В новой версии АПИ позволяет:
 
   
 
   
* сообщать ВП (валидирующего перевозчика) по данной комбинации;
+
* сообщать ВП (валидирующего перевозчика) по данной комбинации
 
* сообщать комиссию по данной комбинации;
 
* сообщать комиссию по данной комбинации;
 
* сообщать эндорсменты по данной комбинации;
 
* сообщать эндорсменты по данной комбинации;
 
* принимать запрос на тикетинг;
 
* принимать запрос на тикетинг;
* проверять наличие брони в ГДС;
+
* проверять наличие брони в ГРС;
 
* синхронизировать бронь;
 
* синхронизировать бронь;
 
* выписывать билет;
 
* выписывать билет;
Строка 18: Строка 28:
  
 
== Общий формат запроса / ответа выписки ==
 
== Общий формат запроса / ответа выписки ==
Данный запрос запускается после оплаты заказа, может быть запущен как в ручном режиме — пользователем, у которого есть на это права, так и автоматически. Выписать неоплаченный заказ через Nemo возможности нет. При запуске запроса на выписку также запускается процесс обновления заказа, в ходе которого сверяется цена и остальные параметры заказа, а также проверяется его актуальность. Заказы, с истекшим таймлимитом выписать нельзя.
+
Данный запрос запускается после оплаты заказа, может быть запущен как в ручном режиме — пользователем, у которого есть на это права, так и автоматически. Выписать не оплаченный заказ через {{NameSystem}} можно только с определенный IP-адресов, список которых настраивается в разделе настроек, описанном выше. При запуске запроса на выписку также запускается процесс обновления заказа, в ходе которого сверяется цена и остальные параметры заказа, а также проверяется его актуальность. Заказы с истекшим таймлимитом выписать нельзя.
  
 
WSDL: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=Ticketing
 
WSDL: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=Ticketing
Строка 34: Строка 44:
 
               <Ticketing>
 
               <Ticketing>
 
                   <BookID>?</BookID>
 
                   <BookID>?</BookID>
                   <!--BookID — Id заказа в системе Nemo-->
+
                   <!--BookID — Id заказа в системе nemo.travel-->
 
                   <ValCompany>?</ValCompany>
 
                   <ValCompany>?</ValCompany>
 
                   <!--ValCompany — валидирующий перевозчик (тот кто выписывает билет)-->
 
                   <!--ValCompany — валидирующий перевозчик (тот кто выписывает билет)-->
Строка 47: Строка 57:
 
                     <PassengerFop>
 
                     <PassengerFop>
 
                         <PassengerId>?</PassengerId>
 
                         <PassengerId>?</PassengerId>
                         <!--PassengerId - порядковый номер пассажира в перелете-->
+
                         <!--PassengerId порядковый номер пассажира в перелете-->
 
                         <Fops>
 
                         <Fops>
 
                           <!--Zero or more repetitions:-->
 
                           <!--Zero or more repetitions:-->
 
                           <Fop>
 
                           <Fop>
 
                               <Type>?</Type>
 
                               <Type>?</Type>
                               <!--Type - форма оплаты: CC (по кредитной карте) или СА (наличными)-->
+
                               <!--Type форма оплаты: CC (по кредитной карте) или СА (наличными)-->
 
                               <Money Currency="?">?</Money>
 
                               <Money Currency="?">?</Money>
                               <!--Money - сумма платежа-->
+
                               <!--Money сумма платежа-->
                               <!--Currency - код валюты-->
+
                               <!--Currency код валюты-->
 
                               <VendorCode>?</VendorCode>
 
                               <VendorCode>?</VendorCode>
                               <!--VendorCode - код типа карты: (например, VI - Visa,  
+
                               <!--VendorCode код типа карты: (например, VI Visa,  
                                                                           MC - MasterCard,  
+
                                                                           MC MasterCard,  
                                                                           AX - American Express
+
                                                                           AX American Express
                                                                           DC - DCL,
+
                                                                           DC DCL,
                                                                           CA - EURO,
+
                                                                           CA EURO,
                                                                           IK - EURO,
+
                                                                           IK EURO,
                                                                           JB - JCB,
+
                                                                           JB JCB,
                                                                           JC - JCB,
+
                                                                           JC JCB,
                                                                           BA - Visa)-->
+
                                                                           BA Visa)-->
 
                               <Number>?</Number>
 
                               <Number>?</Number>
                               <!--Number - номер карты-->
+
                               <!--Number номер карты-->
 
                               <ExpireDate>?</ExpireDate>
 
                               <ExpireDate>?</ExpireDate>
                               <!--ExpireDate - срок действия карты, например 12.2020-->
+
                               <!--ExpireDate срок действия карты, например 12.2020-->
 
                               <ManualApprovalCode>?</ManualApprovalCode>
 
                               <ManualApprovalCode>?</ManualApprovalCode>
                               <!--ManualApprovalCode - Код преавторизации транзакции, по которой были заблокированы средства для выписки. Это НЕ CVV код. Необязательный. Если не указан, то он будет автоматически получен нашей системой через GDS/-->
+
                               <!--ManualApprovalCode - Код преавторизации транзакции, по которой были заблокированы средства для выписки. Это НЕ CVV код. Необязательный. Если не указан, то он будет автоматически получен нашей системой через ГРС/-->
 
                           </Fop>
 
                           </Fop>
 
                         </Fops>
 
                         </Fops>
Строка 80: Строка 90:
 
                     <DataItem>
 
                     <DataItem>
 
                         <Type>Remark</Type>
 
                         <Type>Remark</Type>
                         <!--Type - тип контента в данном блоке, например: Meal, Remark-->
+
                         <!--Type тип контента в данном блоке, например: Meal, Remark-->
 
                         <Remark>
 
                         <Remark>
 
                           <Type>?</Type>
 
                           <Type>?</Type>
                           <!--Type - тип ремарки, например: General, Historical-->
+
                           <!--Type тип ремарки, например: General, Historical-->
 
                           <Text>?</Text>
 
                           <Text>?</Text>
                           <!--Text - содержание ремарки-->
+
                           <!--Text содержание ремарки-->
 
                         </Remark>
 
                         </Remark>
 
                     </DataItem>
 
                     </DataItem>
Строка 93: Строка 103:
 
             <Source>
 
             <Source>
 
               <ClientId>?</ClientId>
 
               <ClientId>?</ClientId>
               <!--ClientId — ID клиента в системе Nemo. Можно посмотреть/добавить в разделе
+
               <!--ClientId — ID клиента в системе nemo.travel. Можно посмотреть/добавить в разделе
               "Администрирование" ⇨ "Веб-служба. Авторизация".-->
+
               «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
 
               <APIKey>?</APIKey>
 
               <APIKey>?</APIKey>
               <!--APIKey — секретный ключ доступа к API Nemo. Можно посмотреть/добавить в разделе
+
               <!--APIKey — секретный ключ доступа к API nemo.travel. Можно посмотреть/добавить в разделе
               "Администрирование" ⇨ "Веб-служба. Авторизация".-->
+
               «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
 
               <Language>?</Language>
 
               <Language>?</Language>
 
               <!--Language — язык, например: RU-->
 
               <!--Language — язык, например: RU-->
Строка 122: Строка 132:
 
             <Response>
 
             <Response>
 
               <Ticketing ID="?" Status="?" Code="?">
 
               <Ticketing ID="?" Status="?" Code="?">
               <!--ID — Id брони в системе Nemo, целое число, обязательный-->
+
               <!--ID — Id брони в системе nemo.travel, целое число, обязательный-->
 
               <!--Status — индикатор состояния брони, возможные значения:
 
               <!--Status — индикатор состояния брони, возможные значения:
 
                                                 booked — забронировано,
 
                                                 booked — забронировано,
Строка 132: Строка 142:
 
                   <!--QueryPlace — положение брони в очереди, Number — номер брони в очереди-->
 
                   <!--QueryPlace — положение брони в очереди, Number — номер брони в очереди-->
 
                   <Flight FlightId="?">
 
                   <Flight FlightId="?">
                   <!--FlightId — Id перелёта в системе Nemo-->
+
                   <!--FlightId — Id перелёта в системе nemo.travel-->
 
                     <WebService>?</WebService>
 
                     <WebService>?</WebService>
 
                     <!--WebService — поставщик перелёта-->
 
                     <!--WebService — поставщик перелёта-->
Строка 143: Строка 153:
 
                         <!--SegNum — номер сегмента в перелёте-->
 
                         <!--SegNum — номер сегмента в перелёте-->
 
                         <!--SegGroupNum – номер плеча перелёта-->
 
                         <!--SegGroupNum – номер плеча перелёта-->
 +
                          <SupplierCode>?</SupplierCode>
 +
                          <!--SupplierCode – номер заказа в системе АК-->
 
                           <DepAirp CodeType="IATA">?</DepAirp>
 
                           <DepAirp CodeType="IATA">?</DepAirp>
 
                           <!--DepAirp — аэропорт отправления, например: MOW — любой аэропорт в г.Москва
 
                           <!--DepAirp — аэропорт отправления, например: MOW — любой аэропорт в г.Москва
Строка 163: Строка 175:
 
                           <!--FlightNumber — номер рейса-->
 
                           <!--FlightNumber — номер рейса-->
 
                           <AircraftName>?</AircraftName>
 
                           <AircraftName>?</AircraftName>
                           <!--AircraftName - наименование воздушного судна-->
+
                           <!--AircraftName наименование воздушного судна-->
 
                           <AircraftType>?</AircraftType>
 
                           <AircraftType>?</AircraftType>
 
                           <!--AircraftType — тип воздушного судна, код-->
 
                           <!--AircraftType — тип воздушного судна, код-->
Строка 172: Строка 184:
 
                           <StopNum>?</StopNum>
 
                           <StopNum>?</StopNum>
 
                           <!--StopNum — количество остановок-->
 
                           <!--StopNum — количество остановок-->
 +
                          <StopPoints>
 +
                          <!--StopPoints — информация о технических остановках, если они есть-->
 +
                              <StopPoint>
 +
                                <AirportCode>?</AirportCode>
 +
                                <!--AirportCode — код аэропорта остановки, трех символьный iata код-->
 +
                                <UTC>?</UTC>
 +
                                <!--UTC — сдвиг часового пояса аэропорта-->
 +
                                <ArrDateTime>?</ArrDateTime>
 +
                                <!--ArrDateTime — дата и время прибытия, формат ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                                <DepDateTime>?</DepDateTime>
 +
                                <!--DepDateTime — дата и время отправления, формат ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                              </StopPoint>
 +
                          </StopPoints>
 
                           <BookingCodes>
 
                           <BookingCodes>
 
                               <BookingCode ClassType="?">
 
                               <BookingCode ClassType="?">
Строка 187: Строка 212:
 
                           <ETicket>?</ETicket>
 
                           <ETicket>?</ETicket>
 
                           <!--ETicket — признак электронного билета, значения: true / false-->
 
                           <!--ETicket — признак электронного билета, значения: true / false-->
 +
                          <isCharter>?</isCharter>
 +
                          <!--isCharter — признак чартерного перелета, значения: true / false-->
 +
                          <BaggageAllowances>
 +
                          <!--BaggageAllowances — информация о багаже-->
 +
                              <BaggageAllowance>
 +
                                <PassengerType>?</PassengerType>
 +
                                <!--PassengerType — тип пассажира, соответстует типу тарифа в PricingInfo -->
 +
                                <Value>?</Value>
 +
                                <!--Value — количество-->
 +
                                <Measurement>?</Measurement>
 +
                                <!--Measurement — мера измерения, может принимать значения: kg — килограмм, pc — багажное место, lb — фунт-->
 +
                              </BaggageAllowance>
 +
                          </BaggageAllowances>
 
                         </Segment>
 
                         </Segment>
 
                     </Segments>
 
                     </Segments>
Строка 192: Строка 230:
 
                     <!--Refundable — возвратный/невозвратный, true/false. Если пустое, то не известно-->
 
                     <!--Refundable — возвратный/невозвратный, true/false. Если пустое, то не известно-->
 
                         <PassengerFare Type="?" Quantity="?">
 
                         <PassengerFare Type="?" Quantity="?">
                         <!--Type — тип пассажира, возможные значения: ADT — взрослые, CNN — дети,
+
                         <!--Type — тип тарифа-->
                        INF — младенцы, INS — младенцы с местом-->
 
 
                         <!--Quantity — количество пассажиров данного типа-->
 
                         <!--Quantity — количество пассажиров данного типа-->
 
                           <BaseFare Currency="?" Amount="?"/>
 
                           <BaseFare Currency="?" Amount="?"/>
Строка 214: Строка 251:
 
                           <!--FareCalc — строка расчёта цены-->
 
                           <!--FareCalc — строка расчёта цены-->
 
                           <LastTicketDateTime>?</LastTicketDateTime>
 
                           <LastTicketDateTime>?</LastTicketDateTime>
                           <!--LastTicketDateTime — дата и время таймлимита по выписке в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
+
                           <!--LastTicketDateTime — дата и время таймлимита по выписке в формате ГГГГ-MM-ДДTЧЧ:ММ:СС. Если включена настройка "Применение временной зоны - Для расчетов таймлимитов в агентском API", дата и время таймлимита будут переведены во временную зону пользователя. При отключенной настройке по умолчанию дата и время будут в Московском часовом поясе.-->
 
                         </PassengerFare>
 
                         </PassengerFare>
 
                     </PricingInfo>
 
                     </PricingInfo>
Строка 251: Строка 288:
 
                     <Transaction>
 
                     <Transaction>
 
                         <Id>?</Id>
 
                         <Id>?</Id>
                         <!--Id - номер транзакции в Немо-->
+
                         <!--Id номер транзакции в Немо-->
 
                         <Status>?</Status>
 
                         <Status>?</Status>
                         <!--Status - статус транзакции-->
+
                         <!--Status статус транзакции-->
 
                         <GatewayName>?</GatewayName>
 
                         <GatewayName>?</GatewayName>
                         <!--GatewayName - название платежного шлюза-->
+
                         <!--GatewayName название платежного шлюза-->
 
                         <MoneyPaid Currency="?">?</MoneyPaid>
 
                         <MoneyPaid Currency="?">?</MoneyPaid>
                         <!--MoneyPaid - сумма оплаты-->
+
                         <!--MoneyPaid сумма оплаты-->
                         <!--Currency - валюта-->
+
                         <!--Currency валюта-->
 
                         <PaymentDateTime>?</PaymentDateTime>
 
                         <PaymentDateTime>?</PaymentDateTime>
                         <!--PaymentDateTime - дата и время оплаты-->
+
                         <!--PaymentDateTime дата и время оплаты-->
 
                         <CreateDateTime>?</CreateDateTime>
 
                         <CreateDateTime>?</CreateDateTime>
                         <!--CreateDateTime - дата и время создания платежной транзакции-->
+
                         <!--CreateDateTime дата и время создания платежной транзакции-->
 
                         <Description/>
 
                         <Description/>
 
                     </Transaction>
 
                     </Transaction>
 
                   </PaymentTransactions>
 
                   </PaymentTransactions>
 
                   <PaymentStatus>?</PaymentStatus>
 
                   <PaymentStatus>?</PaymentStatus>
                   <!--PaymentStatus - статус оплаты:
+
                   <!--PaymentStatus статус оплаты:
 
                                         not_paid — не оплачено
 
                                         not_paid — не оплачено
 
                                         partly_paid — оплачено, частично
 
                                         partly_paid — оплачено, частично
Строка 281: Строка 318:
 
                     <!--Num — порядковый номер пассажира, начинается с 1-->
 
                     <!--Num — порядковый номер пассажира, начинается с 1-->
 
                     <!--LinkedTo — номер взрослого, к которому привязан младенец/ребёнок (привязка ребёнка ко взрослому является опциональной)-->
 
                     <!--LinkedTo — номер взрослого, к которому привязан младенец/ребёнок (привязка ребёнка ко взрослому является опциональной)-->
                    <!--TravellerId — устаревший параметр, не используется-->
+
                    <!--TravellerId — актуализированный номер пассажира, который возвращается в ответе на запрос бронирования и в дальнейшем ссылки на пассажиров даются на основании этого параметра-->
 
                         <Meal>?</Meal>
 
                         <Meal>?</Meal>
 
                         <!--Meal — код типа питания, возможные значения:
 
                         <!--Meal — код типа питания, возможные значения:
Строка 398: Строка 435:
 
                     </Traveller>
 
                     </Traveller>
 
                   </Travellers>
 
                   </Travellers>
 +
                  <AutoCancelDate>?</AutoCancelDate>
 +
                  <!--AutoCancelDate — дата и время таймлимита автоаннуляции в формате ГГГГ-MM-ДДTЧЧ:ММ:СС определяемые по настройкам агентства-->
 +
                  <TimeLimits>
 +
                    <TicketingTimeLimit>?</TicketingTimeLimit>
 +
                    <!--TicketingTimeLimit — Таймлимит на выписку в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                    <PriceTimeLimit>?</PriceTimeLimit>
 +
                    <!--PriceTimeLimit — Таймлимит цены из ГРС в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                    <AdvancedPurchaseTimeLimit>?</AdvancedPurchaseTimeLimit>
 +
                    <!--AdvancedPurchaseTimeLimit — Таймлимит цены из тарифных правил в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                    <AgencyTimeLimit>?</AgencyTimeLimit>
 +
                    <!--AgencyTimeLimit - Таймлимит по настройкам в формате ГГГГ-MM-ДДTЧЧ:ММ:СС-->
 +
                  </TimeLimits>
 
               </Ticketing>
 
               </Ticketing>
 
               <Requisites/>
 
               <Requisites/>
 
               <RequestType xsi:nil="true"/>
 
               <RequestType xsi:nil="true"/>
 
               <UserID xsi:nil="true"/>
 
               <UserID xsi:nil="true"/>
               <Error Code="E002205">Ошибка от поставщика.. UNABLE TO PROCESS - RETRY IN 15 MINUTES</Error>
+
               <Error Code="?">Сообщение об ошибке</Error>
 
             </Response>
 
             </Response>
 
         </ResponseBin>
 
         </ResponseBin>
Строка 408: Строка 457:
 
   </SOAP-ENV:Body>
 
   </SOAP-ENV:Body>
 
</SOAP-ENV:Envelope>
 
</SOAP-ENV:Envelope>
</syntaxhighlight>
 
</div>
 
</div>
 
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
 
 
==== Ответ с ошибками ====
 
<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;">
 
 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://release.mlsd.ru/nemoflights/?version%3D1.0%26for%3DTicketing">
 
  <SOAP-ENV:Body>
 
      <ns1:TicketingResponse>
 
        <ResponseBin>
 
            <Error Code="E002205">Ошибка от поставщика.. UNABLE TO PROCESS - RETRY IN 15 MINUTES</Error>
 
        </ResponseBin>
 
      </ns1:TicketingResponse>
 
  </SOAP-ENV:Body>
 
</SOAP-ENV:Envelope>
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div>
 
</div>
Строка 449: Строка 478:
 
               <VoidTicket>
 
               <VoidTicket>
 
                   <BookID>?</BookID>
 
                   <BookID>?</BookID>
                   <!--BookID — Id брони в системе Nemo, целое число-->
+
                   <!--BookID — Id брони в системе nemo.travel, целое число-->
 
               </VoidTicket>
 
               </VoidTicket>
 
             </Request>
 
             </Request>
 
             <Source>
 
             <Source>
 
               <ClientId>?</ClientId>
 
               <ClientId>?</ClientId>
               <!--ClientId — ID клиента в системе Nemo. Можно посмотреть/добавить в разделе
+
               <!--ClientId — ID клиента в системе nemo.travel. Можно посмотреть/добавить в разделе
               "Администрирование" ⇨ "Веб-служба. Авторизация".-->
+
               «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
 
               <APIKey>?</APIKey>
 
               <APIKey>?</APIKey>
               <!--APIKey — секретный ключ доступа к API Nemo. Можно посмотреть/добавить в разделе
+
               <!--APIKey — секретный ключ доступа к API nemo.travel. Можно посмотреть/добавить в разделе
               "Администрирование" ⇨ "Веб-служба. Авторизация".-->
+
               «Настройки системы» → «Интеграция» → «Nemo 1.0 (SOAP API)».-->
 
               <Language>?</Language>
 
               <Language>?</Language>
 
               <!--Language — язык, например: RU-->
 
               <!--Language — язык, например: RU-->
Строка 482: Строка 511:
 
             <Response>
 
             <Response>
 
               <VoidTicket BookID="?">
 
               <VoidTicket BookID="?">
               <!--BookID — Id брони в системе Nemo, целое число-->
+
               <!--BookID — Id брони в системе nemo.travel, целое число-->
 
                   <Result Success="?"/>
 
                   <Result Success="?"/>
 
                   <!--Sucscess — результат отмены выписки, true или false-->
 
                   <!--Sucscess — результат отмены выписки, true или false-->
Строка 489: Строка 518:
 
               <RequestType xsi:nil="true"/>
 
               <RequestType xsi:nil="true"/>
 
               <UserID xsi:nil="true"/>
 
               <UserID xsi:nil="true"/>
               <Errors xsi:nil="true"/>
+
               <Error Code="?">Сообщение об ошибке</Error>
 
             </Response>
 
             </Response>
 
         </ResponseBin>
 
         </ResponseBin>
Строка 495: Строка 524:
 
   </SOAP-ENV:Body>
 
   </SOAP-ENV:Body>
 
</SOAP-ENV:Envelope>
 
</SOAP-ENV:Envelope>
</syntaxhighlight>
 
</div>
 
</div>
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:1000px">
 
==== Ответ с ошибками====
 
<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;">
 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://release.mlsd.ru/nemoflights/?version%3D1.0%26for%3DVoidTicket">
 
  <SOAP-ENV:Body>
 
      <ns1:VoidTicketResponse>
 
        <ResponseBin>
 
            <Error Code="E002196">Запрошенная операция не разрешена для данного объекта</Error>
 
        </ResponseBin>
 
      </ns1:VoidTicketResponse>
 
  </SOAP-ENV:Body>
 
</SOAP-ENV:Envelope>
 
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</div>
 
</div>
Строка 518: Строка 530:
 
== См. также ==
 
== См. также ==
  
*[[Агентский АПИ]]
+
* [[Агентский API Авиабилеты]]
*[[Бронирование]]
+
* [[Бронирование]]
 
+
* [[Дополнительные запросы АПИ авиабилетов]]
[[Категория:Интеграция]]
 

Текущая версия на 17:09, 20 сентября 2022

Внимание! В системе реализован усовершенствованный API-проект «Nemo Connect», настоятельно рекомендуем подключаться по схеме, описанной в документации по ссылке

Информация

Агентский АПИ выписки позволяет определить валидирующего перевозчика и значение комиссии от авиакомпании для брони, а также запустить процедуру выписки билета.

Как правило для выписки билета достаточно чтобы у заказа был статус «Оплачено». При включенной опции Для успешных бронирований производить оформление: автоматически после изменения статуса на «Оплачено» из раздела Для техподдержки → Устаревшие настройки → Настройки бронирования билет будет автоматически выписан после оплаты. Однако, это является обязательным условием только для пользователей, имеется возможность получения выписки билета, не требующей оплаты, для этого необходимо чтобы у АПИ пользователя были соответствующие права. К примеру, АПИ учётка должна быть заведена на менеджера агентства.

Дополнительно была реализована настройка Допустимые IP адреса в разделе Настройки системы → Интеграция → Nemo 1.0 (SOAP API) , определяющая диапазон IP-адресов для дополнительной защиты учётных записей, под которыми происходит выписка билета без оплаты или фиксации оплаты. IP-адреса имеют следующий допустимый формат: 125.125.25.5/8, то есть возможно задавать с маской подсети. Выполнение запроса Ticketing без оплаты возможно только при работе под менеджером головного агентства, либо в случае использования значения "CC" в элементе PassengerFops.

Внимание! При отсутствии в нашей системе данных о локаторе брони в системе авиакомпании операция выписки невозможна. Поэтому в ответе на запрос Ticketing может возвращаться ошибка вида «Запрошенная операция не разрешена для данного объекта». В случае отсутствия на стороне GDS данных о локаторе брони в системе авиакомпании, в параметре Segments.Segment.SupplierCode в ответе на запрос BookFlight будет возвращено пустое значение. В этом случае необходимо произвести отправку запроса UpdateBook несколько раз, пока на стороне GDS информация не будет получена о локаторе брони в системе авиакомпании. После этого наша система получит от GDS данное значение. Запрос выписки билетов может быть отправлен только после того, как в параметре Segments.Segment.SupplierCode в ответе от Агентского API Nemo 1 будет получено ненулевое значение.

В Nemo Connect в агентский сервис (интерфейс к серверу бронирования) добавлены дополнительные настройки для выписки авиабилетов. В новой версии АПИ позволяет:

  • сообщать ВП (валидирующего перевозчика) по данной комбинации
  • сообщать комиссию по данной комбинации;
  • сообщать эндорсменты по данной комбинации;
  • принимать запрос на тикетинг;
  • проверять наличие брони в ГРС;
  • синхронизировать бронь;
  • выписывать билет;
  • передавать дополнительную информацию в ремарках;
  • войдировать билет.

Общий формат запроса / ответа выписки

Данный запрос запускается после оплаты заказа, может быть запущен как в ручном режиме — пользователем, у которого есть на это права, так и автоматически. Выписать не оплаченный заказ через Nemo.Travel можно только с определенный IP-адресов, список которых настраивается в разделе настроек, описанном выше. При запуске запроса на выписку также запускается процесс обновления заказа, в ходе которого сверяется цена и остальные параметры заказа, а также проверяется его актуальность. Заказы с истекшим таймлимитом выписать нельзя.

WSDL: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=Ticketing

развернуть

Запрос

развернуть

Ответ

Общий формат запроса / ответа войдирования

Данный запрос запускается после выписки билета, если необходимо его отменить.

WSDL: http://CLIENT_DOMAIN/nemoflights/wsdl.php?for=VoidTicket

развернуть

Запрос

развернуть

Ответ

См. также