Протокол взаимодействия с WEB сервером кинотеатра

Взаимодействие модуля "WEB сервер кинотеатра" с внешними (по отношению к Домино) службами осуществляется с помощью перечисленных API. Взаимодействие производится по протоколу HTTP посредством GET и POST запросов; данные передаются в формате XML. В стандартной поставке модуль "WEB сервер кинотеатра" работает по HTTP-протоколу с базовой аутентификацией (Basic Authentication Scheme).

Порядок обращения к серверу кинотеатра

Взаимодействие модуля "WEB сервер кинотеатра" с внешними (по отношению к Домино) службами осуществляется с помощью перечисленных ниже API. Взаимодействие производится по протоколу HTTP посредством GET и POST запросов; данные передаются в формате XML.

В стандартной поставке модуль "WEB сервер кинотеатра"  работает по HTTP-протоколу с базовой аутентификацией (Basic Authentication Scheme).

Таким образом, при обращении к серверу кинотеатра надо указывать имя и пароль.

Например: http://KINO:KINO@195.211.78.133:8081/kino/SITE.about 
где имя пользователя "KINO", пароль "KINO". 



Список API-функций

 

Функция

HTTP метод

Запрос списка кинотеатров

gettheatres

GET

Запрос списка залов

gethalls

GET

Запрос топологии зала

gethallplan

GET

Запрос списка фильмов

getfilms

GET

Запрос списка киносеансов

getshows

GET

Запрос информации о киносеансе

getshow

GET

Информация о сервисе

about

GET

 

 

 

Запрос на бронирование билетов

reserve

POST

Запрос состояния документа

getinfo

GET

Запрос на освобождение забронированных мест

unreserve

GET

Продажа

sale

GET

 

 

 

Отмена продажи (возврат)

unsale

GET

Подтверждение отмены продажи (возврата)

confirm_unsale

GET

 

Информационные запросы

Информационные запросы

Запрос списка кинотеатров - gettheatres

Запрос:
gettheatres - возвращает список кинотеатров.                                                                                                                                                   
Ответ:


<result errCode="Код ошибки" errText="Описание ошибки">
<theatres>
<theatre
id ="{КИНОТЕАТР}"
name="{КИНОТЕАТР.НАИМЕНОВАНИЕ}"
ip ="{КИНОТЕАТР.АДРЕС СЕРВЕРА}"
/>
</theatres>
</result>

Где:
{КИНОТЕАТР} - Идентификатор кинотеатра.
{КИНОТЕАТР.НАИМЕНОВАНИЕ} - Наименование кинотеатра.
{КИНОТЕАТР.АДРЕС СЕРВЕРА} - URL сервера кинотеатра (доменное имя или IP-адрес и порт).

Примечание: Данный запрос имеет смысл при работе с сетевыми структурами (компаниями, управляющими несколькими кинотеатрами).
В этом случае запрос выполняется к центральному серверу сети кинотеатров для получения списка URL кинотеатров. Последующие запросы целесообразнее выполнять непосредственно к серверам кинотеатров (за исключением каких-то общих данных, например, запроса по фильмам или запроса на получение консолидированной статистики по сети в целом).

Пример

http://195.211.78.133:8081/kino/SITE.gettheatres

<result errCode="0" errText="">
<theatres>
<theatre id="90000000000001C3" name="ИП Иванов" ip="http://195.211.78.133:8081"/>
<theatre id="900000000000000B" name="Софт-Вест" ip="195.211.78.133:8111"/>
</theatres>
</result>

Информационные запросы

2 Запрос списка залов - gethalls

Запрос:

gethalls[?theatreid={идентификатор кинотеатра}] - возвращает список кинозалов.   

     где необязательный параметр theatreid - идентификатор кинотеатра  

Ответ:


<result errCode="Код ошибки" errText="Описание ошибки">
<halls>
<hall
id ="{КИНОЗАЛ}"
name="{КИНОЗАЛ.НАИМЕНОВАНИЕ}"
pid ="{КИНОТЕАТР}"
/>
</halls>
</result>

Где:
{КИНОЗАЛ} - Идентификатор зала.
{КИНОЗАЛ.НАИМЕНОВАНИЕ} - Наименование зала.
{КИНОТЕАТР} - Идентификатор кинотеатра

Примеры:

http://195.211.78.133:8081/kino/site.gethalls?theatreid=900000000000000B
<result errCode="0" errText="">
<halls>
<hall id="9400000000000EE0" name="Зал 5 БОЛЬШОЙ" pid="900000000000000B"/>
<hall id="9400000000001721" name="VIP Test" pid="900000000000000B"/>
<hall id="9400000000000015" name="Зал 2" pid="900000000000000B"/>
<hall id="9400000000000140" name="Зал №3 VIP" pid="900000000000000B"/>
<hall id="94000000000004DA" name="Зал 4" pid="900000000000000B"/>
<hall id="9400000000000001" name="Зал 1" pid="900000000000000B"/>
<hall id="940000000000436D" name="ВИТЯ" pid="900000000000000B"/>
<hall id="9400000000005BF6" name="ТЕСТ" pid="900000000000000B"/>
</halls>
</result>

