Search by

besnovatyj / yii2-cms-quicktickets

besnovatyj

Интеграция с API Афиша сервиса Quick Tickets для Yii2 CMS: кеш ответов, журнал расхода баллов, просмотр данных в админке

Package info

github.com/besnovatyj/yii2-cms-quicktickets

Type:yii2-extension

pkg:composer/besnovatyj/yii2-cms-quicktickets

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-10-21 13:56 UTC

This package is auto-updated.

Last update: 2026-10-21 14:01:59 UTC


README

Интеграция с API Афиша сервиса Quick Tickets (https://api2.quicktickets.ru/afisha/v2/): афиша организации, сеансы, схема зала. Все ответы кешируются в БД, каждый реальный запрос пишется в журнал с расходом баллов.

Настройка

Модуль настроек (yii2-cms-config), раздел «Quicktickets»:

Опция Назначение
Токен API Афиша Постоянный токен для модуля afisha, выдаётся Quick Tickets
Соль Подпись запросов; пусто — без подписи (в Афише она необязательна)
Alias организации https://quicktickets.ru/<alias>
Обновление по запросам сайта Ленивое обновление по истечении TTL
Резерв баллов Ниже этой оценки баланса сайт и cron в API не идут
TTL по запросам Отдельно для каждого endpoint'а, минуты

Как устроено обращение к API

Единственная точка — services\fetch\Gateway::fetch(Endpoint, params, FetchPolicy):

  1. Свежий кеш — из кеша.
  2. Запрос запрещён (нет токена, выключено, чужой ключ, пауза после ошибки, резерв) — устаревший кеш или «нет данных» с пояснением.
  3. Политика lazy() и кеш есть — отдаётся устаревший кеш, обновление выполняется после отправки ответа (Response::EVENT_AFTER_SEND + fastcgi_finish_request()).
  4. Иначе — запрос сразу.

Обновление ключа идёт под MysqlMutex: из одновременных запросов в API уходит один. Ошибка API данные не стирает. Политики: lazy() — сайт, backend() — просмотр в админке, cacheOnly(), warm() — cron, force() — кнопка «Запросить сейчас».

Сайт (политика lazy()) может запрашивать только ключи текущей афиши: организацию, афишу целиком, мероприятие, сеанс и схему зала по id, которые есть в кеше event/list. Перебор id ботом новых ключей не создаёт.

Админка

  • Обзор и баллы — token/info (бесплатно), оценка баланса, пауза, пропускная способность по endpoint'ам, расход за 24 часа / 7 дней / по часам.
  • Афиша — мероприятия и сеансы с id и ссылками, цены, остаток мест, Пушкинская карта, перенос и замена.
  • Схема зала — SVG по anyplace/list, только из кеша; запрос к API — кнопкой (10 баллов).
  • Кеш ответов — список, JSON, сброс записи / endpoint'а / всего, «Запросить сейчас».
  • Журнал запросов — каждый HTTP-запрос: источник, итог, баллы, время.

«Сбросить» помечает запись устаревшей, данные остаются запасным вариантом.

Консоль

php yii Quicktickets/cache/warm     # афиша организации независимо от TTL, с резервом баллов
php yii Quicktickets/cache/status   # баланс по token/info и оценка по журналу

Пример cron: */15 * * * * php /path/to/yii Quicktickets/cache/warm.