Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

...

...

...

Note

Обязательно отключить мод Первичный контейнер командировки

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

1. Произвести настройки Интеграции с SSO -

...

https://

...

corteos-platform.

...

atlassian.

...

net/wiki/x/acsK

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

Warning
Мод "Контейнер командировки: жесткое сохранение структуры маршрута" (ModComplexReserveRouteValidation) и мод "Контейнер командировки: мягкое сохранение структуры маршрута" (ModComplexReserveRelaxedRouteValidation)совместно не работают.

Web Services
Описание службы: http3. Для корректного сопоставления персон, нам необходимо создать https://test.sso.corteos.ru/XmlGate/DataService.asmx
Файл WSDL: https://test.sso.corteos.ru/XmlGate/DataService.asmx?WSDL

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

...

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

...

Web Services


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



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

Code Block
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sso="https://sso.corteos.ru/">
   <soapenv:Header/>
   <soapenv:Body>
      <sso:Set>
         <!--Optional:-->
  <sso:request>
      <sso:request>           <sso:OuterId>0000000001<OuterId>тест1234567890</sso:OuterId>
			<sso:CustomRoute>
				<sso:RoutePart>
					<sso:DateDepart>2024-10-09</sso:DateDepart>
         <!--Optional:-->           <sso:Origin>Москва</sso:Origin>
					<sso:Destination>Санкт-Петербург</sso:Destination>
<sso:CurrentRoute>
              					<sso:ServiceType>transport</sso:ServiceType>
<!--Optional:sso:ServiceType>transport,lodging</sso:ServiceType-->	
	                <sso:Origin>Москва<DepartureAdvanceShiftDays>0</sso:Origin>
DepartureAdvanceShiftDays>
					<sso:DeparturePostShiftDays>0</sso:DeparturePostShiftDays>
              <!--Optional:-->      <sso:ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays>
					<sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays>
        <sso:Destination>Санкт-Петербург</sso:Destination>
               <sso:DepartureDate>2024-09-21<BookingSequence>1</sso:DepartureDate>
               <sso:ReturnDate>2024-09-22</sso:ReturnDate>
            </sso:CurrentRoute>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>
            <!--Optional:-->
            <sso:Persons>
   ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays>
					<sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays>
					<sso:BookingSequence>1</sso:BookingSequence>
				</sso:RoutePart>
			</sso:CustomRoute>
           <!--Zero or more repetitions:--> <sso:CustomOptions>
               <sso:Person LastName="Ли" FirstName="Лида" MiddleName="Ивановна" LastNameLatin="Li" FirstNameLatin="Lida" MiddleNameLatin="Ivanovna" Gender="false" DateBirth="1988-10-11">CustomOption>
                  <sso:Key>routeControl</sso:Key>
           <!--Optional:-->
                  <sso:INN>111111111111<Value>true</sso:INN>
 Value>
                <!--Optional:-->
 </sso:CustomOption>
                <sso:KPP>111111111</sso:KPP>CustomOption>
                  <!--Optional:--><sso:Key>automaticServices</sso:Key>
                  <sso:CountryAlpha2>RU<Value>transport,hotel</sso:CountryAlpha2>Value>
               </sso:CustomOption>
   <!--Optional:-->             <sso:CustomOption>
     <sso:PersonalCodes>             <sso:Key>updateMode</sso:Key>
        <!--Zero  or more repetitions:-->      <sso:Value>update</sso:Value>
               <sso:Code DictionaryName="Табельный номер" CodeValue="00003" IsPrimaryKey="true" /></sso:CustomOption>
               </sso:CustomOptions>
          </sso:PersonalCodes>   <sso:Persons>
            </sso:Person>   <sso:Person LastName="Лапочкина" FirstName="Елена" MiddleName="Александровна" 
     </sso:Persons>             <!--Optional:-->
            <sso:AccountDetails id_Group="8417" GroupSecurityKey="359ED695-6B6F-464E-957F-2D2033ACFFD5" Email="usr8417@corteos.travel"/LastNameLatin="Lapochkina" FirstNameLatin="Elena" MiddleNameLatin="Aleksandrovna" Gender="false" DateBirth="1980-02-06">
         </sso:request>       <  <sso:INN>222222222222</sso:Set>INN>
                  <<sso:KPP>222222222</soapenv:Body>
