SSO: специальные сценарии для работы с “жёстким”контейнером командировки
Предварительные настройки:
1. https://corteos-platform.atlassian.net/wiki/x/acsK
2. Активировать моды.
В данной задаче моды достаточно просто активировать, через тревел менеджмент управляем настройками клиента от его имени и включаем чекбоксы для того, чтобы моды заработали. Настройку производить нет необходимости сверх базовых настроек SSO-портала
мод Интеграция с SSO.
мод Контейнер командировки: жесткое сохранение структуры маршрута
Web Services
Описание службы: http://test.sso.corteos.ru/XmlGate/DataService.asmx
Файл WSDL: https://test.sso.corteos.ru/XmlGate/DataService.asmx?WSDL
Сценарий использования
При переходе при помощи SSO, мы инициализируем Set
запрос при помощи следующих данных:
<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:CurrentRoute>
<sso:Origin>Москва</sso:Origin>
<sso:Destination>Санкт-Петербург</sso:Destination>
<sso:DepartureDate>2024-10-09</sso:DepartureDate>
<sso:ReturnDate>2024-10-15</sso:ReturnDate>
</sso:CurrentRoute>
<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="**********" Email="usr8418@corteos.travel">
<sso:id_Role>1</sso:id_Role>
</sso:AccountDetails>
</sso:request>
</sso:Set>
</soapenv:Body>
</soapenv:Envelope>
Запрос состоит:<sso:OuterId>
-идентификатор командировки, уникальный номер ( если такой номер командировки уже существует, то произойдет обновление данных)
Маршрут:
<sso:CurrentRoute>содержит маршрут командировки</sso:CurrentRoute>
<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:CustomOption>
<sso:Key>updateMode</sso:Key>
<sso:Value>update</sso:Value>
</sso:CustomOption>
<sso:Key>updateMode</sso:Key>
- говорит о том, что нужно обновить информацию о командировке
Данные о пассажире:
<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>
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:
<sso:AccountDetails id_Group="8418" GroupSecurityKey="2D6DE573-CBAD-4437-90E6-0F4CFE31936C" Email="usr8418@corteos.travel">
<sso:id_Role>1</sso:id_Role>
</sso:AccountDetails>
AccountDetails
- данные для авторизации пользователя из внутренней клиентской системы Corteosid_Group
-int, идентификатор компании заказчика,GroupSecurityKey
- ключ для SSO,Email
- это логин пользователя, который создает командировку,id_Role
- роль пользователя, который создает командировку,
Параметры id_Group
и GroupSecurityKey
для AccountDetails
предоставляются агентством,также их можно определить в настройках договора:
Пример ответа:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SetResponse xmlns="https://sso.corteos.ru/">
<SetResult>
<OuterId>тест1234567890</OuterId>
<CurrentRoute>
<Origin>Москва</Origin>
<Destination>Санкт-Петербург</Destination>
<DepartureDate>2024-10-09T00:00:00</DepartureDate>
<ReturnDate>2024-10-15T00:00:00</ReturnDate>
</CurrentRoute>
<CustomRoute>
<RoutePart>
<DateDepart>2024-10-09T00:00:00</DateDepart>
<DateReturn xsi:nil="true"/>
<Origin>Москва</Origin>
<Destination>Санкт-Петербург</Destination>
<ServiceType>transport</ServiceType>
<DepartureAdvanceShiftDays>0</DepartureAdvanceShiftDays>
<DeparturePostShiftDays>0</DeparturePostShiftDays>
<ReturnAdvanceShiftDays>0</ReturnAdvanceShiftDays>
<ReturnPostShiftDays>0</ReturnPostShiftDays>
<BookingSequence>1</BookingSequence>
</RoutePart>
<RoutePart>
<DateDepart>2024-10-15T00:00:00</DateDepart>
<DateReturn xsi:nil="true"/>
<Origin>Санкт-Петербург</Origin>
<Destination>Москва</Destination>
<ServiceType>transport</ServiceType>
<DepartureAdvanceShiftDays>0</DepartureAdvanceShiftDays>
<DeparturePostShiftDays>0</DeparturePostShiftDays>
<ReturnAdvanceShiftDays>0</ReturnAdvanceShiftDays>
<ReturnPostShiftDays>0</ReturnPostShiftDays>
<BookingSequence>1</BookingSequence>
</RoutePart>
</CustomRoute>
<CustomOptions>
<CustomOption>
<Key>routeControl</Key>
<Value>true</Value>
</CustomOption>
<CustomOption>
<Key>automaticServices</Key>
<Value>transport,hotel</Value>
</CustomOption>
<CustomOption>
<Key>updateMode</Key>
<Value>update</Value>
</CustomOption>
</CustomOptions>
<Persons>
<Person LastName="Лапочкина" FirstName="Елена" MiddleName="Александровна" LastNameLatin="Lapochkina" FirstNameLatin="Elena" MiddleNameLatin="Aleksandrovna" Gender="false" DateBirth="1980-02-06T00:00:00">
<INN>222222222222</INN>
<KPP>222222222</KPP>
<CountryAlpha2>RU</CountryAlpha2>
<Documents>
<Document CountryCode="RU" DocumentNumber="2323222222" DocumentType="NationalPassport" DateValid="2044-09-04T00:00:00"/>
</Documents>
<Contacts>
<Contact ContactType="MobilePhone" Value="+72222222222"/>
</Contacts>
<BonusCards/>
<PersonalVisas/>
<PersonalCodes>
<Code DictionaryName="тестнв" CodeValue="1234" IsPrimaryKey="true"/>
</PersonalCodes>
</Person>
</Persons>
<BudgetCodes/>
<AccountDetails id_Group="8418" GroupSecurityKey="**********" Email="usr8418@corteos.travel">
<id_Role>1</id_Role>
</AccountDetails>
<id_User>145077</id_User>
<CorteosId>95ee2174-e509-45ba-a370-d816d0f53193</CorteosId>
<CreationDate>2024-09-13T16:46:41.3831792+03:00</CreationDate>
<AugmentationData><xml /></AugmentationData>
</SetResult>
</SetResponse>
</soap:Body>
</soap:Envelope>
В ответе веб-сервиса нам следует обратить внимание на поле CorteosId (69строка)
Значение выглядит таким образом:
<CorteosId>xxxx-xxx-xxx-xxxx-xxxxxxxxx</CorteosId>
Данный идентификатор мы используем при SSO переходе на адрес:
https://домен/mods/ssoentrance/go?portalId=CorteosId
В процессе перехода по ссылке будет создана или изменена командировка с указанным номером в запросе OuterId и пользователь попадёт на страницу созданной (измененной) командировки.
При подключенном "Контейнер командировки: жесткое сохранение структуры маршрута" (ModComplexReserveRouteValidation) будет автоматически отрисован таймлайн поездки на основании тех параметров, которые были указаны при создании командировки.