Вебхуки
Вебхуки нужны, когда событие происходит не в вашем запросе: покупатель оплатил на нашей странице, организатор оформил возврат, изменилась схема зала. Опрашивать API ради этого не нужно.
Настройка
Организатор указывает адрес приёмника в кабинете (раздел «API и интеграции» → приложение) и отмечает интересующие события. Если не отмечено ничего — присылаем все.
События
| Событие | Когда приходит |
|---|---|
order.paid | Заказ оплачен |
order.cancelled | Заказ отменён |
order.refunded | Возврат по заказу |
reservation.expired | Бронь истекла |
event.updated | Событие изменено |
scheme.updated | Схема зала изменена |
Формат вызова
POST https://ваш-сервер/hooks/ctickets
X-CTickets-Event: order.paid
X-CTickets-Delivery: 128
X-CTickets-Signature: t=1754239981,v1=6a1f...c0
{
"event": "order.paid",
"created_at": "2026-08-03T19:33:01+03:00",
"data": {
"order_id": 7809,
"order_number": "ORD-20260803-SJKV6Z",
"status": "paid",
"amount": { "amount": 600000, "currency": "RUB" }
}
}
Проверка подписи
Подпись — HMAC-SHA256 от строки «время.тело» с секретом приложения.
Проверяйте и подпись, и возраст запроса: иначе перехваченный вызов можно повторять бесконечно.
$parts = [];
parse_str(str_replace(',', '&', $request->header('X-CTickets-Signature')), $parts);
$expected = hash_hmac('sha256', $parts['t'] . '.' . $request->getContent(), $secret);
if (!hash_equals($expected, $parts['v1']) || abs(time() - (int) $parts['t']) > 300) {
abort(400);
}
Повторы
- Успех — любой ответ 2xx. Тело ответа не важно.
- Не ответили или ответили ошибкой — повторим через 1 мин, 5 мин, 30 мин, 2 ч и 6 ч, затем отметим доставку неуспешной.
- Все попытки видны организатору в кабинете, оттуда же можно повторить вручную и отправить тестовый вызов.
- Отвечайте быстро (до 10 секунд) и обрабатывайте тело асинхронно — иначе доставка считается неудачной по таймауту.
Один и тот же вызов может прийти дважды (например, наш повтор разошёлся с вашим медленным ответом).
Опирайтесь на X-CTickets-Delivery или на состояние заказа: обработка должна быть повторяемой.
Вопросы по интеграции — api@ctickets.ru.
Ключи и журнал запросов — в кабинете организатора, раздел «API и интеграции».