4. Вход в систему через SSO без создания командировки

В данном разделе описаны варианты перехода в Кортеос без создания командировки с помощью Set-запроса к веб-сервису DataService Веб-служба.

Вход в систему для зарегистрированного пользователя

Минимальный набор данных для перехода в систему зарегистрированного пользователя должен содержать в себе следующие элементы AccountDetails:

Наименование поля

Тип

Обязательность

Описание

Пример заполнения

Наименование поля

Тип

Обязательность

Описание

Пример заполнения

id_Group

attribute xsd:int

1..1

идентификатор группы пользователя в системе

8000

GroupSecurityKey

attribute xsd:string

1..1

ключ безопасности для определения валидности группы - сравнивается с ключом в настройках группы

044D1743-A4B4-4A4B-A689-5CA91BB405D8

Email

attribute xsd:string

1..1

электронная почта пользователя, используемая, как часть составного первичного ключа

userlogin@corteos.travel

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

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sso="https://sso.corteos.ru/"> <soapenv:Header/> <soapenv:Body> <sso:Set> <sso:request> <sso:AccountDetails id_Group="8000" GroupSecurityKey="044D1743-A4B4-4A4B-A689-5CA91BB405D8" Email="userlogin@corteos.travel"/> </sso:request> </sso:Set> </soapenv:Body> </soapenv:Envelope>

Если в указанном договоре найден указанный пользователь, в ответе будут возвращены все параметры запроса, а также поле CorteosID - это токен запроса, который используется для переадресации пользователя в Кортеос.

Вход в систему зарегистрированного пользователя или обновление его данных, а также создание пользователя, в случае, если он не зарегистрирован

Если требуется реализовать не только переход в систему зарегистрированного пользователя, но и создавать пользователя, если он не зарегистрирован, в момент первого перехода в систему (условно говоря, “на лету”), либо обновлять его данные при переходе без создания командировки через SSO, то помимо вышеуказанных данных, в AccountDetails требуется обязательно передавать PersonToCreate и id_Role. Набор данных:

Наименование поля

Тип

Обязательность

Описание

Пример заполнения

id_Group

attribute xsd:int

1..1

идентификатор группы пользователя в системе

8000

GroupSecurityKey

attribute xsd:string

1..1

ключ безопасности для определения валидности группы - сравнивается с ключом в настройках группы

044D1743-A4B4-4A4B-A689-5CA91BB405D8

Email

attribute xsd:string

1..1

электронная почта пользователя, используемая, как часть составного первичного ключа

userlogin@corteos.travel

PersonToCreate

 

0..1

Данные о персоне, привязанной к пользователю

 

LastName

attribute xsd:string

1..1

фамилия на русском

Аршавин

FirstName

attribute xsd:string

1..1

 имя на русском

Андрей

MiddleName

attribute xsd:string

1..1

отчество на русском

Сергеевич

LastNameLatin

attribute xsd:string

1..1

фамилия латиницей как в загранпаспорте

Arshavin

FirstNameLatin

attribute xsd:string

1..1

имя латиницей как в загранпаспорте

Andrey

MiddleNameLatin

attribute xsd:string

1..1

 отчество латиницей как в загранпаспорте

Sergeevich

Gender

attribute xsd: string

1..1

пол, true - мужской, false - женский

true

false

DateBirth

attribute xsd:dateTime

1..1

 дата рождения

 1986-05-30

INN

xsd:string

0..1

ИНН организации-плательщика, от которой едет пассажир

111111111111

KPP

xsd:string

0..1

КПП организации-плательщика, от которой едет пассажир

 111111111111

CountryAlpha2

xsd:string (2)

0..1

двухбуквенный код ISO гражданства

RU

Documents

 

0..1

 документы пассажира

 

Document

xsd:string (2)

0..n

данные документа пассажира

 

CountryCode

attribute xsd:string

1..1

 код страны, выдавшей документ

 RU

DocumentNumber

attribute xsd:string

1..1

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

123456789

DocumentType

attribute xsd:string

1..1

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

NationalPassport

DateValid

attribute xsd:string

1..1

 срок действия документа

 

Contacts

 

0..1

контакты пассажира

 

Contact

 

0..n

 данные о контакте пассажира

 

ContactType

attribute xsd:string

1..1

тип контакта

Email

Value

attribute xsd:string

1..1

 значение контакта

mailto@user.mail

PersonalCodes

 

0..1