http://195.211.78.133:8081/kino/site.gethalls
<result errCode="0" errText="">
<halls>
<hall id="940000000000D23D" name="малый ЛЕВЫЙ" pid="90000000000001C3"/>
<hall id="9400000000000EE0" name="Зал 5 БОЛЬШОЙ" pid="900000000000000B"/>
<hall id="9400000000001721" name="VIP Test" pid="900000000000000B"/>
<hall id="9400000000000015" name="Зал 2" pid="900000000000000B"/>
<hall id="9400000000000140" name="Зал №3 VIP" pid="900000000000000B"/>
<hall id="94000000000004DA" name="Зал 4" pid="900000000000000B"/>
<hall id="9400000000000001" name="Зал 1" pid="900000000000000B"/>
<hall id="940000000000436D" name="ВИТЯ" pid="900000000000000B"/>
<hall id="9400000000005BF6" name="ТЕСТ" pid="900000000000000B"/>
</halls>
</result>

Примечание:

Параметр запроса theatreid – необязательный, задавать его имеет смысл только при обращении к центральному серверу сети. Если запрос выполняется к центральному серверу сети без указания theatreid, то ответ содержит все залы всех кинотеатров в виде линейного списка. В этом случае для определения кинотеатра, к которому относится данный кинозал, придется анализировать атрибут pid. Для получения от центрального сервера сети данных о залах конкретного кинотеатра необходимо указать идентификатор theatreid. Если же запрос выполняется непосредственно к серверу кинотеатра, то параметр theatreid можно не указывать.

 

Информационные запросы

3 Запрос топологии зала - gethallplan

Запрос:
            gethallplan?hallid={идентификатор зала} - возвращает описание топологии указанного кинозала.

где  hallid - идентификатор зала обязательный параметр

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки">
<hall
   id     ="{КИНОЗАЛ}"
   name   ="{КИНОЗАЛ.НАИМЕНОВАНИЕ}"
   rows   ="{КИНОЗАЛ.КОЛИЧЕСТВО_РЯДОВ_МАТРИЦЫ}"
   columns="{КИНОЗАЛ.КОЛИЧЕСТВО_КОЛОНОК_МАТРИЦЫ}"
   screenposition ="КИНОЗАЛ.ПОЛОЖЕНИЕ_ЭКРАНА">
   <seats>
      <seat
         seatid     ="{МЕСТО}" 
         seatstatus ="{МЕСТО.ТИП}"
         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"
         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"
         seatzone   ="{МЕСТО.ЦЕНОВАЯ_ЗОНА}"
         seatposx   ="{МЕСТО.ПОЗИЦИЯ_X}"
         seatposy   ="{МЕСТО.ПОЗИЦИЯ_Y}"
         seatindex  ="{МЕСТО.ИНДЕКС_МЕСТА}"
         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"
       />
   </seats>
</hall>
</result>

 

Где:

{КИНОЗАЛ} Идентификатор кинозала
{КИНОЗАЛ.НАИМЕНОВАНИЕ} Наименование кинозала
{КИНОЗАЛ.КОЛИЧЕСТВО_РЯДОВ_МАТРИЦЫ}{КИНОЗАЛ.КОЛИЧЕСТВО_КОЛОНОК_МАТРИЦЫ} В системе "Домино 8" топология зала сохраняется в виде матрицы, и каждый объект плана зала помещается в ячейку этой матрицы. Для отображения плана зала такой структуры часто бывает удобно заранее знать размеры матрицы.
{КИНОЗАЛ.ПОЛОЖЕНИЕ_ЭКРАНА} Расположение экрана на плане ("top" или "bottom")
{МЕСТО} Идентификатор места
{МЕСТО.ТИП} Тип места. Возможные значения:   «gangway» - пустое место (проход);   «seat» - кресло.
{МЕСТО.НОМЕР_РЯДА} Номер ряда
{МЕСТО.НОМЕР_МЕСТА} Номер места
{МЕСТО.ЦЕНОВАЯ_ЗОНА} Идентификатор ценовой зоны
{МЕСТО.ПОЗИЦИЯ_X} Горизонтальная позиция места в матрице зала (колонки матрицы)
{МЕСТО.ПОЗИЦИЯ_Y} Вертикальная позиция места в матрице зала (ряды матрицы)
{МЕСТО.ИНДЕКС_МЕСТА} Служебный параметр.
{МЕСТО.НОМЕР_ДИВАНА} Признак для группировки нескольких мест.
Пример:

http://195.211.78.133:8081/kino/site.gethallplan?hallid=940000000000D6B3

