FreemiumProBusinessEnterprise

Вебхук не пришёл: диагностика

Симптомы проблемы

Участник сообщает, что оплатил билет, но:

  • Статус регистрации — «Ожидает оплаты»
  • Письмо с билетом не пришло
  • В списке участников статус платежа — pending

Чаще всего причина — webhook от платёжного шлюза не был доставлен или не был обработан evntflo.

Шаг 1. Проверьте лог доставки webhook

evntflo ведёт лог всех входящих webhook-запросов:

  1. Откройте Настройки → Платежи.
  2. Выберите шлюз (ЮKassa или Точка).
  3. Перейдите на вкладку «Webhook-лог».

В логе отображаются:

  • Дата и время запроса
  • Тип события (payment.succeeded, payment.canceled, refund.succeeded)
  • HTTP-код ответа evntflo
  • Тело запроса (для диагностики)
  • Статус обработки (успех / ошибка)

Возможные результаты

СитуацияЧто это значитЧто делать
Webhook в логе отсутствуетШлюз не отправил или не смог доставитьПерейдите к шагу 2
Webhook есть, код 200Обработан успешноПроверьте, что payment_id совпадает с проблемным платежом
Webhook есть, код 4xxОшибка валидации (неверная подпись, неизвестный формат)Перейдите к шагу 4
Webhook есть, код 5xxВнутренняя ошибка evntfloПерейдите к шагу 5

Шаг 2. Проверьте настройки webhook в шлюзе

Войдите в личный кабинет платёжного шлюза и проверьте:

ЮKassa

  1. Откройте «Настройки»«HTTP-уведомления».
  2. Убедитесь, что webhook URL совпадает:
    https://app.evntflo.com/webhooks/yookassa/{shopId}
    
  3. Проверьте, что выбраны все необходимые события:
    • payment.succeeded
    • payment.canceled
    • refund.succeeded

Точка

  1. Откройте «Интеграция»«Уведомления».
  2. Убедитесь, что webhook URL совпадает:
    https://app.evntflo.com/webhooks/tochka/{merchantId}
    
  3. Проверьте фильтры событий.

Частые ошибки в URL

  • Пропущен https:// (указан http:// — шлюзы требуют HTTPS)
  • Лишний слэш в конце URL
  • Неверный shopId или merchantId в пути
  • URL от старого подключения (если вы переподключали шлюз)

Шаг 3. Проверьте доступность webhook-эндпоинта

Если URL правильный, но webhook не доставляется, возможные причины:

  • Firewall или CDN блокирует входящие POST-запросы от шлюза
  • Таймаут: evntflo не успел ответить за отведённое время (шлюзы обычно ждут 10–30 секунд)
  • DNS-проблемы: домен не резолвится на стороне шлюза

Для проверки используйте тестовый webhook из личного кабинета шлюза (если доступен) или запросите повторную отправку.

Шаг 4. Ошибка валидации (4xx)

Если webhook пришёл, но evntflo вернул ошибку 4xx:

КодПричинаРешение
400Невалидное тело запросаПроверьте формат уведомлений в шлюзе. Убедитесь, что выбран формат JSON, а не XML
401Неверная подпись запросаУбедитесь, что secretKey в evntflo актуален. Если вы перегенерировали ключ в шлюзе, обновите его и в evntflo
404Неверный путь webhook URLПроверьте URL — возможно, shopId / merchantId указан неверно
409Дублирующий webhook (уже обработан)Это нормальное поведение — idempotency-защита сработала. Платёж уже обработан

Шаг 5. Внутренняя ошибка (5xx)

Если webhook получен, но evntflo вернул 5xx — это временная ошибка на стороне evntflo. В большинстве случаев:

  1. Шлюз автоматически повторит доставку (см. политику ретраев ниже).
  2. При повторной попытке проблема обычно решается.
  3. Если ошибка повторяется — обратитесь в поддержку evntflo.

Политика повторной доставки

ШлюзКоличество попытокИнтервалы
ЮKassaдо 10Экспоненциальная задержка: 1 с, 5 с, 30 с, 2 мин, 10 мин, 30 мин, 1 ч, 3 ч, 6 ч, 12 ч
Точкадо 5Фиксированный интервал: каждые 5 минут

Если все попытки исчерпаны, используйте ручной повтор.

Ручной повтор и подтверждение

Ручной повтор webhook

В логе webhook нажмите «Повторить» рядом с неуспешной записью. evntflo повторно обработает тело webhook-запроса.

Ручное подтверждение оплаты

Если webhook восстановить невозможно, но вы видите успешный платёж в личном кабинете шлюза:

  1. Откройте мероприятие → «Участники».
  2. Найдите запись с зависшим статусом.
  3. Нажмите «Действия»«Подтвердить оплату вручную».
  4. Укажите причину (для аудита).

Ручное подтверждение обновляет статус регистрации и отправляет участнику письмо с билетом.

Тестирование webhook

Чтобы убедиться, что webhook работает корректно, до или после настройки:

Тестовый платёж

  1. Создайте тестовое мероприятие с платным билетом.
  2. Подключите шлюз в тестовом режиме.
  3. Оплатите тестовой картой (4111 1111 1111 1111).
  4. Проверьте webhook-лог — должна появиться запись с кодом 200.
  5. Убедитесь, что статус регистрации обновился на «Оплачено».

Тестовый webhook из шлюза

Некоторые шлюзы позволяют отправить тестовый webhook вручную:

  • ЮKassa: в разделе «HTTP-уведомления» кнопка «Отправить тестовое уведомление»
  • Точка: обратитесь в поддержку Точки для отправки тестового уведомления

Профилактика

Чтобы избежать проблем с webhook:

  • При смене API-ключей в шлюзе сразу обновляйте их в evntflo
  • Не удаляйте и не меняйте webhook URL без необходимости
  • Периодически проверяйте webhook-лог на наличие ошибок
  • При переподключении шлюза всегда проводите тестовый платёж

Частые вопросы

Платёж завис в статусе «Ожидает» — что делать?
Проверьте лог доставки webhook в evntflo (Настройки → Платежи → Webhook-лог). Если webhook не поступал — проверьте URL и настройки событий в личном кабинете шлюза. Если webhook пришёл с ошибкой — изучите код ответа в логе.
Сколько раз шлюз повторяет отправку webhook?
ЮKassa — до 10 попыток с экспоненциальной задержкой (от секунд до часов). Точка — до 5 попыток с интервалом 5 минут. Если все попытки исчерпаны, воспользуйтесь ручным повтором.
Можно ли вручную подтвердить платёж без webhook?
Да. Для этого откройте запись участника, нажмите «Действия» → «Подтвердить оплату вручную». Это обновит статус регистрации, но не создаст платёжную запись в шлюзе.
Как проверить, что webhook URL правильный?
В evntflo откройте Настройки → Платежи → выберите шлюз. Скопируйте отображаемый webhook URL и сравните с URL, указанным в личном кабинете шлюза. Они должны совпадать полностью, включая протокол (https://).