REST. SSO: Повторный вход в существующую заявку на командировку

REST. SSO: Повторный вход в существующую заявку на командировку

Метод предназначен для повторного входа в уже созданную заявку на командировку через REST API.

Для работы с 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 — внешний идентификатор существующей заявки,

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

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

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

  • OuterId - уникальный идентификатор командировки в системе клиента.

  • 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

Да

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

"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", "AccountDetails": { "id_Group": "8507", "GroupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх", "Email": "usr8507@corteos.travel" } }

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

{ "result": { "id_User": 147886, "corteosId": "1525108f-06de-4ae8-b5f8-4a902ee4974a", "creationDate": "03.04.2026", "validUntil": "03.04.2026", "isExpired": false, "isAuthenticated": true, "augmentationData": "<xml />", "outerId": "тест1", "persons": [], "budgetCodes": [], "accountDetails": { "id_Group": 8507, "groupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх", "email": "usr8507@corteos.travel", "isLoggedIn": true }, "hasAccountDetails": true, "isLoggedIn": true }, "statusCode": 200, "info": { "sessionId": "ххххххххххххххххххххх", "timing": { "start": "2026-04-03T13:32:18.357325+03:00", "end": "2026-04-03T13:32:18.3885698+03:00", "duration": 19.0 } }, "errors": [], "hasErrors": false, "isDefaultStatusCode": true }

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

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

"corteosId": "1525108f-06de-4ae8-b5f8-4a902ee4974a"

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

https://yourdomain.ru/mods/ssoentrance/go?portalId=1525108f-06de-4ae8-b5f8-4a902ee4974a

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

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

image-20260403-103353.png

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

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