besnovatyj / yii2-cms-quicktickets
Интеграция с API Афиша сервиса Quick Tickets для Yii2 CMS: кеш ответов, журнал расхода баллов, просмотр данных в админке
Package info
github.com/besnovatyj/yii2-cms-quicktickets
Type:yii2-extension
pkg:composer/besnovatyj/yii2-cms-quicktickets
Requires
- php: >=8.4
- ext-json: *
- besnovatyj/yii2-cms-backend-widgets: ^1.0
- besnovatyj/yii2-cms-contracts: ^3.0
- besnovatyj/yii2-cms-forms: ^1.0
- besnovatyj/yii2-cms-kernel: ^1.0
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-bootstrap5: ~2.0.0
- yiisoft/yii2-httpclient: ^2.0
Requires (Dev)
- roave/security-advisories: dev-latest
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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):
- Свежий кеш — из кеша.
- Запрос запрещён (нет токена, выключено, чужой ключ, пауза после ошибки, резерв) — устаревший кеш или «нет данных» с пояснением.
- Политика
lazy()и кеш есть — отдаётся устаревший кеш, обновление выполняется после отправки ответа (Response::EVENT_AFTER_SEND+fastcgi_finish_request()). - Иначе — запрос сразу.
Обновление ключа идёт под 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.