Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Постановка задачи

При переходе через SSO необходимо передавать следующие данные:

  1. информацию о пользователе системы для создания пользователя на лету

  2. информацию о пассажирах и кодах

  3. информацию о структуре поездки: участки маршрута и даты + разрешенные основные(авиа, ж/д и отели) и дополнительные услуги

Система должна позволять обновлять информацию о маршруте при передаче данных из внешней системы для работы с командировкой-черновиком

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

Настройки базовой системы

Для корректного сопоставления персон, нам необходимо создать справочник структурных кодов, привязанный ко всем организациям внутри группы клиента, который будет содержать уникальный идентификатор внешней системы, на основании которого будет проводиться обновление данных пассажира.

Активация и настройка модов

В данной задаче моды достаточно просто активировать, настройку производить нет необходимости сверх базовых настроек SSO-портала.

Необходимо активировать моды:

  1. Интеграция с SSO - для обеспечения возможности перехода из SAP и передачи параметров заявки

  2. Детальный маршрут для SSO - для передачи и контроля целостности участков маршрута

  3. Бизнес-логика Норникель - специальный формат передачи участков в соответствии с требованиями интегратора

Web Services

В данной задаче используется стандартный веб-сервис SSO: http://test.sso.corteos.ru/Documentation/GeneralWebService

Сценарий использования

При переходе при помощи 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>2000000171</sso:OuterId>
			<sso:CustomRoute>
				<sso:RoutePart>
					<sso:DateDepart>2020-12-14</sso:DateDepart>
					<sso:Origin>Москва</sso:Origin>
					<sso:Destination>Санкт-Петербург</sso:Destination>
					<sso:DepartureAdvanceShiftDays>1</sso:DepartureAdvanceShiftDays>
					<sso:DeparturePostShiftDays>1</sso:DeparturePostShiftDays>
					<sso:ReturnAdvanceShiftDays>0</sso:ReturnAdvanceShiftDays>
					<sso:ReturnPostShiftDays>0</sso:ReturnPostShiftDays>
					<sso:BookingSequence>1</sso:BookingSequence>
				</sso:RoutePart>
				<sso:RoutePart>
					<sso:DateDepart>2020-12-16</sso:DateDepart>
					<sso:Origin>Самара</sso:Origin>
					<sso:Destination>Санкт-Петербург</sso:Destination>
					<sso:DepartureAdvanceShiftDays>1</sso:DepartureAdvanceShiftDays>
					<sso:DeparturePostShiftDays>1</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>allowedExtraServices</sso:Key>
                  <sso:Value>transfer</sso:Value>
               </sso:CustomOption>
               <sso:CustomOption>
                  <sso:Key>updateMode</sso:Key>
                  <sso:Value>update</sso:Value>
               </sso:CustomOption>
               <sso:CustomOption>
                  <sso:Key>personalDays</sso:Key>
                  <sso:Value>2020-12-14,2020-12-15</sso:Value>
               </sso:CustomOption>
            </sso:CustomOptions>
             <sso:Persons>
               <!--Zero or more repetitions:-->
               <sso:Person LastName="Максимов" FirstName="Максим" MiddleName="Максимович" 
               LastNameLatin="Maximov" FirstNameLatin="Maxim" MiddleNameLatin="Maximovich" Gender="true" DateBirth="2000-02-01">
                  <!--Optional:-->
                  <sso:INN>987987987</sso:INN>
                  <!--Optional:-->
                  <sso:KPP>779901001</sso:KPP>
                  <!--Optional:-->
                  <sso:CountryAlpha2>RU</sso:CountryAlpha2>
                  <!--Optional:-->
                  <sso:Documents>
                     <!--Zero or more repetitions:-->
                     <sso:Document CountryCode="RU" DocumentNumber="4505111222" DocumentType="NationalPassport" DateValid="2030-10-10"/>
                  </sso:Documents>
                  <!--Optional:-->
                  <sso:Contacts>
                     <!--Zero or more repetitions:-->
                     <sso:Contact ContactType="MobilePhone" Value="+79162223311"/>
                  </sso:Contacts>
                  <!--Optional:-->
                  <sso:PersonalCodes>
                     <!--Zero or more repetitions:-->
                     <sso:Code DictionaryName="Идентификатор в SAP" CodeValue="1234" IsPrimaryKey="true"/>
                  </sso:PersonalCodes>
               </sso:Person>
            </sso:Persons>
            <sso:AccountDetails id_Group="XX" GroupSecurityKey="test" Email="user@somedomain.ru">
                <sso:PersonToCreate LastName="Админских" FirstName="Максим" MiddleName="Валерьевич" 
               	  LastNameLatin="Adminskih" FirstNameLatin="Maksim" MiddleNameLatin="Valerievich" Gender="true" DateBirth="2000-01-02">
                  <sso:INN>987987987</sso:INN>
                  <sso:KPP>779901001</sso:KPP>
                  <sso:CountryAlpha2>RU</sso:CountryAlpha2>
               </sso:PersonToCreate>
               <sso:id_Role>1</sso:id_Role>
            </sso:AccountDetails>
         </sso:request>
      </sso:Set>
   </soapenv:Body>
</soapenv:Envelope>

Разберем структуру запроса более детально:

  • OuterId - идентификатор заявки в SAP, по нему система понимает, что делать - обновить существующую командировку(если с таким номером уже был переход ранее) или создать новую

  • CustomRoute - участки маршрута, целостность которых мы контролируем

    • RoutePart - элемент маршрута, один участок

      • Origin - string, обязательный элемент, название или цифровой идентификатор города из справочника городов

      • Destination - string, обязательный элемент, название или цифровой идентификатор города из справочника городов

      • DateDepart - datetime, обязательный элемент, дата отправления пассажира в пункт назначения

      • DateReturn - datetime, не обязательный элемент, нужен для участков вида туда и обратно

      • DepartureAdvanceShiftDays - int, обязательный, на сколько дней назад можно сдвинуть вылет в пункт назначения

      • DeparturePostShiftDays - int, обязательный, на сколько дней вперед можно сдвинуть вылет в пункт назначения

      • ReturnAdvanceShiftDays - int, обязательный, на сколько дней назад можно сдвинуть возвращение в пункт отправления, для маршрута в одну сторону передаем 0

      • ReturnPostShiftDays - int, обязательный, на сколько дней вперед можно сдвинуть возвращение в пункт отправления, для маршрута в одну сторону передаем 0

      • BookingSequence - int, обязательный, в том случае, если нам нужно бронировать услуги друг за другом(например, сперва один участок, а потом другой), то тут передаем последовательность этой процедуры бронирования. Если нас это не волнует, а мы работаем в стандартном режиме: сперва транспорт, потом гостиницы, потом сервисы, то всегда передаем 1

  • Persons - список пассажиров командировки, подробности о структуре данных можно почитать на SSO портале.

  • AccountDetails - информация о пользователе для создания аккаунта на лету или входа в систему. Если пассажир также является пользователем, его все равно надо передать в секции Persons, т.е. дублируем данные для унификации.

  • No labels