список структурных кодов, привязанных к персоне

 

Code

 

0..n

данные по одному структурнму коду, привязанному к персоне

 

DictionaryName

xsd:string

1..1

 название справочника структурных кодов

Табельный номер

CodeValue

xsd:string

1..1

значение кода

00001

IsPrimaryKey

xsd:boolean

1..1

признак того, что код является уникальным ключом персоны (например, табельный номер)

true

false

id_Role

xsd:int

1..1

Идентификатор роли пользователя в системе

3

Итого, минимальным набором данных для передачи информации о пользователе являются следующие данные:

  • id_Group

  • GroupSecurityKey

  • Email

  • LastName

  • FirstName

  • MiddleName

  • LastNameLatin

  • FirstNameLatin

  • MiddleNameLatin

  • Gender

  • DateBirth

  • CountryAplha2 - alpha2 код страны, гражданином которой является персона.

  • id_Role - идентификатор роли пользователя, который будет создан в процессе SSO

Пример запроса создания пользователя:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sso="https://sso.corteos.ru/"> <soapenv:Body> <sso:Set> <!--Optional:--> <sso:request> <sso:AccountDetails id_Group="8000" GroupSecurityKey="044D1743-A4B4-4A4B-A689-5CA91BB405D8" Email="vasyasumkin@corteos.ru"> <sso:PersonToCreate LastName="Сумкин" FirstName="Василий" MiddleName="Юрьевич" LastNameLatin="Sumkin" FirstNameLatin="Vasiliy" MiddleNameLatin="Iurevich" Gender="true" DateBirth="1993-10-20"> <sso:INN>7788001001</sso:INN> <sso:KPP>778800101</sso:KPP> <sso:CountryAlpha2>RU</sso:CountryAlpha2> <sso:Documents> <sso:Document CountryCode="RU" DocumentNumber="1987654311" DocumentType="NationalPassport" DateValid="2029-12-12"/> </sso:Documents> <sso:Contacts> <sso:Contact ContactType="MobilePhone" Value="79991112233"/> </sso:Contacts> <sso:PersonalCodes> <sso:Code DictionaryName="Грейд" CodeValue="1" IsPrimaryKey="false" /> </sso:PersonalCodes> </sso:PersonToCreate> <sso:id_Role>2</sso:id_Role> </sso:AccountDetails> </sso:request> </sso:Set> </soapenv:Body> </soapenv:Envelope>

Если данные указанного договора корректны, в ответе будут возвращены все параметры запроса, а также поле CorteosID - это токен запроса, который используется для переадресации пользователя в Кортеос.

В этом случае, если пользователя с указанным Email (в примере - vasyasumkin@corteos.ru) - нет в системе, то он будет создан на лету.

В результате перехода будет создан аккаунт пользователя:

image-20241029-120623.png
image-20241029-120511.png

Важные уточнения

Нужно ли дублировать данные персоны в пассажирах, если она передана как пользователь?

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

Что будет, если передать детали пользователя, а такой пользователь уже зарегистрирован в системе? Обновятся ли его данные?

Если пользователь уже зарегистрирован, элемент PersonToCreate не обрабатывается в принципе.

Для того, чтобы задать правило, обновлять или не обновлять данные пользователя, нужно добавить в запрос элемент CustomOption с ключом updatePersonMode. Ключ может принимать следующие значения:

  • update (string) - говорит о том, что нужно обновить информацию о пользователе (полное перетирание данных новыми)

  • keepData (string) - говорит о том, что нужно сохранять информацию о пользователе (если осуществляется повторный переход, данные о пользователе не обновляются)

Пример:

<CustomOption> <Key>updatePersonMode</Key> <Value>keepData</Value> </CustomOption>

Нужно ли активировать созданного через SSO пользователя в редакторе договора?

Нет. Пользователь активируется автоматически.

Если в договоре уже есть персона (не пользователь), что происходит при его переходе через SSO? Не будет ли дубля или уже ранее созданной персоне просто присваивается роль в системе?

Если пользователя не найдено, происходит проверка по первичному ключу, чтобы было на что ориентироваться при поиске (это структурный код в запросе с флагом IsPrimaryKey="true"). Если такого параметра нет, то мы пробуем искать по документу, а потом по совпадению ФИО + дата рождения.

Если по совпадению была найдена персона, то мы создаем пользователя, привязанного к этой персоне. Если никто не нашелся, создаем новую персону + пользователя.

.