SSO: специальные сценарии для работы с “жёстким” или “мягким” контейнером командировки



Предварительные настройки:

1. Произвести настройки Интеграции с SSO -
тест https://test.sso.corteos.ru
продуктив https://prd.sso.corteos.ru

2.Активировать моды.
В данной задаче моды достаточно просто активировать, через тревел менеджмент управляем настройками клиента от его имени и включаем чекбоксы для того, чтобы моды заработали. Настройку производить нет необходимости сверх базовых настроек SSO-портала
мод Интеграция с SSO.
мод Контейнер командировки: жесткое сохранение структуры маршрута или
мод Контейнер командировки: мягкое сохранение структуры маршрута

 

3. Для корректного сопоставления персон, нам необходимо создать https://corteos-platform.atlassian.net/wiki/x/PtsK , привязанный ко всем организациям внутри группы клиента, который будет содержать уникальный идентификатор внешней системы, на основании которого будет проводиться обновление данных пассажира. В нашем примере справочник будет называться “тестнв

image-20240913-111113.png
image-20240918-163620.png

Web Services


Описание службы: http://test.sso.corteos.ru/XmlGate/DataService.asmx
Файл WSDL: https://test.sso.corteos.ru/XmlGate/DataService.asmx?WSDL



Сценарий использования
При переходе при помощи SSO, мы инициализируем запрос при помощи следующих данных:

<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:OuterId>тест1234567890</sso:OuterId> <sso:CustomRoute> <sso:RoutePart> <sso:DateDepart>2024-10-09</sso:DateDepart> <sso:Origin>Москва</sso:Origin> <sso:Destination>Санкт-Петербург</sso:Destination> <sso:ServiceType>transport</sso:ServiceType> <!--sso:ServiceType>transport,lodging</sso:ServiceType--> <sso:DepartureAdvanceShiftDays>0</sso:DepartureAdvanceShiftDays> <sso:DeparturePostShiftDays>0</sso:DeparturePostShiftDays> <sso:ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays> <sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays> <sso:BookingSequence>1</sso:BookingSequence> </sso:RoutePart> <sso:RoutePart> <sso:DateDepart>2024-10-15</sso:DateDepart> <sso:Origin>Санкт-Петербург</sso:Origin> <sso:Destination>Москва</sso:Destination> <sso:ServiceType>transport</sso:ServiceType> <sso:DepartureAdvanceShiftDays>0</sso:DepartureAdvanceShiftDays> <sso:DeparturePostShiftDays>0</sso:DeparturePostShiftDays> <sso:ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays> <sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays> <sso:BookingSequence>1</sso:BookingSequence> </sso:RoutePart> </sso:CustomRoute> <sso:CustomOptions> <sso:CustomOption> <sso:Key>routeControl</sso:Key> <sso:Value>true</sso:Value> </sso:CustomOption> <sso:CustomOption> <sso:Key>automaticServices</sso:Key> <sso:Value>transport,hotel</sso:Value> </sso:CustomOption> <sso:CustomOption> <sso:Key>updateMode</sso:Key> <sso:Value>update</sso:Value> </sso:CustomOption> </sso:CustomOptions> <sso:Persons> <sso:Person LastName="Лапочкина" FirstName="Елена" MiddleName="Александровна" LastNameLatin="Lapochkina" FirstNameLatin="Elena" MiddleNameLatin="Aleksandrovna" Gender="false" DateBirth="1980-02-06"> <sso:INN>222222222222</sso:INN> <sso:KPP>222222222</sso:KPP> <sso:CountryAlpha2>RU</sso:CountryAlpha2> <sso:Documents> <sso:Document CountryCode="RU" DocumentNumber="2323222222" DocumentType="NationalPassport" DateValid="2044-09-04"/> </sso:Documents> <sso:Contacts> <sso:Contact ContactType="MobilePhone" Value="+72222222222"/> </sso:Contacts> <sso:PersonalCodes> <sso:Code DictionaryName="тестнв" CodeValue="1234" IsPrimaryKey="true"/> </sso:PersonalCodes> </sso:Person> </sso:Persons> <sso:AccountDetails id_Group="8418" GroupSecurityKey="2D6DE573-CBAD-4437-90E6-0F4CFE31936C" Email="usr8418@corteos.travel"> <sso:id_Role>1</sso:id_Role> </sso:AccountDetails> </sso:request> </sso:Set> </soapenv:Body> </soapenv:Envelope>

Запрос состоит:
<sso:OuterId>-идентификатор командировки, уникальный номер ( если такой номер командировки уже существует, то произойдет обновление данных)