<result errCode="0" errText="">
<hall id="940000000000D6B3" name="Малый ПРАВЫЙ" screenposition="top" rows="3" columns="6">
<seats>
<seat seatid="980000000001FF14" seatstatus="gangway" seatzone="" seatrownum="1" seatnum="" groupid="" seatposx="0" seatposy="0" seatindex="0"/>
<seat seatid="980000000001FF15" seatstatus="seat" seatzone="0287000302870001" seatrownum="1" seatnum="1" groupid="" seatposx="1" seatposy="0" seatindex="1"/>
<seat seatid="980000000001FF16" seatstatus="seat" seatzone="0287000302870001" seatrownum="1" seatnum="2" groupid="" seatposx="2" seatposy="0" seatindex="2"/>
<seat seatid="980000000001FF17" seatstatus="gangway" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="0" seatindex="3"/>
<seat seatid="980000000001FF18" seatstatus="seat" seatzone="0287000302870001" seatrownum="1" seatnum="3" groupid="" seatposx="4" seatposy="0" seatindex="4"/>
<seat seatid="980000000001FF19" seatstatus="seat" seatzone="0287000302870001" seatrownum="1" seatnum="4" groupid="" seatposx="5" seatposy="0" seatindex="5"/>
<seat seatid="980000000001FF1A" seatstatus="gangway" seatzone="" seatrownum="2" seatnum="" groupid="" seatposx="0" seatposy="1" seatindex="6"/>
<seat seatid="980000000001FF1B" seatstatus="seat" seatzone="0287000302870003" seatrownum="2" seatnum="1" groupid="" seatposx="1" seatposy="1" seatindex="7"/>
<seat seatid="980000000001FF1C" seatstatus="seat" seatzone="0287000302870003" seatrownum="2" seatnum="2" groupid="" seatposx="2" seatposy="1" seatindex="8"/>
<seat seatid="980000000001FF1D" seatstatus="gangway" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="1" seatindex="9"/>
<seat seatid="980000000001FF1E" seatstatus="seat" seatzone="0287000302870003" seatrownum="2" seatnum="3" groupid="" seatposx="4" seatposy="1" seatindex="10"/>
<seat seatid="980000000001FF1F" seatstatus="seat" seatzone="0287000302870003" seatrownum="2" seatnum="4" groupid="" seatposx="5" seatposy="1" seatindex="11"/>
<seat seatid="980000000001FF20" seatstatus="gangway" seatzone="" seatrownum="3" seatnum="" groupid="" seatposx="0" seatposy="2" seatindex="12"/>
<seat seatid="980000000001FF21" seatstatus="seat" seatzone="0287000302870004" seatrownum="3" seatnum="1а" groupid="1" seatposx="1" seatposy="2" seatindex="13"/>
<seat seatid="980000000001FF22" seatstatus="seat" seatzone="0287000302870004" seatrownum="3" seatnum="1б" groupid="1" seatposx="2" seatposy="2" seatindex="14"/>
<seat seatid="980000000001FF23" seatstatus="gangway" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="2" seatindex="15"/>
<seat seatid="980000000001FF24" seatstatus="seat" seatzone="0287000302870004" seatrownum="3" seatnum="2а" groupid="2" seatposx="4" seatposy="2" seatindex="16"/>
<seat seatid="980000000001FF25" seatstatus="seat" seatzone="0287000302870004" seatrownum="3" seatnum="2б" groupid="2" seatposx="5" seatposy="2" seatindex="17"/>
</seats>
</hall>
</result>

Информационные запросы

4 Запрос списка фильмов - getfilms

Запрос:
getfilms[?theatreid={идентификатор кинотеатра}]- возвращает список фильмов, находящихся в прокате.                               

где необязательный параметр theatreid - идентификатор кинотеатра  

Ответ:


<result errCode="Код ошибки" errText="Описание ошибки">
<films>
<filmid ="{ФИЛЬМ}"
name ="{ФИЛЬМ.НАИМЕНОВАНИЕ}"
format ="{ФИЛЬМ.ФОРМАТ}"
showtime ="{ФИЛЬМ.ДЛИТЕЛЬНОСТЬ}"
age ="{ФИЛЬМ.ВОЗРАСТНЫЕ ОГРАНИЧЕНИЯ}"
datestart ="{ФИЛЬМ.НАЧАЛО ПОКАЗА}"
dateend ="{ФИЛЬМ.ОКОНЧАНИЕ ПОКАЗА}"
proculture_participant ="{ФИЛЬМ.УЧАСТНИК PRO.КУЛЬТУРА}"
proculture_id ="{ФИЛЬМ.ИДЕНТИФИКАТОР В PRO.КУЛЬТУРА}"
/>
</films>
</result>

где

{ФИЛЬМ} - Идентификатор фильма.
{ФИЛЬМ.НАИМЕНОВАНИЕ} - Наименование фильма.
{ФИЛЬМ.ФОРМАТ} - Формат фильма.
{ФИЛЬМ.ДЛИТЕЛЬНОСТЬ} - Длительность фильма в минутах.
{ФИЛЬМ.ВОЗРАСТНЫЕ ОГРАНИЧЕНИЯ} – Возрастные ограничения фильма.
{ФИЛЬМ.НАЧАЛО ПОКАЗА} – Начало показа фильма в формате ДД.ММ.ГГГГ.
{ФИЛЬМ.ОКОНЧАНИЕ ПОКАЗА} – Окончание показа фильма в формате ДД.ММ.ГГГГ.
{ФИЛЬМ.УЧАСТНИК PRO.КУЛЬТУРА} – Фильм участвует в программе PRO.Культура (true/false).
{ФИЛЬМ.ИДЕТНИФИКАТОР В PRO.КУЛЬТУРА } – Идентификатор фильма в программе PRO.Культура.

Пример:

