Протокол взаимодействия с WEB сервером кинотеатра
Взаимодействие модуля "WEB сервер кинотеатра" с внешними (по отношению к Домино) службами осуществляется с помощью перечисленных API. Взаимодействие производится по протоколу HTTP посредством GET и POST запросов; данные передаются в формате XML. В стандартной поставке модуль "WEB сервер кинотеатра" работает по HTTP-протоколу с базовой аутентификацией (Basic Authentication Scheme).
- Порядок обращения к серверу кинотеатра
- Список API-функций
- Информационные запросы
- Запрос списка кинотеатров - gettheatres
- 2 Запрос списка залов - gethalls
- 3 Запрос топологии зала - gethallplan
- 4 Запрос списка фильмов - getfilms
- 5 Запрос списка киносеансов - getshows
- 6 Запрос информации о киносеансе - getshow
- 7 Запрос информации о сервисе - about
- Бронирование и продажа
Порядок обращения к серверу кинотеатра
Взаимодействие модуля "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
Запрос:
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>
Примечание:
- Все вышеперечисленные параметры не являются обязательными и могут быть использованы в произвольных комбинациях.
- Параметр запроса showdate – это дата рабочего дня кинотеатра. Сеансы, начинающиеся после 24 часов, относятся к предыдущей календарной дате (дате рабочего дня кинотеатра). Дата представлена в формате DD.MM.YYYY.
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 - номер дивана. Если указан номер дивана, место можно занять только вместе со вторым местом того же дивана.
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">
Примечание:
- Для задач, связанных с бронированием или продажей через интернет, пока не возникало необходимости в отображении всех возможных типов мест или состояний места. В большинстве случаев достаточно определить, является ли место зрительским креслом или проходом; если это кресло, нужно отобразить его состояние (занято или свободно).
- Некоторые типы мест (такие, например, как места для инвалидов) по умолчанию отображаются типом gangway (проход) и не используются для интернет-продаж, поскольку такие места не оборудованы креслом. Такой подход используется для того, чтобы интернет-пользователь не забронировал или купил место, не обратив внимание на отсутствие кресла.
7 Запрос информации о сервисе - about
Запрос:
about - возвращает информацию о сервисе
Ответ:
<result errCode="Код ошибки" errText="Описание ошибки">
<server
name ="{НАИМЕНОВАНИЕ СЛУЖБЫ}"
version ="{ВЕРСИЯ ПРОТОКОЛА}"
/>
</result>
Бронирование и продажа
1 Общая технологическая цепочка
-
Сервис, осуществляющий бронирование, заключает договор с кинотеатром и получает соответствующий аккаунт.
-
Запрос на резервирование мест передается кинотеатру сервисом, осуществляющим бронирование. В случае успешного выполнения в базе кинотеатра создается документ резервирования мест на указанный сеанс для указанного зрителя. Данный документ получает статус действующей брони и может быть изменен:
-
Владельцем учетной записи, под которой был создан документ;
-
Пользователями кинотеатра (например, зритель может обратиться к билетному кассиру с просьбой выкупить указанную бронь);
-
Администратором кинотеатра (например, при изменении расписания);
-
Соответствующей системной службой, которая меняет статус документа (снимает бронь за указанное время до начала сеанса).
-
-
При создании в кинотеатре документа резервирования в ответном сообщении передается идентификатор документа («docid»), который остается неизменным для всех последующих обращений. По данному идентификатору можно получать информацию о состоянии, изменять статус документа или строить отчеты.
-
Все расчеты стоимости билетов и скидок выполняются на момент создания резерва и в дальнейшем остаются неизменными (для интернет-сервиса).
В случае изменения стоимости билета или изменения скидки действуют следующие правила:
-
При бронировании билетов с последующим самостоятельным выкупом зрителем конечная стоимость билетов определяется той ценой, которая действует на момент покупки билета. (Например, если пользователь при резервировании указал, что покупает 5 детских билетов, а покупает три взрослых, или цены на билеты были изменены, то общая сумма определится ценой на момент выкупа билетов).
-
После того, как продажа произведена, цены и скидки изменить невозможно. Если скидка была применена неправомерно, то решение сложившейся ситуации остается за администрацией кинотеатра.
-
-
После создания документа резервирования возможны следующие действия:
-
Отмена брони (документ переводится в состояние "Аннулирован").
-
Продажа (документ переводится в состояние "Продан").
-
Печать билетов (документ переводится в состояние " Билеты распечатаны"). Документ в состоянии "Билеты распечатаны" не может быть изменен через интернет-сервис. Возврат подобных билетов оформляется через билетную кассу.
-
Возврат проданных билетов (только для документа в состоянии "Продан". Документ переводится в состояние "Отмена продажи").
-
Погашение брони (зритель прошел в зал). Документ переводится в состояние "Погашено". Документ в состоянии "Погашено" не может быть изменен через интернет-сервис. Возврат подобных билетов оформляется через билетную кассу.
-
Выдача билетов, купленных или зарезервированных через интернет-сервис, производится в кассе кинотеатра. Идентификация зрителя производится по коду или штриховому коду, который сообщается зрителю при покупке или бронировании через интернет-сервис
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 - Неверный тип оплаты (при попытке возврата иным типом оплаты, чем при продаже).