Выгрузка деталей заказа по номеру (GetSimpleReserveByIdV2)
Агенту нет необходимости получать контекст клиента для выгрузки его заказов.
- 1 Приступая к работе
- 2 Пример запроса:
- 3 Структура ответа
- 4 Корневой элемент
- 5 Плательщик (контейнер Payer)
- 6 Файлы-вложения (контейнер Files)
- 7 Нарушения тревел-политик (контейнер Violations)
- 8 Информация о создателе заказа (узел Creator)
- 9 Пассажиры (контейнер Passengers)
- 10 Коды заказа (контейнер Codes)
- 11 Информация о командировке (элемент ComplexReserveReference)
- 12 Информация о дополнительных расходах
- 13 Имя бронирующего агента
- 14 Тест
- 15 SOAP 1.1
- 16 SOAP 1.2
Приступая к работе
Важно, чтобы служебный доступ, из-под которого делаются обращения к API, был:
Подписан на все типы заказов;
Подписан на все сервис-тимы.
В случае, если одно из условий будет нарушено, технический пользователь не увидит заказ и выгрузить его через API будет нельзя.
WSDL https://jv3.corteos.ru/XmlGate/V3/OrderManagement/OrdersAPI.asmx?WSDL
Для выгрузки заказа нам необходимо знать его номер (id_Reserve), который можно увидеть в:
Списке заказов:
В деталях заказа:
Пример запроса:
Примеры на github:
Структура ответа
Ответ состоит из следующих секций:
Унифицированные параметры заказа;
Специфические данные по услуге (разные для каждого типа услуги, не имеет фиксированной xsd-схемы);
Информация по самому дешевому варианту (может отсутствовать);
Информация по самому дорогому варианту (может отсутствовать);
Информация о создателе;
Информация о сервис-тиме, в который будет передан заказ;
Коды заказа;
Пассажиры;
Нарушения тревел-политик;
Файлы вложений;
Плательщик;
Информация о командировке, в которой находится данный заказ;
Имя бронирующего агента.
Корневой элемент
В нем содержатся универсальные параметры заказа, общие для любой услуги:
id_Reserve - номер заказа, который мы использовали для обращения к данному методу;
id_ComplexReserve - номер командировки, в которой содержится данный заказ;
ComplexReserveName - название командировки, в которой содержится данный заказ;
Locator - номер брони в системе поставщика (в данном примере - номер брони в системе Amadeus).
В некоторых заказах может быть две брони (например, перелет туда и обратно из двух one way) - в этом случае они будут написаны через "/": "N3V7NK/N3V7NY";Price - стоимость заказа со всеми сборами в рублях.
Детализацию по разбивке нужно смотреть уже внутри заказа, в OrderSpecificData;Header - заголовок заказа (обычно определяет маршрут);
Brief - краткое описание услуги, парсить ни в коем случае нельзя;
OrderTypeName - тип услуги, текстовое обозначение id_ReserveType;
id_ReserveType - идентификатор типа услуги;
id_AgentGroup - уникальный код агента-исполнителя;
id_ClientGroup - уникальный код группы компаний клиента-заказчика;
id_ServiceTeam - идентификатор сервис-тима, который обслуживает;
id_ReserveState - состояние заказа;
ReserveStateName - текстовое название состояния заказа;
DateCreate - дата создания заказа в формате SOAP DateTime.
Плательщик (контейнер Payer)
Содержит информацию о компании-плательщике по заказу, которого пользователь выбрал на шаге пребукинга:
В самом заказе выбранный плательщик виден в этой секции:
В XML этот элемент выглядит таким образом.
id_PayerOrganization - уникальный идентификатор организации-плательщика;
INN - ИНН плательщика;
KPP - КПП плательщика.
Рекомендуется либо хранить у себя в базе данных идентификатор организации в Corteos, либо сопоставлять их по паре "ИНН+КПП". Так как эти поля заводятся администратором агентства в Кортеос, а не берутся из каких-либо реестров, то там может быть любая информация: например, можно в ИНН писать номер контрагента в 1С или что-то подобное. При необходимости можно обратиться за платной консультацией по этому вопросу.
Номер организации можно найти в списке организаций в административных интерфейсах:
Файлы-вложения (контейнер Files)
Это могут быть как вложения, сделанные пользователем, так и автоматически сформированные файлы электронных билетов и ваучеров.
Выглядит это так:
Файлов может быть 0...n
id_File - уникальный идентификатор файла;
Caption - название файла;
Url - ссылка для загрузки файла;
IsTravelDocument - булевый признак, является ли файл файлом электронного билета;
TicketNumber - номер электронного билета (только для варианта "IsTravelDocument == true");
id_User - идентификатор пользователя системы, в контексте которого сформировано данное вложение (например, кто выписал электронный билет).
id_FileType - идентификатор типа файла, указывает на тип файла в соответствии с таблицей.
Нарушения тревел-политик (контейнер Violations)
Список всех нарушений политики с описаниями конкретных деталей нарушения.
В интерфейсе список нарушений можно найти в деталях заказа в блоке "Нарушена тревел-политика":
Нарушений может быть 0...n
id_Violation - уникальный идентификатор записи о нарушении ТП;
id_Policy - идентификатор нарушенной тревел-политики;
TravelPolicyName - название нарушенной ТП;
ViolationTextEnglish/Russian - описание нарушения на определенном языке.
Уникальный идентификатор тревел-политики и её название можно найти в интерфейсе в списке тревел-политик:
Информация о создателе заказа (узел Creator)
Здесь содержится информация о пользователе, который создал данный заказ. В интерфейсе эта информация содержится в той же секции, что и плательщик:
В XML этот элемент выглядит так:
id_Client - идентификатор клиента-инициатора;
id_Group - идентификатор компании инициатора. Не является идентификатором договора - по факту, это id_CustomerGroup;
Email - электронная почта инициатора;
LastName - фамилия инициатора;
FirstName - имя инициатора.
Пассажиры (контейнер Passengers)
Это список персон, которые участвуют в данном заказе.
В интерфейсе пассажиров можно найти в деталях заказа:
В XML элемент выглядит таким образом:
id_Passenger - уникальный номер пассажира (ключ, который соответствует паре "номер заказа - идентификатор персоны");
id_Person - уникальный идентификатор персоны;
FirstName - имя пассажира на русском языке;
LastName - фамилия пассажира на русском языке;
FirstNameLatin - имя пассажира на английском;
LastNameLatin - фамилия пассажира на английском;
SurName - отчество пассажира на русском;
DocumentType - тип документа;
passport - национальный паспорт;
foreignpassport - заграничный паспорт;
birthcertificate - свидетельство о рождении;
DocumentNumber - номер документа, по которому летит пассажир (например, серия и номер паспорта РФ);
id_Document - уникальный идентификатор документа;
id_MileCard - уникальный идентификатор мильной карты.
Мильная карта и документ требуются не для всех услуг, поэтому поля, с ними связанные, могут быть пустыми, это следует предусмотреть при разработке.
Также для командировок в статусе "Чистовик" и выше показываются структурные и структурные меняемые коды пассажиров (секция Codes) с привязкой к заказу. Данная секция совпадает по структуре с аналогичной секцией у заказа и будет расписана ниже.
Коды заказа (контейнер Codes)
Данный контейнер используется только в заказах, которые содержатся в командировках в статусе "Чистовик" и выше. Для командировок-черновиков этот контейнер пустой, так как клиент выбирает коды непосредственно перед переводом командировки в чистовик. В интерфейсе коды заказов отображаются в деталях заказа:
В данном контейнере находятся:
ризон-коды;
бюджетные коды с типом привязки "к заказу":
Элемент контейнера (StableCode) состоит из следующих полей:
id_MetaCode - уникальный идентификатор кода в БД;
id_MetaDictionary - уникальный идентификатор справочника кодов;
CodeValue - значение кода(обычно уникально в рамках справочника, но это не гарантируется системой);
DictionaryName - название справочника кодов;
DictionaryType - тип справочника. Возможны следующие варианты:
Budget - бюджетные коды;
StructuralPersonal - структурные коды пассажиров;
PolicyRulesRttached - автоматически проставленные коды нарушений ТП (привязанные к правилам);
ChangeableStructuralPersonal - меняемые структурные коды;
TravelpolicyViolationBudget - ризон-коды.
Информация о командировке (элемент ComplexReserveReference)
В Кортеос все заказы привязаны к определенной командировке.
В этом элементе содержатся данные о командировке, в которой находится данный заказ:
где:
id_ComplexReserve="757980" - уникальный идентификатор командировки;
Name="Санкт-Петербург" - название командировки, указанное пользователем на шаге пребукинга;
id_ClientCreator="113" - идентификатор пользователя-инициатора командировки;
CreationDate="2019-07-03T15:27:51.49" - дата и время создания командировки;
CurrentState="Finished" - статус командировки:
Draft - черновик;
Authorizing - сейчас идет авторизация;
Cleancopy - чистовик;
ForExecution - на исполнении у агента (это значит, что часть заказов данной командировки требуют ручной обработки);
Canceled - отменена (все заказы отменены);
Finished - выполнена (все заказы выполнены или отменены).
Codes - контейнер кодов с привязкой к командировке, доступно только для командировок в статусе выше черновика.
Информация о забронированной услуге, о самом дешевом и самом дорогом вариантах
Информация о забронированной услуге - OrderSpecificData;
Самый дешевый вариант - MostCheapVariant;
Самый дорогой вариант - MostExpensiveVariant.
Данные элементы не имеют фиксированной структуры и приходят в формате XML, который определяется типом услуги. В том случае, если такое XML-представление отсутствует (например, в ж/д не фиксируется дорогóй и дешевый варианты), то в элементе находится узел NotAvailable:
Структура авиазаказа: https://preprd.avia.corteos.ru/Home/ObjectModel#headerMultiItinerary
Структура заказа отелей: ExtendedBooking
Структура заказа трансферов: Выгрузка заказа трансферов
Структура ж/д заказа описана ниже.
Элемент OrderContainer - контейнер специфичных данных по заказу ж/д билетов:
id_Order | атрибут | int | Идентификатор заказа в системе поставщика |
id_RootTransaction | атрибут | int | Идентификатор родительской транзакции |
OrderItems | элемент | Контейнер сегментов заказа (см. таблицу "Элемент OrderItems") |
Элемент OrderItems - контейнер сегментов заказа:
id_Order | атрибут | int | Идентификатор заказа в системе поставщика |
id_Transaction | атрибут | int | Идентификатор транзакции в системе поставщика |
ReservationDate | атрибут | DateTime | Дата создания заказа |
ReservationType | атрибут | int | Текущий тип бронированияМожет принимать одно из следующих значений 0 - 15 минут;1 - 3 часа. |
IsPossibleThreeHoursReservation | атрибут | bool | Признак доступности трехчасового бронирования |
SegmentType | атрибут | int | Тип сегмента Может принимать одно из следующих значений: 9 - Ж/Д сегмент, направление "Туда ";17 - Ж/Д сегмент, направление "Обратно". |
TrainDepartureStationCode | атрибут | string | Код начальной станции отправления поезда |
TrainDepartureStationName | атрибут | string | Название начальной станции отправления поезда |
TrainArrivalStationCode | атрибут | string | Код конечной станции прибытия поезда |
TrainArrivalStationName | атрибут | string | Название конечной станции прибытия поезда |
PassengerDepartureStationCode | атрибут | string | Код станции отправления пассажира |
PassengerDepartureStationName | атрибут | string | Название станции отправления пассажира |
PassengerArrivalStationCode | атрибут | string | Код станции прибытия пассажира |
PassengerArrivalStationName | атрибут | string | Название станции прибытия пассажира |
Date | атрибут | DateTime | Дата и время отправления поезда |
LocalDate | атрибут | DateTime | Дата и время отправления поезда по местному времени |
ArrivalDate | атрибут | DateTime | Дата и время прибытия поезда |
LocalArrivalDate | атрибут | DateTime | Дата и время прибытия поезда по местному времени |
ConfirmTimeLimit | атрибут | DateTime | Тайм-лимит на подтверждение брони |
TrainNumber | атрибут | string | Номер поезда |
TrainName | атрибут | string | Название поезда |
TrainCathegory | атрибут | int | Категория поездаооскоростной. |
Может принимать одно из следующих значений: | |||
1 - Пассажирский; | |||
2 - Скорый; | |||
3 - Фирменный; | |||
5 - Скоростной; | |||
6 - Скорый фирменный; | |||
7 - Скоростной фирменный (Сапсан); | |||
8 - Скоростной (Ласточка); | |||
9 - Скорый (Гранд Экспресс); | |||
10 - Скоростной (Стриж) | |||
11 - Скоростной фирменный; | |||
12 - Высокоскоростной. | |||
Carrier | атрибут | string | Перевозчик |
CarNumber | атрибут | int | Номер вагона |
FareName | атрибут | string | Название тарифа |
ServiceClass | атрибут | string | Сервисный класс обслуживания |
GenderType | атрибут | int | Гендерный тип купе Может принимать одно из следующих значений: 0 - Мужское;1 - Женское;2 - Смешанное;3 - Не применяется. |
Places | атрибут | List<int> | Список номеров занимаемых мест |
ServiceFee | атрибут | double | Сервисный сбор |
SpecialTravelTermsNotification | атрибут | string | Уведомление пассажира об особых условиях поездки |
Conditions | атрибут | string | Информация о времени отправления и прочих условиях |
TStatus | атрибут | int | Текущий статус транзакции Может принимать одно из следующих значений: 0 - Успешная;1 - Неуспешная;2 - В процессе подтверждения. |
AllowEReg | атрибут | bool | Признак возможности установки электронной регистрации |
IsTwoStorey | атрибут | bool | Признак двухэтажного вагона |
IsSuburbanTrain | атрибут | bool | Признак пригородного поезда |
IsDoubleSeatsPrice | атрибут | bool | Признак выкупа целого купе с двумя местами |
IsQuadroSeatsPrice | атрибут | bool | Признак выкупа целого купе с четырьмя местами |
Blanks | элемент | string | Контейнер бланков заказа, см. таблицу "Элемент Blanks" |
Элемент Blanks - контейнер бланков заказа
id_Transaction | атрибут | int | Идентификатор транзакции в системе поставщика |
id_Blank | атрибут | int | Идентификатор бланка в системе поставщика |
TicketNumber | атрибут | string | Номер билета |
Amount | атрибут | double | Стоимость билетов по данному бланку без сборов |
PriceCathegory | атрибут | string | Строковое представление категории билета |
PlaceString | атрибут | string | Занимаемые места в формате поставщика |
EReg | атрибут | int | Признак установки электронной регистрации Может принимать одно из следующих значений: 0 - электронная регистрация недоступна;1 - электронная регистрация;2 - без электронной регистрации. |
Passengers | элемент | Контейнер данных о пассажирах из данного бланка(см. таблицу "Элемент Passengers") | |
RzhdStatus | атрибут | int | Cтатус бланкаМожет принимать одно из следующих значений 0 - без электронной регистрации;1 - электронная регистрация;2 - оплата не подтверждена;3 - аннулирован;4 - возвращен;5 - возвращены места;6 - выдан посадочный купон (проездной документ) на бланке строгой отчетности;7 - отложенная оплата;20 - произошла ошибка и актуальный статус заказа (билета) неизвестен. |
PlaceTier | атрибут | string | Тип места (ярус) |
PlaceTierDescription | атрибут | string | Описание места |
Storey | атрибут | int | Требование к этажности Может принимать одно из следующих значений: 0 - требования к этажу не заданы 1 - первый этаж вагона 2 - второй этаж вагона |
RefundInfo | элемент | Контейнер с данными о возврате билетов(см. таблицу "Элемент RefundInfo") |
Элемент Passengers - контейнер данных о пассажирах
FirstName | атрибут | string | Имя |
LastName | атрибут | string | Фамилия |
MiddleName | атрибут | string | Отчество |
UfsDocumentType | атрибут | string | Тип документа пассажира в системе поставщика |
DocumentNumber | атрибут | string | Номер документа пассажира в системе поставщика |
Birthday | атрибут | DateTime | Дата рождения пассажира |
Элемент RefundInfo - контейнер с данными о возврате билетов
Stan | атрибут | string | Уникальный идентификатор операции возврата |
id_RefundTransaction | атрибут | string | Идентификатор транзакции возврата |
id_RefundBlank | атрибут | int? | Идентификатор бланка возврата |
RefundDate | атрибут | DateTime | Дата проведения возврата |
Amount | атрибут | double | Сумма к возврату |
Информация о дополнительных расходах
Блок доступен в ответе, если на договоре активирован МОД ModBtripAdvanceReportsExtendedAdditionalExpenses
Добавляется раздел SelectedAdditionalExpenses, где AdvanceReportAdditionalExpenceDetails - блок, содержащий информацию об одном доп. расходе и его атрибутах:
SelectedAdditionalExpenseID | элемент | string | Уникальный идентификатор расхода |
SelectedAdditionalExpense | элемент | double | Величина расхода |
SelectedAdditionalExpenseComment | элемент | string | Наименование расхода |
SelectedAdditionalExpenseDate | элемент | Date | Дата расхода (проставляется в МОДе ModBtripAdvanceReportsExpensesEditor) |
SelectedAdditionalExpenseLocatorOrTicketNumber | элемент | string | Номер отчетного документа (проставляется в МОДе ModBtripAdvanceReportsExpensesEditor) |
Имя бронирующего агента
В том случае, если заказ для клиента создавал агент, в ответе API по заказу появится блок:
AgentName
Внутри блока размещается информация (ФИО) агента, создавшего заказ, которое соответствует тому, как агент заведен в системе.
Пример ответа API:
Пример заведения агента в системе:
Тест
Форма для тестирования доступна только для запросов от локальных компьютеров.
SOAP 1.1
В следующем примере показаны запрос и ответ SOAP 1.1. Вместо элементов-заполнителей следует подставить фактические значения.
HTML/XML
POST /XmlGate/V3/OrderManagement/OrdersAPI.asmx HTTP/1.1
Host: demo.corteos.ru
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://corteos.ru/GetSimpleReserveByIdV2"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<AuthHeader xmlns="http://corteos.ru">
<Token>string</Token>
</AuthHeader>
</soap:Header>
<soap:Body>
<GetSimpleReserveByIdV2 xmlns="http://corteos.ru">
<id_Reserve>int</id_Reserve>
</GetSimpleReserveByIdV2>
</soap:Body>
</soap:Envelope>
HTML/XML
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetSimpleReserveByIdV2Response xmlns="http://corteos.ru">
<GetSimpleReserveByIdV2Result>
<Trace ResponseDate="dateTime" SessionID="string" IP="string" WebSite="string" />
<Errors>
<UniversalApiError Type="string" Text="string" />
<UniversalApiError Type="string" Text="string" />
</Errors>
<ResponseDetails id_Reserve="int" id_ComplexReserve="int" ComplexReserveName="string" Locator="string" Price="double" Header="string" Brief="string" OrderTypeName="string" id_ReserveType="int" id_AgentGroup="int" id_ClientGroup="int" id_ServiceTeam="int" id_ReserveState="int" ReserveStateName="string" DateCreate="dateTime" id_Agent="int">
<id_PayerOrganization>int</id_PayerOrganization>
<OrderSpecificData>xml</OrderSpecificData>
<MostCheapVariant>xml</MostCheapVariant>
<MostExpensiveVariant>xml</MostExpensiveVariant>
<Creator id_Client="int" id_Group="int" Email="string" LastName="string" FirstName="string" />
<ServiceTeam>
<id_ServiceTeam>int</id_ServiceTeam>
<Name>string</Name>
<Code>string</Code>
</ServiceTeam>
<Codes>
<StableCode xsi:nil="true" />
<StableCode xsi:nil="true" />
</Codes>
<Passengers>
<StablePassenger xsi:nil="true" />
<StablePassenger xsi:nil="true" />
</Passengers>
<Violations>
<StablePolicyViolation xsi:nil="true" />
<StablePolicyViolation xsi:nil="true" />
</Violations>
<Files>
<StableFile xsi:nil="true" />
<StableFile xsi:nil="true" />
</Files>
<Payer>
<id_PayerOrganization>int</id_PayerOrganization>
<INN>string</INN>
<KPP>string</KPP>
</Payer>
<ComplexReserveReference id_ComplexReserve="int" Name="string" id_ClientCreator="int" CreationDate="dateTime" CurrentState="string">
<Codes xsi:nil="true" />
</ComplexReserveReference>
<AgentName>string</AgentName>
</ResponseDetails>
</GetSimpleReserveByIdV2Result>
</GetSimpleReserveByIdV2Response>
</soap:Body>
</soap:Envelope>
SOAP 1.2
В следующем примере показаны запрос и ответ SOAP 1,2. Вместо элементов-заполнителей следует подставить фактические значения.
HTML/XML
POST /XmlGate/V3/OrderManagement/OrdersAPI.asmx HTTP/1.1
Host: demo.corteos.ru
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>
<AuthHeader xmlns="http://corteos.ru">
<Token>string</Token>
</AuthHeader>
</soap12:Header>
<soap12:Body>
<GetSimpleReserveByIdV2 xmlns="http://corteos.ru">
<id_Reserve>int</id_Reserve>
</GetSimpleReserveByIdV2>
</soap12:Body>
</soap12:Envelope>
HTML/XML
В ноябре 2023 года добавлена GetSimpleReserveByIdV3
Её отличием от GetSimpleReserveByIdV2 является новый блок ExtraData в ответе:
В этом блоке перечисляется:
ФИО сотрудника который финализировал заказ
ID сотрудника который финализировал заказ
e-mail сотрудника который финализировал заказ
Обратите внимание! что блок ExtraData в ответе по этому методу будет показан только когда данный заказ будет в нужном статусе “Выполнен”
Так же блок ExtraData
может быть расширен в будущем новыми параметрами