http://195.211.78.133:8081/kino/site.getfilms
<result errCode="0" errText="">
<films>
<film id="8C00000000000337" name="Запретная зона" format="2D" showtime="90" age="16+" datestart="23.04.2020" dateend="01.09.2022" proculture_participant="no" proculture_id="986"/>
<film id="8C000000000008DB" name="Волк и лев" format="2D" showtime="100" age="6+" datestart="23.02.2022" dateend="23.04.2022" proculture_participant="no" proculture_id=""/>
<film id="8C000000000008DC" name="Венецианские тайны" format="2D" showtime="98" age="16+" datestart="10.02.2022" dateend="23.04.2022" proculture_participant="no" proculture_id=""/>
<film id="8C00000000000874" name="Человек-паук: Нет пути домой" format="3D" showtime="155" age="12+" datestart="18.12.2021" dateend="18.03.2022" proculture_participant="no" proculture_id=""/>
<film id="8C000000000008E9" name="Чемпион из Освенцима" format="2D" showtime="91" age="16+" datestart="27.01.2022" dateend="09.08.2022" proculture_participant="no" proculture_id=""/>
<film id="8C00000000000925" name="Тест ПК Летчик" format="2D" showtime="105" age="12+" datestart="02.12.2021" dateend="25.04.2023" proculture_participant="yes" proculture_id="1612506"/>
<film id="8C00000000000926" name="Тест ПК Тайна" format="2D" showtime="87" age="6+" datestart="20.01.2022" dateend="15.03.2023" proculture_participant="yes" proculture_id="1612520"/>
<film id="8C0000000000088B" name="Чемпион мира" format="2D" showtime="153" age="6+" datestart="12.01.2022" dateend="26.05.2022" proculture_participant="no" proculture_id="7834"/>
<film id="8C0000000000080F" name="Бабушка" format="2D" showtime="100" age="18+" datestart="10.03.2022" dateend="31.12.2022" proculture_participant="no" proculture_id=""/>
</films>
</result>

Примечание:

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

Информационные запросы

5 Запрос списка киносеансов - getshows

Запрос:
getshows[?theatreid={идентификатор кинотеатра}][?filmid={идентификатор фильма}][?showdate={ограничение по дате киносеанса}] - Возвращает список киносеансов.

где 

theatreid

- идентификатор кинотеатра

filmid

- идентификатор фильма

showdate

- ограничение по дате киносеанса

Примеры:

http://95.47.181.201:8112/kino/site.getshows?theatreid=9002000000000001

http://95.47.181.201:8112/kino/site.getshows?theatreid=9002000000000001&showdate=16.08.2014

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки">
   <shedule>
       <show   
           showid="{СЕАНС}"
           showdatetime="{СЕАНС.ДАТА_ВРЕМЯ}"
           showdate="{СЕАНС.ДАТА_КИНОСЕАНСА}"
           showtime="{СЕАНС.ВРЕМЯ_НАЧАЛА}"
           showfilm="{СЕАНС.ФИЛЬМ}"
           format="{СЕАНС.ФИЛЬМ.ФОРМАТ}"
          showfilmname="{СЕАНС.ФИЛЬМ.НАИМЕНОВАНИЕ}"
         showhallname="{СЕАНС.КИНОЗАЛ.НАИМЕНОВАНИЕ}"
         availablesale ="{СЕАНС.РАЗРЕШЕНА ИНТЕРНЕТ-ПРОДАЖА}"
         showhall     ="{СЕАНС.КИНОЗАЛ}"
         proculture_participant="{СЕАНС.ПРИЗНАК УЧАСТИЯ В ПУШКИНСКОЙ ПРОГРАММЕ}>
        <prices>
           <zone
               id="{СЕАНС.ЗОНА}"
               name="{СЕАНС.ЗОНА.НАИМЕНОВАНИЕ}" 
               price="{СЕАНС.ЦЕНА}">
                  <discount
                        discountid   ="{СЕАНС.СКИДКА}"
                        discountname ="{СЕАНС.СКИДКА.НАИМЕНОВАНИЕ}"
                        discounttype ="{СЕАНС.СКИДКА.ТИП}"
                        discountvalue="{СЕАНС.СКИДКА.ЗНАЧЕНИЕ}"/>
           </zone>
       </prices>
   </show>
</shedule>
</result>

 

где:

{СЕАНС}

Идентификатор киносеанса

{СЕАНС.ДАТА_ВРЕМЯ}

Дата и время начала киносеанса по традиционному времяисчислению в формате "ДД.ММ.ГГГГ чч:мм:сс"

{СЕАНС.ДАТА_КИНОСЕАНСА}

Дата киносеанса с учетом ночных сеансов: сеансы, начинающиеся после 24 часов, относятся к предыдущей календарной дате, в формате DD-MonthName-YY (например, «19-JAN-22»)

{СЕАНС.ВРЕМЯ_НАЧАЛА}

Время начала киносеанса (целое)

{СЕАНС.ФИЛЬМ}

Идентификатор фильма

{СЕАНС.ФИЛЬМ.ФОРМАТ}

Формат фильма

{СЕАНС.ФИЛЬМ.НАИМЕНОВАНИЕ}

Наименование фильма

{СЕАНС.КИНОЗАЛ}

Идентификатор кинозала

{СЕАНС.КИНОЗАЛ.НАИМЕНОВАНИЕ}

Наименование кинозала

{ СЕАНС.РАЗРЕШЕНА ИНТЕРНЕТ-ПРОДАЖА }

Признак доступности сеанса для продажи на сайте (0/1)

{СЕАНС.ЗОНА}

Идентификатор ценовой зоны

{СЕАНС.ЗОНА.НАИМЕНОВАНИЕ}

Наименование ценовой зоны (например, «боковые места», «VIP» или «loveseat»)