Маршрут:
<sso:RoutePart>содержит часть маршрута</sso:RoutePart>
<sso:CustomRoute>содержит полный маршрут</sso:CustomRoute>

<sso:DateDepart>datetime,  дата отправления пассажира в пункт назначения,
<sso:Origin>-string, начальная точка маршрута. Здесь маршрут начинается в Москве.
<sso:Destination>-string, конечная точка маршрута. Путешествие заканчивается в Санкт-Петербурге.
<sso:ServiceType>Тип услуги.
<sso:ServiceType>transport,lodging</sso:ServiceType> - в этом случае транспорт и проживание.
<sso:ServiceType>transport</sso:ServiceType> - в этом случае услуга относится к транспортной категории.
<sso:DepartureAdvanceShiftDays> - количество дней до даты отправления, когда возможно забронировать билет. Здесь оно равно нулю, значит бронирование доступно только в день отправления.
<sso:DeparturePostShiftDays> - период после даты отправления, в течение которого еще возможно забронировать билет. Здесь также равно нулю, значит после даты отправления билеты уже недоступны для бронирования.
<sso:ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays>-количество дней до даты прибытия, когда возможно забронировать билет. Здесь оно равно нулю, значит бронирование доступно только в день отправления.
<sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays>-количество дней после даты прибытия, когда возможно забронировать билет. Здесь оно равно нулю, значит бронирование доступно только в день отправления.
<sso:BookingSequence>- в том случае, если нам нужно бронировать услуги друг за другом(например, сперва один участок, а потом другой), то тут передаем последовательность этой процедуры бронирования. Если мы работаем в стандартном режиме: сперва транспорт, потом гостиницы, потом сервисы, то всегда передаем 1

Бизнес-правила:
<sso:CustomOption>-контейнер бизнес-правил в формате ключ-значение(строки), которые содержат информацию о том, как должна система вести себя с командировкой</sso:CustomOption>

<sso:CustomOption> <sso:Key>routeControl</sso:Key> <sso:Value>true</sso:Value> </sso:CustomOption>


<sso:Key>routeControl</sso:Key>- включает или выключает логику контроля маршрута,true для командировок, false для личных поездок

<sso:CustomOption> <sso:Key>automaticServices</sso:Key> <sso:Value>transport,hotel</sso:Value> </sso:CustomOption>

<sso:Key>automaticServices</sso:Key>- transport,hotel - какие услуги можно бронировать в автоматическом режиме(типы услуг, доступны transport - авиа или жд и hotel - гостиница)

<sso:Key>updateMode</sso:Key> - говорит о том, что нужно обновить информацию о командировке

Данные о пассажире:


LastName-string, фамилия персоны на русском языке,
FirstName-string, имя персоны на русском языке,
MiddleName-string, отчество персоны, если нет - передаем пробельный символ,
LastNameLatin FirstNameLatin MiddleNameLatin-string, все то же самое, но на английском языке, строка. Если у вас в системе эти данные не хранятся, то русский аналог необходимо транслитерировать по ГОСТ 7.79-2000 (система Б)
Gender- true - мужчина, false - женщина,
DateBirth -datetime, дата рождения,
INN -int, ИНН организации, в которой работает персона,
KPP -int, КПП организации, в которой работает персона
По полям ИНН и КПП мы привязываем персону к нужной компании.
CountryAlpha2- код страны, гражданином которой является персона,
Document CountryCode- документ какой страны, код страны,
DocumentNumber- номер документа,
DocumentType - какой документ,
DateValid - срок действия документа,
ContactType - тип контакта,
Value- номер телефона,
DictionaryName -название справочника структурных кодов,
CodeValue -значение кода, предполагается, что оно должно быть уникально внутри справочника,
IsPrimaryKey - true позволяет определить, какой код отвечает за идентификатор пользователя. По этому параметру синхронизируются данные из запроса с данными в БД и обновляются значениями, передаваемыми в запросе.

Данные для авторизации пользователя из внутренней клиентской системы Corteos:


AccountDetails - данные для авторизации пользователя из внутренней клиентской системы Corteos
id_Group-int, идентификатор компании заказчика,
GroupSecurityKey- ключ для SSO,
Email - это логин пользователя, который создает командировку,
id_Role - роль пользователя, который создает командировку,
Параметры id_Group и GroupSecurityKey для AccountDetails предоставляются агентством,также их можно определить в настройках договора:

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

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

Данный идентификатор мы используем при SSO переходе на адрес:
https://домен/mods/ssoentrance/go?portalId=CorteosId

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

После перехода по ссылке обязательно отключить мод Интеграция с SSO” и подключить модПервичный контейнер командировки”

 

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

 

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