Вебхуки

Вебхуки нужны, когда событие происходит не в вашем запросе: покупатель оплатил на нашей странице, организатор оформил возврат, изменилась схема зала. Опрашивать 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);
}

Повторы

Один и тот же вызов может прийти дважды (например, наш повтор разошёлся с вашим медленным ответом). Опирайтесь на X-CTickets-Delivery или на состояние заказа: обработка должна быть повторяемой.

Вопросы по интеграции — api@ctickets.ru. Ключи и журнал запросов — в кабинете организатора, раздел «API и интеграции».