{СЕАНС.ЦЕНА }

Цена билета на данную ценовую зону

{СЕАНС.СКИДКА }

Идентификатор скидки

{СЕАНС.СКИДКА.НАИМЕНОВАНИЕ }

Наименование скидки (например, «Детский билет» или «Скидка для пенсионеров»)

{СЕАНС.СКИДКА.ТИП }

Алгоритм расчета скидки (например, «Процент от суммы билета» или «Фиксированная цена»)

{СЕАНС.СКИДКА.ЗНАЧЕНИЕ }

Значение скидки

{СЕАНС.ПРИЗНАК УЧАСТИЯ В ПУШКИНСКОЙ ПРОГРАММЕ}

Признак участия в Пушкинской программе (yes/no)

Пример:

http://195.211.78.133:8081/kino/SITE.gETSHOWS?theatreid=90000000000001C3&showdate=23.09.2022

<result errCode="0" errText="">
<shedule><show showid="940000000000D8A2" showdatetime="23.09.2022 16:45:00" showdate="23-SEP-22" showtime="60300" showfilm="8C0000000000094E" format="2D" showfilmname="Кот в сапогах" showhallname="малый ЛЕВЫЙ" availablesale="1" showhall="940000000000D23D" proculture_participant="yes"><prices>
<zone id="0287000302870001" name="Зона 1" price="120"><discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/><discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/></zone>
</prices></show>
<show showid="940000000000D8A3" showdatetime="23.09.2022 16:55:00" showdate="23-SEP-22" showtime="60900" showfilm="8C0000000000094F" format="2D" showfilmname="Мой Король" showhallname="Малый ПРАВЫЙ" availablesale="1" showhall="940000000000D6B3" proculture_participant="no"><prices>
<zone id="0287000302870004" name="Зона 3" price="130"><discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/><discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/></zone>
<zone id="0287000302870001" name="Зона 1" price="120"><discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/><discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/></zone>
<zone id="0287000302870003" name="Зона 2" price="120"><discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/><discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/></zone>
</prices></show>

..............................................................................................................

</shedule>
</result>

Примечание:

 

Информационные запросы

6 Запрос информации о киносеансе - getshow

Запрос:


getshow/?showid ={идентификатор киносеанса} возвращает информацию о киносеансе, включая состояние мест. включая состояние мест.

Пример:

http://195.211.78.133:8081/kino/site.getshow?showid=940000000000DC34

             

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки">

<show   showid       ="{СЕАНС}"   showdatetime ="{СЕАНС.ДАТА_ВРЕМЯ}"   showdate     ="{СЕАНС.ДАТА_КИНОСЕАНСА}"   showtime     ="{СЕАНС.ВРЕМЯ_НАЧАЛА}"   showfilm     ="{СЕАНС.ФИЛЬМ}"   format       ="{СЕАНС.ФИЛЬМ.ФОРМАТ}"   showfilmname ="{СЕАНС.ФИЛЬМ.НАИМЕНОВАНИЕ}"   showhallname ="{СЕАНС.КИНОЗАЛ.НАИМЕНОВАНИЕ}">   availablesale ="{СЕАНС.РАЗРЕШЕНА ИНТЕРНЕТ-ПРОДАЖА}"     showhall     ="{СЕАНС.КИНОЗАЛ}">

    <prices>
         <zone  id="{СЕАНС.ЗОНА}"   name="{СЕАНС.ЗОНА.НАИМЕНОВАНИЕ}"   price="{СЕАНС.ЦЕНА}">
         <discount    
              discountid="{СЕАНС.СКИДКА}"
              discountname="{СЕАНС.СКИДКА.НАИМЕНОВАНИЕ}"
              discounttype ="{СЕАНС.СКИДКА.ТИП}"
              discountvalue="{СЕАНС.СКИДКА.ЗНАЧЕНИЕ}"/>
         </zone>
   </prices>

   <hall id="{КИНОЗАЛ}"  name="{КИНОЗАЛ.НАИМЕНОВАНИЕ}" rows   ="{КИНОЗАЛ.КОЛИЧЕСТВО_РЯДОВ_МАТРИЦЫ}"      columns="{КИНОЗАЛ.КОЛИЧЕСТВО_КОЛОНОК_МАТРИЦЫ}">

   <seats>
      <seat seatid="{МЕСТО}" seatstatus ="{МЕСТО.ТИП}" statuscode ="{МЕСТО.КОД_СТАТУСА}"
         seatzone="{МЕСТО.ЦЕНОВАЯ_ЗОНА}"
         seatrownum="{МЕСТО.НОМЕР_РЯДА}" seatnum="{МЕСТО.НОМЕР_МЕСТА}"
         groupid="{МЕСТО.НОМЕР_ДИВАНА}"
         seatposx="{МЕСТО.ПОЗИЦИЯ_X}" seatposy="{МЕСТО.ПОЗИЦИЯ_Y}" seatindex="{МЕСТО.ИНДЕКС_МЕСТА}"/>
   </seats></hall>
