4. Вход в систему через SSO без создания командировки
В данном разделе описаны варианты перехода в Кортеос без создания командировки с помощью Set-запроса к веб-сервису DataService Веб-служба.
- 1 Вход в систему для зарегистрированного пользователя
- 2 Вход в систему зарегистрированного пользователя или обновление его данных, а также создание пользователя, в случае, если он не зарегистрирован
- 3 Важные уточнения
- 3.1 Нужно ли дублировать данные персоны в пассажирах, если она передана как пользователь?
- 3.2 Что будет, если передать детали пользователя, а такой пользователь уже зарегистрирован в системе? Обновятся ли его данные?
- 3.3 Нужно ли активировать созданного через SSO пользователя в редакторе договора?
- 3.4 Если в договоре уже есть персона (не пользователь), что происходит при его переходе через SSO? Не будет ли дубля или уже ранее созданной персоне просто присваивается роль в системе?
Вход в систему для зарегистрированного пользователя
Минимальный набор данных для перехода в систему зарегистрированного пользователя должен содержать в себе следующие элементы AccountDetails:
Наименование поля | Тип | Обязательность | Описание | Пример заполнения |
---|---|---|---|---|
id_Group | attribute xsd:int | 1..1 | идентификатор группы пользователя в системе | 8000 |
GroupSecurityKey | attribute xsd:string | 1..1 | ключ безопасности для определения валидности группы - сравнивается с ключом в настройках группы | 044D1743-A4B4-4A4B-A689-5CA91BB405D8 |
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 |
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 | тип контакта | |
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) - нет в системе, то он будет создан на лету.
В результате перехода будет создан аккаунт пользователя:
Важные уточнения
Нужно ли дублировать данные персоны в пассажирах, если она передана как пользователь?
Данные пользователя и пассажира обрабатываются разными разборщиками, поэтому их необходимо дублировать.
Что будет, если передать детали пользователя, а такой пользователь уже зарегистрирован в системе? Обновятся ли его данные?
Если пользователь уже зарегистрирован, элемент PersonToCreate не обрабатывается в принципе.
Для того, чтобы задать правило, обновлять или не обновлять данные пользователя, нужно добавить в запрос элемент CustomOption с ключом updatePersonMode. Ключ может принимать следующие значения:
update (string) - говорит о том, что нужно обновить информацию о пользователе (полное перетирание данных новыми)
keepData (string) - говорит о том, что нужно сохранять информацию о пользователе (если осуществляется повторный переход, данные о пользователе не обновляются)
Пример:
<CustomOption>
<Key>updatePersonMode</Key>
<Value>keepData</Value>
</CustomOption>
Нужно ли активировать созданного через SSO пользователя в редакторе договора?
Нет. Пользователь активируется автоматически.
Если в договоре уже есть персона (не пользователь), что происходит при его переходе через SSO? Не будет ли дубля или уже ранее созданной персоне просто присваивается роль в системе?
Если пользователя не найдено, происходит проверка по первичному ключу, чтобы было на что ориентироваться при поиске (это структурный код в запросе с флагом IsPrimaryKey="true"). Если такого параметра нет, то мы пробуем искать по документу, а потом по совпадению ФИО + дата рождения.
Если по совпадению была найдена персона, то мы создаем пользователя, привязанного к этой персоне. Если никто не нашелся, создаем новую персону + пользователя.
.