</soapenv:Envelope>

...

Данное значение обязательно должно быть уникальным.

Ключ isPrimaryKey = true позволяет определить, какой код отвечает за идентификатор пользователя. По этому параметру синхронизируются данные из запроса с данными в БД и обновляются значениями, передаваемыми в запросе.

Если такого параметра нет, то мы пробуем искать по документу, а потом по ФИО + ДР. Если никто не нашелся, создаем нового.
AccountDetails - данные для авторизации пользователя из внутренней клиентской системы Corteos
id_Group-int, идентификатор компании заказчика,
GroupSecurityKey- ключ для SSO,
Email - это логин пользователя, который создает командировку,
Параметры id_Group и GroupSecurityKey для AccountDetails предоставляются агентством,также их можно определить в настройках договора:

...

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

Code Block
<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>0000000001</OuterId>
            <CurrentRoute>
               <Origin>Москва</Origin>
               <Destination>Санкт-Петербург</Destination>
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>

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


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

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

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

Code Block
<sso:CustomOption>
                  <sso:Key>updateMode</sso:Key>
                  <sso:Value>update</sso:Value>
               </sso:CustomOption>

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

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

Code Block
  <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,отчество персоны, если нет - передаем пробельный символ,
LastNameLatinFirstNameLatinMiddleNameLatin-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:

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

...

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

Code Block
<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>
            <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">
              <DepartureDate>2024-09-21T00:00:00</DepartureDate>       <INN>222222222222</INN>
        <ReturnDate>2024-09-22T00:00:00</ReturnDate>             <<KPP>222222222</CurrentRoute>KPP>
            <CustomRoute/>      <CountryAlpha2>RU</CountryAlpha2>
      <CustomOptions/>            <Documents>
<Persons>                <Person LastName="Ли" FirstName="Лида" MiddleName="Ивановна" LastNameLatin="Li" FirstNameLatin="Lida" MiddleNameLatin="Ivanovna" Gender="false" DateBirth="1988-10-11T00    <Document CountryCode="RU" DocumentNumber="2323222222" DocumentType="NationalPassport" DateValid="2044-09-04T00:00:00"/>
                  <INN>111111111111<</INN>Documents>
                  <KPP>111111111</KPP><Contacts>
                  <CountryAlpha2>RU</CountryAlpha2>                   <Documents<Contact ContactType="MobilePhone" Value="+72222222222"/>
                  <Contacts</>Contacts>
                  <BonusCards/>
                  <PersonalVisas/>
                  <PersonalCodes>
                     <Code DictionaryName="Табельный номертестнв" CodeValue="000031234" IsPrimaryKey="true"/>
                  </PersonalCodes>
               </Person>
            </Persons>
            <BudgetCodes/>
            <AccountDetails id_Group="84178418" GroupSecurityKey="359ED6952D6DE573-6B6FCBAD-464E4437-957F90E6-2D2033ACFFD50F4CFE31936C" Email="usr8417@corteosusr8418@corteos.travel">
               <id_Role xsi:nil="true"/>Role>1</id_Role>
            </AccountDetails>
            <id_User>145076<User>145077</id_User>
            <CorteosId>9e3dec0a<CorteosId>95ee2174-f6d6e509-476d45ba-8061a370-827ce3429494<d816d0f53193</CorteosId>
            <CreationDate>2024-0809-27T1413T16:5046:2441.8535373831792+03:00</CreationDate>
            <AugmentationData>&lt;xml /></AugmentationData>
         </SetResult>
      </SetResponse>
   </soap:Body>
</soap:Envelope>

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

...

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

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

Note

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

Если был включен мод "Контейнер командировки: жесткое сохранение структуры маршрута" (ModComplexReserveRouteValidation) будет автоматически отрисован таймлайн поездки на основании тех параметров которые вы указали при создании командировки

 

...

Если был включен мод "Контейнер командировки: мягкое сохранение структуры маршрута" (ModComplexReserveRelaxedRouteValidation) не будет отрисован таймлайн, он появится только после добавления услуг.

...