REST. SSO: Создание заявки на командировку

REST. SSO: Создание заявки на командировку

Метод предназначен для создания новой заявки на командировку в системе Кортеос через REST API DataService с использованием SSO.

Для работы с SSO (Single sign-on) необходимо активировать и настроить МОД "Интеграция с SSO" (ModSSOService).

Эндпоинт

POST https://corteosDomain/api/v2/set

  • corteosDomain - домен.

Для тестовой среды: test.sso.corteos.ru

Для продуктивной среды: prd.sso.corteos.ru

Авторизация

Авторизация не требуется. Метод использует данные из блока AccountDetails для идентификации договора и пользователя.

Описание

Метод создаёт новую заявку на командировку на основе переданных данных: маршрута, информации о пассажирах, персональных кодов, бюджетных кодов и учётных данных договора. Если командировка с указанным OuterId уже существует, система не создаёт новую, а возвращает CorteosId для существующей заявки.

Командировка - это заявка на поездку, содержащая информацию о маршруте, пассажирах, бюджетных кодах и других параметрах, необходимых для оформления услуг (авиа, ж/д, отель и т.д.).

Командировка характеризуется следующими полями:

  • OuterId - уникальный идентификатор командировки в системе клиента. Он используется для связывания данных между системой Corteos и системой клиента, позволяя клиенту идентифицировать командировку по своему внутреннему идентификатору.

  • CorteosId - токен, возвращаемый системой для формирования ссылки перехода.

  • CurrentRoute - маршрут поездки (откуда, куда, даты).

  • Persons - массив данных о пассажирах (ФИО, документы, контакты, персональные коды).

  • BudgetCodes - бюджетные коды командировки.

  • AccountDetails - данные договора и email инициатора.

Структура запроса (JSON)