</show>
</result>

 Где:Все значения атрибутов аналогичны запросам getshows и gethallplan.
          Добавочные атрибуты:  
                 - seatstatus – тип или состояние места.
                           Возможные значения: 
                                  «gangway» - пустое место (проход)
                                  «free»         - свободное место (кресло)
                                  «occupy»    - занятое место (кресло).
                 - seatstatus - для свободных мест "0", для пустых мест "" , для занятых - (2 - продано, 4 - забронировано, 18 - продано online    
                 - groupid   - номер дивана. Если указан номер дивана, место можно занять только вместе со вторым местом того же дивана.

 

<result errCode="0" errText="">
<show 
   showid="940000000000DC34"
   showdatetime="19.10.2022 17:50:00"
   showdate="19-OCT-22"
 showtime="64200" 
   showfilm="8C0000000000056D"
 format="2D" showfilmname="День города" 
   showhallname="Малый ПРАВЫЙ"
 availablesale="1" showhall="940000000000D6B3">
<prices>
<zone id="0287000302870004" name="Зона 3" price="100">
<discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/>
<discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/>
</zone>
<zone id="0287000302870001" name="Зона 1" price="100">
<discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/>
<discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/>
</zone>
<zone id="0287000302870003" name="Зона 2" price="100">
<discount discountid="880000000000000B" discountname="Детский билет" discounttype="0046000E013B0002" discountvalue="30"/>
<discount discountid="8800000000000016" discountname="Студентам" discounttype="0046000E013B0002" discountvalue="20"/>
</zone>
</prices>
<hall id="940000000000D6B3" name="Малый ПРАВЫЙ" rows="3" columns="6">
<seats>
<seat seatid="980000000001FF14" seatstatus="gangway" statuscode="" seatzone="" seatrownum="1" seatnum="" groupid="" seatposx="0" seatposy="0" seatindex="0"/>
<seat seatid="980000000001FF15" seatstatus="occupy" statuscode="2" seatzone="0287000302870001" seatrownum="1" seatnum="1" groupid="" seatposx="1" seatposy="0" seatindex="1"/>
<seat seatid="980000000001FF16" seatstatus="free" statuscode="0" seatzone="0287000302870001" seatrownum="1" seatnum="2" groupid="" seatposx="2" seatposy="0" seatindex="2"/>
<seat seatid="980000000001FF17" seatstatus="gangway" statuscode="" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="0" seatindex="3"/>
<seat seatid="980000000001FF18" seatstatus="free" statuscode="0" seatzone="0287000302870001" seatrownum="1" seatnum="3" groupid="" seatposx="4" seatposy="0" seatindex="4"/>
<seat seatid="980000000001FF19" seatstatus="free" statuscode="0" seatzone="0287000302870001" seatrownum="1" seatnum="4" groupid="" seatposx="5" seatposy="0" seatindex="5"/>
<seat seatid="980000000001FF1A" seatstatus="gangway" statuscode="" seatzone="" seatrownum="2" seatnum="" groupid="" seatposx="0" seatposy="1" seatindex="6"/>
<seat seatid="980000000001FF1B" seatstatus="free" statuscode="0" seatzone="0287000302870003" seatrownum="2" seatnum="1" groupid="" seatposx="1" seatposy="1" seatindex="7"/>
<seat seatid="980000000001FF1C" seatstatus="free" statuscode="0" seatzone="0287000302870003" seatrownum="2" seatnum="2" groupid="" seatposx="2" seatposy="1" seatindex="8"/>
<seat seatid="980000000001FF1D" seatstatus="gangway" statuscode="" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="1" seatindex="9"/>
<seat seatid="980000000001FF1E" seatstatus="free" statuscode="0" seatzone="0287000302870003" seatrownum="2" seatnum="3" groupid="" seatposx="4" seatposy="1" seatindex="10"/>
<seat seatid="980000000001FF1F" seatstatus="free" statuscode="0" seatzone="0287000302870003" seatrownum="2" seatnum="4" groupid="" seatposx="5" seatposy="1" seatindex="11"/>
<seat seatid="980000000001FF20" seatstatus="gangway" statuscode="" seatzone="" seatrownum="3" seatnum="" groupid="" seatposx="0" seatposy="2" seatindex="12"/>
<seat seatid="980000000001FF21" seatstatus="free" statuscode="0" seatzone="0287000302870004" seatrownum="3" seatnum="" groupid="1" seatposx="1" seatposy="2" seatindex="13"/>
<seat seatid="980000000001FF22" seatstatus="free" statuscode="0" seatzone="0287000302870004" seatrownum="3" seatnum="" groupid="1" seatposx="2" seatposy="2" seatindex="14"/>
<seat seatid="980000000001FF23" seatstatus="gangway" statuscode="" seatzone="" seatrownum="" seatnum="" groupid="" seatposx="3" seatposy="2" seatindex="15"/>
<seat seatid="980000000001FF24" seatstatus="occupy" statuscode="4" seatzone="0287000302870004" seatrownum="3" seatnum="" groupid="2" seatposx="4" seatposy="2" seatindex="16"/>
<seat seatid="980000000001FF25" seatstatus="occupy" statuscode="4" seatzone="0287000302870004" seatrownum="3" seatnum="" groupid="2" seatposx="5" seatposy="2" seatindex="17"/>
</seats>
</hall>
</show>
</result>

Примечание:

 

Информационные запросы

7 Запрос информации о сервисе - about

Запрос:

            about - возвращает информацию о сервисе

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки">

<server

   name    ="{НАИМЕНОВАНИЕ СЛУЖБЫ}"

   version ="{ВЕРСИЯ ПРОТОКОЛА}"

/>

</result>

 

Бронирование и продажа

Бронирование и продажа

1 Общая технологическая цепочка

Выдача билетов, купленных или зарезервированных через интернет-сервис, производится в кассе кинотеатра. Идентификация зрителя производится по коду или штриховому коду, который сообщается зрителю при покупке или бронировании через интернет-сервис

 

Бронирование и продажа

2 Запрос на бронирование билетов -reserve

Запрос:

               reserve - посылает команду на бронирование списка выбранных мест.

Запрос на резервирование билетов передается методом POST в соответствии с RFC1867

 

Параметры:

               xmldata  – данные в формате:

 

<reservation userLogin="" userPwd="" showId="" email="" guest="">

<seats>

   <seat seatId="" discountId=""/>

</seats>

</reservation>

 

Где:

showId     - Идентификатор киносеанса.

userLogin  – Учетная запись службы, осуществляющей бронирование.

userPwd    - Пароль службы, осуществляющей бронирование.

email      - электронная почта зрителя, на которого осуществляется бронирование.

guest      - Имя или идентификатор зрителя, на которого осуществляется бронирование.

seatId     - Идентификатор места (обязательный параметр)

discountId - Идентификатор скидки (необязательный параметр)

 

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки">

<reservation 

   docid        ="Идентификатор документа"

   reservnum    ="Номер брони"

   showid       ="Идентификатор киносеанса"

   showfilmname ="Наименование фильма"

   showdatetime ="Дата-время начала сеанса в формате ДД.ММ.ГГГГ ЧЧ:мм:СС"

   reservstatus ="Состояние брони"

   actualdate   ="Дата и время снятия брони"

   reservdate   ="Дата и время оформления транзакции бронирования"

   guest        ="Имя или идентификатор зрителя на которого оформлена бронь"

   service      ="Идентификатор службы">

   <seats>

      <seat

         seatid     ="{МЕСТО}"         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"         seatprice  ="{МЕСТО.ЦЕНА}"         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"         seatstate  ="1"

      />

   </seats>

</reservation>

</result>  

Список ошибок:

0 - Успешное проведение транзакции.

1 - Ошибка авторизации.

2 - Ошибка сеанса. Указанный киносеанс не существует или не доступен для продаж

3 - Неверно указаны места. (например, место относится к другому залу).

4 - Места забронировать невозможно.

5 - Места уже заняты. (С момента ответа о состоянии мест зала и до отправки команды на бронирование могло пройти много времени, и эти места на момент оформления транзакции уже заняты).

6 – Сеанс недоступен для продаж.

7 - Недостаточно времени до начала сеанса или Превышено количество мест, доступных для бронирования на один сеанс.

8 – Указанная скидка не существует.

9 - Невозможно забронировать места на данный сеанс.

 

Бронирование и продажа

3 Запрос информации о брони - getinfo

Запрос:

            getinfo - возвращает информацию о документе с указанным идентификатором

Параметры:

userlogin - Логин пользователя (службы), осуществляющего бронирование

userpwd  - Пароль пользователя (службы), осуществляющего бронирование

docid       - Идентификатор документа бронирования

 

Пример:

http://95.47.181.201:8112/kino/site.getinfo?docid =xxxxxx&userlogin=demo&userpwd=demo

 

Ответ:

<result errCode ="Код ошибки" errText="Описание ошибки"

<reservation 

   docid        ="Идентификатор документа"

   reservnum    ="Номер брони"

   showid       ="Идентификатор киносеанса"

   showfilmname ="Наименование фильма"

   showdatetime ="Дата-время начала сеанса в формате ДД.ММ.ГГГГ ЧЧ:мм:СС"

   reservstatus ="Состояние брони"

   actualdate   ="Дата и время снятия брони"

   reservdate   ="Дата и время оформления транзакции бронирования"

   guest        ="Имя или идентификатор зрителя, на которого оформлена бронь"

   service      ="Идентификатор службы">   paymenttype  ="Тип оплаты">

   <seats>

      <seat

         seatid     ="{МЕСТО}"         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"         seatprice  ="{МЕСТО.ЦЕНА}"         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"

      />

   </seats>

</reservation>

</result> 

Список ошибок:

0 - Запрос успешно выполнен
1 - Ошибка авторизации
2 - Неверный идентификатор брони
3 - Недостаточно прав на данную операцию (бронь существует, но оформлена под учетной записью другой службы)

 

Примечание: указанная в ответном сообщении сумма является ориентировочной. Конечная стоимость забронированных билетов определяется при продаже.

 

Бронирование и продажа

4 Отмена брони - unreserve

Запрос:

            unreserve - отмена брони с указанным идентификатором

Параметры:

userlogin - Логин пользователя (службы), осуществляющего бронирование

userpwd  - Пароль пользователя (службы), осуществляющего бронирование

docid       - Идентификатор документа бронирования

 

Ответ:

<result errCode="Код ошибки" errText="Описание ошибки" docid="Идентификатор документа" />

 

Список ошибок:

0 - Запрос успешно выполнен.
1 - Ошибка авторизации.
2 - Неверный идентификатор брони
3 - Недостаточно прав на данную операцию.

4 - Неверный статус брони (невозможно снять бронь, поскольку по ней уже были продажи).

 

Бронирование и продажа

5 Продажа- sale

Запрос:

sale - продажа предварительно забронированных мест.

Параметры:

userlogin         - Логин пользователя (службы), осуществляющего бронирование

userpwd          - Пароль пользователя (службы), осуществляющего бронирование

docid               - Идентификатор документа бронирования

paymenttype   - Тип оплаты (1 – Пушкинская карта, 2 – кредитная карта)

terminalowner - ИНН владельца платежного терминала

terminalid        - Идентификатор платежного терминала

rrn                   - RRN платежной транзакции

 

Ответ:

<result errCode ="Код ошибки" errText="Описание ошибки"

<sale 

   docid        ="Идентификатор документа"

   reservnum    ="Номер брони"

   showid       ="Идентификатор киносеанса"

   showfilmname ="Наименование фильма"

   showdatetime ="Дата-время начала сеанса в формате ДД.ММ.ГГГГ ЧЧ:мм:СС"

   reservstatus ="Состояние брони"

   actualdate   ="Дата и время снятия брони"

   reservdate   ="Дата и время оформления транзакции бронирования"

   guest        ="Имя или идентификатор зрителя, на которого оформлена бронь"

   service      ="Идентификатор службы">   paymenttype  ="Тип оплаты">

   <seats>

      <seat

         seatid     ="{МЕСТО}"         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"         seatprice  ="{МЕСТО.ЦЕНА}"         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"

      />

   </seats>

</sale>

</result>

 

 

Список ошибок:

0 - Запрос успешно выполнен.

1 - Ошибка авторизации.

2 - Неверный идентификатор документа.

3 - Недостаточно прав на данную операцию.

4 - Неверный статус.

5 - Неверный тип оплаты (при попытке оплаты Пушкинской картой билета на фильм, не участвующий в программе PRO.Культура)

Бронирование и продажа

6 Возврат - unsale(запрос на отмену выкупленного места)

Запрос:

unsale- возврат проданных мест

Параметры:

userlogin - Логин пользователя (службы), осуществляющего бронирование

userpwd  - Пароль пользователя (службы), осуществляющего бронирование

docid       - Идентификатор документа бронирования

Ответ:

<result

   errCode="Код ошибки"

   errText="Описание ошибки"

   docid  ="Идентификатор документа">

<unsale 

   Docid        ="Идентификатор документа"

   reservnum    ="Номер брони"

   showid       ="Идентификатор киносеанса"

   showfilmname ="Наименование фильма"

   showdatetime ="Дата-время начала сеанса в формате ДД.ММ.ГГГГ ЧЧ:мм:СС"

   reservstatus ="Состояние брони"

   actualdate   ="Дата и время снятия брони"

   reservdate   ="Дата и время оформления транзакции бронирования"

   guest        ="Имя или идентификатор зрителя, на которого оформлена бронь"

   service      ="Идентификатор службы">   paymenttype  ="Тип оплаты">

   <seats>

      <seat

         seatid     ="{МЕСТО}"         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"         seatprice  ="{МЕСТО.ЦЕНА}"         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"

      />

   </seats>

</unsale>

</result>

 

Список ошибок:

0 - Запрос успешно выполнен.

1 - Ошибка авторизации.

2 - Неверный идентификатор документа.

3 - Недостаточно прав на данную операцию.

4 - Неверный статус.

 

Бронирование и продажа

7 Подтверждение возврата – confirm_unsale

Запрос:

confirm_unsale- завершение возврата проданных мест с указанием реквизитов оплаты.

Параметры:

userlogin         - Логин пользователя (службы), осуществляющего бронирование

userpwd          - Пароль пользователя (службы), осуществляющего бронирование

docid               - Идентификатор документа бронирования

paymenttype   - Тип оплаты (1 – Пушкинская карта, 2 – кредитная карта)

terminalowner - ИНН владельца платежного терминала

terminalid        - Идентификатор платежного терминала

rrn                   - RRN платежной транзакции

Ответ:

<result

   errCode="Код ошибки"

   errText="Описание ошибки"

   docid  ="Идентификатор документа">

<unsale 

   docid        ="Идентификатор документа"

   reservnum    ="Номер брони"

   showid       ="Идентификатор киносеанса"

   showfilmname ="Наименование фильма"

   showdatetime ="Дата-время начала сеанса в формате ДД.ММ.ГГГГ ЧЧ:мм:СС"

   reservstatus ="Состояние брони"

   actualdate   ="Дата и время снятия брони"

   reservdate   ="Дата и время оформления транзакции бронирования"

   guest        ="Имя или идентификатор зрителя, на которого оформлена бронь"

   service      ="Идентификатор службы">   paymenttype  ="Тип оплаты">

   <seats>

      <seat

         seatid     ="{МЕСТО}"         seatrownum ="{МЕСТО.НОМЕР_РЯДА}"         seatnum    ="{МЕСТО.НОМЕР_МЕСТА}"         seatprice  ="{МЕСТО.ЦЕНА}"         groupid    ="{МЕСТО.НОМЕР_ДИВАНА}"

      />

   </seats>

</unsale>

</result>

 

Список ошибок:

0 - Запрос успешно выполнен.

1 - Ошибка авторизации.

2 - Неверный идентификатор документа.

3 - Недостаточно прав на данную операцию.

4 - Неверный статус.

5 - Неверный тип оплаты (при попытке возврата иным типом оплаты, чем при продаже).