См. Порядок запросов для заказа билетов.
Размещение (или отображение и выбор отдельных мест) является ключом к процессу оформления билетов. Как таковое понимание концепций и API в этой области необходимо, прежде чем создавать клиентское приложение для создания билетов.
- Каждый кинотеатр в Vista имеет несколько экранов (театров/зрительных залов)
- Каждый экран может иметь несколько различных схем расположения сидений (конфигураций)
- В результате каждый сеанс имеет уникальный экран отображения мест
As a result each session has a unique seating display and as such seating APIs are session related rather than screen-related
- Каждый макет экрана состоит из нескольких различных областей, известных как категории областей
- Билеты связаны с одной категорией зоны, это означает, что только определенные билеты доступны для определенных мест в сеансе
- Это важно понимать при создании клиентского интерфейса, так как он должен ограничивать билеты и/или места на основе предыдущих выборов клиента
This is important to understand when creating client UI as it must restrict tickets and/or seats based on the customer's previous selections
- Для отдельных сессий распределение мест может быть включено или отключено. При отключении клиенты не смогут выбирать места как часть бронирования. Это значит кто первый пришел, того и тапки.
Individual sessions can have seat allocation enabled or disabled. When disabled customers will not be able to select seats as part of the booking. It will be first-come first-served at the cinema.
- Клиенты должны учитывать
IsAllocatedSeating
свойство сеанса в API и пропускать выбор мест, если это не применимо. - Сеанс может или не может быть настроен для автоматического распределения мест.
- Если автоматическое распределение не происходит, клиент ДОЛЖЕН выбрать места вручную.
- Если автоматическое распределение происходит, но происходит сбой из-за ограничений в алгоритме распределения, клиент ДОЛЖЕН выбрать места вручную.
- Если автоматическое распределение происходит без ошибок, то клиент МОЖЕТ пропустить выбор места, но обычно отображается пользовательский интерфейс, позволяющий ему просматривать / изменить назначенные места
Vista поддерживает несколько разных мест, которые ведут себя немного по-разному. Обычно компоненты пользовательского интерфейса выбора места обрабатывают правила вокруг них.
Тип | Описние |
---|---|
Нормальный | Обычное одно место |
Диван | Сиденья дивана сгрупированны вместе, чтобы представить любое расположение сидений для нескольких человек. Зачастую покупатели покупают билеты на весь диван, а не на его часть |
Места для инвалидов | Представляют из себя места, зарезервированные в театре для тех, кто находится в инвалидной коляске. |
Сиденье-компаньон | Они представляют собой места, расположенные рядом с местами для инвалидов и зарезервированные для спутников инвалида-колясочника. Часто требуется, чтобы они могли быть выбраны только тогда, когда также выбрано связанное место для инвалидов |
Правила о том, как и когда можно зарезервировать места, легко настраиваются в продающих приложениях Vista, включая такие правила, как:
- Клиент не может оставить 1 место между местами
- Клиент не может оставить 1 место между сиденьем и проходом
- Клиент не может выбрать сопутствующее сиденье без кресла-коляски
- и т.п.
Важно отметить, что эта логика применяется только на уровне пользовательского интерфейса. Connect не будет применять какие-либо правила в отношении типов мест или мест.
Как правило, существует два типа информации о сидении, которая нужна клиенту:
- Фактическое расположение мест в сеансе, включая категории площадей и отдельные места в них. Это используется для визуализации карты мест в пользовательском интерфейсе.
- Текущий статус сессии с точки зрения наличия мест: от количества мест на высоком уровне, оставшихся в сеансе, до статуса проданного места на низком уровне для отдельных мест
API Connect предоставляет эту информацию через набор API, которые описаны ниже.
Сессия возвращает число сидячих связанных свойств.
Важное примечание:
Эти данные, особенно SeatsAvailable
данные, НЕ являются данными реального времени и могут быть в разной степени устаревшими в зависимости от внутренней конфигурации и конфигурации кэширования Connect.
{
"ID": "0000000001-51592",
"CinemaId": "0000000001",
"SessionId": "51592",
"AreaCategoryCodes": [
"0000000001",
"0000000002"
],
"Showtime": "2019-05-03T18:00:00",
"IsAllocatedSeating": true,
"SeatsAvailable": 251,
"ScreenName": "ABC Screen 1",
"ScreenNumber": 1,
"SoldoutStatus": 0,
}
Существует несколько способов получения данных о плане мест в зависимости от потребностей конкретного клиента. Каждый возвращает по существу одну и ту же информацию, но достоинства в их поведении заслуживают понимания.
Важная заметка
Сложность плана места была развита за эти годы, и эти API могут быть довольно детальными. Для современных клиентов важно следовать передовой практике при запросе планов мест:
- Если доступно, укажите структурированный
SetDataFormat
(примеры ниже). Альтернативой является устаревшая закодированная строка, и если не указать ни одну из них, будет возвращено и то и другое, что приведет к снижению производительности на сервере - Если доступно, включите все
Include***
свойства. Они существуют по определенным причинам совместимости, и все современные клиенты должны иметь дело со всеми данными, которые могут быть конфигрурированны в схеме расположения рабочих мест.
Ниже приведен пример данных о плане / расположении кресел.
Он состоит из смеси:
- Физаческая планировка сидений
- Физические размеры, которые можно использовать для рисования карты мест
- Количество
SeatStyle
отдельных мест (например, нормальное, диван, кресло-коляска и т.д.) - Количество
Status
отдельных мест (например, продано, зарезервировано и т.д.) Пожалуйста, ознакомьтесь со справочной документацией API дляSeatLayoutData
уточнения.
{
"SeatLayoutData": {
"Areas": [
{
"Number": 1,
"AreaCategoryCode": "0000000001",
"Description": "Stalls",
"DescriptionAlt": "",
"NumberOfSeats": 2,
"IsAllocatedSeating": true,
"Left": 0.2,
"Top": 29.33,
"Height": 18.83,
"Width": 99.8,
"Rows": [
{
"PhysicalName": "A",
"Seats": [
{
"Position": {
"AreaNumber": 1,
"RowIndex": 0,
"ColumnIndex": 1
},
"Priority": 2,
"Id": "1",
"Status": 0,
"SeatStyle": 1,
"OriginalStatus": 0
},
{
"Position": {
"AreaNumber": 2,
"RowIndex": 0,
"ColumnIndex": 3
},
"Priority": 2,
"Id": "2",
"Status": 0,
"SeatStyle": 1,
"OriginalStatus": 0
}
]
}
],
"RowCount": 1,
"ColumnCount": 2
}
],
"AreaCategories": [
{
"AreaCategoryCode": "0000000001",
"SeatsToAllocate": 0,
"SeatsAllocatedCount": 0,
"SeatsNotAllocatedCount": 0,
"SelectedSeats": [],
"IsInSeatDeliveryEnabled": false
}
],
"BoundaryRight": 100,
"BoundaryLeft": 0,
"BoundaryTop": 29.33,
"ScreenStart": 0,
"ScreenWidth": 100
},
"ResponseCode": 0,
"ErrorDescription": null
}
Эта конечная точка не имеет никакого отношения к любому заказу и может быть использована для отображения текущего состояния сеанся в виде карты или чаще для сидения-первых стиле билетов UIs, где клиент должен сначала выбрать места в виде карты мест, прежде чем выбрать билеты.
Важное примечание:
Эта конечная точка (благодаря включению текущих статусов мест) извлекает свои данные из кинотеатра, что увеличивает нагрузку на приложения Connect и нисходящие потоки в кинотеатре. Это так же конечная точка, которая обычно находится под высокой нагрузкой. Таким образом, большинство экземпляров Connect будут иметь определенный уровень краткосрочного кэширования данных. Как таковой он не может рассматриваться в режиме реального времени, но должен быть близок к реальному времене и более актуален, чем данные сеанса.
GET: /restdata.svc/cinemas/ndomcinemaId‹/sessions/ndomsessionIdcasts/seat-plan
Ответ:
{
"SeatLayoutData": {},
"ResponseCode": 0,
"ErrorDescription": null
}
Эта конечная точка возвращает тот же ответ, что и GetSessionSeatPlan, но разработана специально для сценариев размещения билетов в первую очередь, когда клиент уже выбрал билеты.
- Эта конечная точка НЕ имеет кеширования и МОЖЕТ рассматриваться в режиме реального времени, поскольку каждый раз получает данные непосредственно из кинотеатра.
- Эта конечная точка имеет ряд опций для исключения определенных свойств сидений, а также возможность возврата заказа вместе с планом сидений.
- Свойство
SeatDataFormat
является ключевым и всегдадолжно иметь значение 2 (структурированное) - Эта конечная точка, поскольку связана с конкретным заказом, вернет места, назначенные текущему заказу, со статусом зарезервированного, тогда как они будут помечены как доступные в
GetSessionSeatPlan
- Эта конечная точка потерпит неудачу, если в заказ не было добавлено ни одного билета
POST: /restticketing.svc/order/seats/get Запрос:
{
"CinemaId": "{{cinemaId}}",
"SessionId": "{{sessionId}}",
"UserSessionId": "{{userSessionId}}",
"ReturnOrder": true,
"ExcludeAreasWithoutTickets": false,
"IncludeBrokenSeats": true,
"IncludeHouseSpecialSeats": true,
"IncludeGreyAndSofaSeats": true,
"IncludeAllSeatPriorities": true,
"IncludeSeatNumbers": true,
"IncludeCompanionSeats": true,
"SeatDataFormat": true
}
Ответ:
{
"Result": 0,
"Order": {},
"SeatLayoutData": {},
"SeatsNotAllocated": false,
"ErrorDescription": null
}
AddTickets конечная точка имеет свойство ReturnSeatData
, а также связанные с ними свойства, аналогичные GetSessionSeatData
. Указав это, вы получите те же данные о расположении кресел, что и у этой конечной точки.