{ "OuterId": "string", // Уникальный идентификатор командировки в системе клиента "CurrentRoute": { // Объект содержащий маршрут и даты поездки "Origin": "string", // Город отправления "Destination": "string", // Город назначения "DepartureDate": "datetime", // Дата отправления "ReturnDate": "datetime" // Дата возвращения }, "Persons": [ // Массив данных пассажиров { "LastName": "string", // Фамилия пассажира "FirstName": "string", // Имя пассажира "MiddleName": "string", // Отчество пассажира "LastNameLatin": "string", // Фамилия пассажира англ. "FirstNameLatin": "string", // Имя пассажира англ. "MiddleNameLatin": "string", // Отчество пассажира англ. "Gender": "string", // Пол пассажира "DateBirth": "YYYY-MM-DD", // Дата рождения пассажира "INN": "string", // ИНН организации "KPP": "string", // КПП организации "CountryAlpha2": "string", // Код страны гражданства пассажира "Documents": [ // Документы (массив) { "CountryCode": "string", // Код страны выдачи документа "DocumentNumber": "string", // Номер документа "DocumentType": "string", // Тип документа "DateValid": "datetime" // Срок действия документа } ], "Contacts": [ // Контакты (массив) { "ContactType": "string", // Значение контакта "Value": "string" // Тип контакта } ], "PersonalCodes": [ // Персональные коды (массив) { "DictionaryName": "string", // Название справочника кодов "CodeValue": "string", // Значение кода "IsPrimaryKey": "string" // Флаг первичного ключа } ] } ], "BudgetCodes": [ // Бюджетные коды (массив) { "DictionaryName": "string", // Название справочника кодов "CodeValue": "string", // Значение кода "IsPrimaryKey": "string", // Флаг первичного ключа "SelectorState": "string" // Состояние селектора } ], "AccountDetails": { // Данные договора и инициатора "id_Group": "string", // ID группы "GroupSecurityKey": "string", // Ключ безопасности договора "Email": "string" // Email инициатора командировки } }

Параметры запроса

Body параметры:

Параметр

Тип

Обязательный

Описание

Параметр

Тип

Обязательный

Описание

"OuterId"

string

Да

Уникальный идентификатор командировки в системе клиента.

Если OuterId отсутствует или пуст, пользователь авторизуется через SSO без создания или открытия командировки.

"CurrentRoute"

object

Нет

Содержит маршрут и даты поездки.

"Origin"

string

Нет

Город отправления.

"Destination"

string

Нет

Город назначения.

"DepartureDate"

datetime

Нет

Дата отправления.

"ReturnDate"

datetime

Нет

Дата возвращения.

"Persons"

array

Нет

Массив данных пассажиров.

"LastName"

string

Нет

Фамилия пассажира.

"FirstName"

string

Нет

Имя пассажира.

"MiddleName"

string

Нет

Отчество пассажира.

"LastNameLatin"

string

Нет

Фамилия пассажира на английском.

"FirstNameLatin"

string

Нет

Имя пассажира на английском.

"MiddleNameLatin"

string

Нет

Отчество пассажира на английском.

"Gender"

string

Нет

Пол (false - женский, true - мужской).

"DateBirth"

date

Нет

Дата рождения персоны в формате: YYYY-MM-DD

"INN"

string

Нет

ИНН организации.

"KPP"

string

Нет

КПП организации.

"CountryAlpha2"

string

Нет

Код страны.

"Documents"

array

Нет

Массив документов.

"CountryCode"

string

Нет

Код страны выдачи документа.

"DocumentNumber"

string

Нет

Номер документа.

"DocumentType"

string

Нет

Тип документа.

"DateValid"

string

Нет

Срок действия.

"Contacts"

array

Нет

Массив контактов.

"ContactType"

string

Нет

Значение контакта.

"Value"

string

Нет

Тип контакта.

"PersonalCodes"

array

Нет

Массив персональных (структурных) кодов привязанных к персоне.

"DictionaryName"

string

Нет

Название справочника кодов.

"CodeValue"

string

Нет

Значение кода.

"IsPrimaryKey"

string

Нет

Флаг первичного ключа ("true" / "false").

"BudgetCodes"

array

Нет

Массив бюджетных кодов.

"DictionaryName"

string

Нет

Название справочника бюджетных кодов.

"CodeValue"

string

Нет

Значение бюджетного кода.

"IsPrimaryKey"

string

Нет

Флаг первичного ключа ("true" / "false").

"SelectorState"

string

Нет

Состояние селектора ("Enabled" / "Disabled").

"AccountDetails"

object

Да

Данные договора и инициатора.

"id_Group"

string

Да

Идентификатор (номер) группы договора в системе Кортеос.

"GroupSecurityKey"

string

Да

Ключ безопасности договора.

"Email"

string

Да

Email инициатора командировки.

  • id_Group и GroupSecurityKey - указаны на вкладке "Общие" договора.

image-20260325-145030.png
  • Email - указан на странице “Профиль” персоны.

image-20260325-145423.png

Структура ответа (JSON)

Метод возвращает ответ в формате UniversalApiResponseV2.

{ "result": { // Основные данные ответ "id_User": integer, // ID пользователя "corteosId": "string", // Токен командировки для SSO перехода "creationDate": "DD.MM.YYYY", // Дата создания токена corteosId "validUntil": "DD.MM.YYYY", // Дата истечения срока действия токена "isExpired": boolean, // Флаг просрочки токена (false-активен,true-истёк) "isAuthenticated": boolean, // Флаг авторизации.Показывает, прошёл ли пользователь аутентификацию "augmentationData": "string", // Дополнительные XML-данные "outerId": "string", // Внешний идентификатор командировки, который был передан в запросе (ваш OuterId) "currentRoute": { // Объект содержащий маршрут и дат "origin": "string", // Город отправления "destination": "string", // Город назначения "departureDate": "DD.MM.YYYY", // Дата отправления "returnDate": "DD.MM.YYYY" // Дата возвращения }, "persons": [ // Массив данных пассажиров { "lastName": "string", // Фамилия пассажира "firstName": "string", // Имя пассажира "middleName": "string", // Отчество пассажира "lastNameLatin": "string", // Фамилия пассажира англ. "firstNameLatin": "string", // Имя пассажира англ. "middleNameLatin": "string", // Отчество пассажира англ. "gender": boolean, // Пол пассажира "dateBirth": "DD.MM.YYYY", // Дата рождения пассажира "inn": "string", // ИНН организации "kpp": "string", // КПП организации "countryAlpha2": "string", // Код страны гражданства пассажира "documents": [ // Документы (массив) { "countryCode": "string", // Код страны выдачи документа "documentNumber": "string", // Номер документа "documentType": integer, // Тип документа "dateValid": "DD.MM.YYYY" // Срок действия документа } ], "contacts": [ // Контакты (массив) { "contactType": integer, // Тип контакта "value": "string" // Значение контакта } ], "bonusCards": [], // Бонусные карты (массив) "personalVisas": [], // Визы (массив) "personalCodes": [ // Персональные коды (массив) { "dictionaryName": "string", // Название справочника кодов "codeValue": "string", // Значение кода "isPrimaryKey": boolean // Флаг первичного ключа } ] } ], "budgetCodes": [ // Бюджетные коды (массив) { "selectorState": integer, // Состояние селектора "dictionaryName": "string", // Название справочника кодов "codeValue": "string", // Значение кода "isPrimaryKey": boolean // Флаг первичного ключа } ], "accountDetails": { // Данные договора и инициатора "id_Group": integer, // ID группы "groupSecurityKey": "string", // Ключ безопасности договора "email": "string", // Email инициатора командировки "isLoggedIn": boolean // Флаг (индикатор) авторизации пользователя }, "hasAccountDetails": boolean, // Флаг наличия данных договора. Показывает, были ли переданы реквизиты AccountDetails в запросе. "isLoggedIn": boolean // Флаг входа в систему. Указывает, выполнен ли вход для пользователя, связанного с командировкой. }, "statusCode": integer, // Код ответа "info": { // Служебная информация "sessionId": "string", // ID сессии "timing": { // Время обработки "start": "ISO8601", // Время начала обработки запроса "end": "ISO8601", // Время завершения обработки запроса "duration": double // Длительность обработки запроса (мс) } }, "errors": [], // Ошибки (пусто при успехе) "hasErrors": boolean, // Флаг наличия ошибок "isDefaultStatusCode": boolean // Флаг стандартного статус }

SSO переход

В ответе веб-сервиса нам следует обратить внимание на поле "corteosId" (4 строка).

Срок жизни токена corteosId 10 минут.

Значение выглядит таким образом:

"corteosId": "хххххххх-хххх-хххх-хххх-хххххххххххх"

Данный идентификатор мы используем при SSO переходе на адрес:

https://yourdomain.ru/mods/ssoentrance/go?portalId=corteosId

  • yourdomain.ru - ваш домен.

В процессе перехода по ссылке будет создана или изменена командировка с указанным номером в запросе OuterId и пользователь попадёт на страницу созданной (измененной) командировки.

Пример запроса

При отправке POST запроса на https://test.sso.corteos.ru/api/v2/set с телом:

{ "OuterId": "тест1", "CurrentRoute": { "Origin": "Москва", "Destination": "Санкт-Петербург", "DepartureDate": "2026-05-20T09:00:00", "ReturnDate": "2026-05-23T18:00:00" }, "Persons": [ { "LastName": "Иванов", "FirstName": "Иван", "MiddleName": "Иванович", "LastNameLatin": "Ivanov", "FirstNameLatin": "Ivan", "MiddleNameLatin": "Ivanovich", "Gender": "true", "DateBirth": "2000-01-01", "INN": "8789878987", "KPP": "567656787", "CountryAlpha2": "RU", "Documents": [ { "CountryCode": "RU", "DocumentNumber": "2323222422", "DocumentType": "NationalPassport", "DateValid": "2044-12-09T00:00:00" } ], "Contacts": [ { "ContactType": "MobilePhone", "Value": "+7567876545" }, { "ContactType": "Email", "Value": "SsoTest@test.ru" } ], "PersonalCodes": [ { "DictionaryName": "Тест SSO", "CodeValue": "1234", "IsPrimaryKey": "false" } ] } ], "BudgetCodes": [ { "DictionaryName": "Тестовый бюджетный справочник SSO", "CodeValue": "1", "IsPrimaryKey": "false", "SelectorState": "Enabled" } ], "AccountDetails": { "id_Group": "8507", "GroupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх", "Email": "хххххх@corteos.travel" } }

Пример ответа

{ "result": { "id_User": 147886, "corteosId": "42fc283e-3c45-4052-91ea-ed05883a9971", "creationDate": "02.04.2026", "validUntil": "02.04.2026", "isExpired": false, "isAuthenticated": true, "augmentationData": "<xml />", "outerId": "тест1", "currentRoute": { "origin": "Москва", "destination": "Санкт-Петербург", "departureDate": "20.05.2026", "returnDate": "23.05.2026" }, "persons": [ { "lastName": "Иванов", "firstName": "Иван", "middleName": "Иванович", "lastNameLatin": "Ivanov", "firstNameLatin": "Ivan", "middleNameLatin": "Ivanovich", "gender": true, "dateBirth": "01.01.2000", "inn": "8789878987", "kpp": "567656787", "countryAlpha2": "RU", "documents": [ { "countryCode": "RU", "documentNumber": "2323222422", "documentType": 1, "dateValid": "09.12.2044" } ], "contacts": [ { "contactType": 1, "value": "+7567876545" }, { "contactType": 3, "value": "SsoTest@test.ru" } ], "bonusCards": [], "personalVisas": [], "personalCodes": [ { "dictionaryName": "Тест SSO", "codeValue": "1234", "isPrimaryKey": false } ] } ], "budgetCodes": [ { "selectorState": 1, "dictionaryName": "Тестовый бюджетный справочник SSO", "codeValue": "1", "isPrimaryKey": false } ], "accountDetails": { "id_Group": хххх, "groupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх", "email": "ххххххх@corteos.travel", "isLoggedIn": true }, "hasAccountDetails": true, "isLoggedIn": true }, "statusCode": 200, "info": { "sessionId": "хххххххххххххххххххххххх", "timing": { "start": "2026-04-02T16:32:16.3238877+03:00", "end": "2026-04-02T16:32:16.3551372+03:00", "duration": 24.0 } }, "errors": [], "hasErrors": false, "isDefaultStatusCode": true }

Пример SSO перехода

В ответе веб-сервиса нам следует обратить внимание на поле "corteosId" (4 строка).
Значение выглядит таким образом:

"corteosId": "42fc283e-3c45-4052-91ea-ed05883a9971"

Данный идентификатор мы используем при SSO переходе на адрес:

https://yourdomain.ru/mods/ssoentrance/go?portalId=42fc283e-3c45-4052-91ea-ed05883a9971

  • yourdomain.ru - ваш домен.

При переходе по данной ссылке происходит создание командировки согласно переданным данным.

image-20260402-135546.png

Ссылка на документацию SOAP

https://corteos-platform.atlassian.net/wiki/x/Y9wM

https://corteos-platform.atlassian.net/wiki/x/epAM