Qut Pay Сайт Кабинет База знаний Инструкции Документация API ҚАЗРУС
ГлавнаяБаза знаний → Справочник

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

Обновлено: 2026-09-14 · Версия в Markdown

Коротко

Вебхук — основной способ. Когда клиент оплатил, мы сами приходим на ваш адрес, вам ничего не нужно спрашивать.

Но вебхук идёт по сети, а сеть не идеальна: ваш сервер может перезагружаться, хостинг — не ответить. Поэтому в сценариях, чувствительных к задержке (шлагбаум, вендинг, касса, прямой эфир), ведите оба механизма параллельно: если вебхук не пришёл за отведённое время, спросите статус сами через GET /api/v1/invoices/{id}.

Там, где несколько секунд ничего не решают — интернет-магазин, CRM, отчётность — достаточно одного вебхука.

Чем они отличаются

ВебхукОпрос статуса (polling)
Кто инициируетМыВы
Что нужно с вашей стороныДоступный извне адрес на httpsТолько исходящий интернет
ЗадержкаОбычно в пределах 5 секундРавна вашей частоте опроса
Гарантия доставкиВысокая, но не абсолютнаяОтвет приходит на каждый ваш запрос
Проверка подписиНужнаНе нужна
Работает без своего сервераНетДа

Почему вебхук всё-таки основной

После оплаты наш поллер забирает статус у Kaspi и в тот же момент уведомляет вас. На практике вебхук приходит в пределах 5 секунд.

Поллер работает с учётом возраста счёта — свежие проверяются чаще:

Возраст счётаЧастота проверки
Младше 3 минутКаждый проход, то есть примерно раз в 3 секунды
До 30 минутПримерно раз в 20 секунд
СтаршеПримерно раз в 90 секунд

Очередь начинается с самых свежих счетов: счёт, рядом с которым прямо сейчас стоит покупатель, никогда не ждёт позади вчерашних.

Если вебхук не получил ответ 2xx, доставка повторяется 11 раз — с паузой, растущей от 10 секунд до 1 часа. А когда адрес отвечает ошибками подряд, он временно ставится на паузу (5 неудач — 5 минут, 10 — 30 минут, 20 — 2 часа, 50 — отключение). Это защита и вашего сервера, и очереди, но знать о ней нужно: пока адрес на паузе, вебхуки не приходят вовсе.

Подробно: Настройка вебхуков.

Когда нужны оба механизма

Не полагайтесь на один вебхук в таких сценариях:

Общий признак: человек ждёт, и десятки секунд стоят дорого.

Одного вебхука достаточно там, где:

Как совместить

Схема простая: ждёте вебхук, не дождались — спрашиваете сами.

  1. Создаёте счёт, получаете id
  2. Показываете клиенту QR или ссылку
  3. Запускаете таймер. Например, на 5 секунд
  4. Пришёл вебхук за это время — готово, опрашивать не нужно
  5. Не пришёл — отправляете GET /api/v1/invoices/{id} и читаете статус
  6. Статус paid — продолжаете работу
  7. Всё ещё pending — ждёте дальше

Важно: вебхук и опрос приводят к одному и тому же результату, и прийти они могут одновременно. Обработчик должен быть идемпотентным — не обрабатывайте пару (invoice.id, status) дважды. Подробно: Идемпотентность.

Какую частоту опроса выбрать

«Чаще спрашиваю — быстрее узнаю» здесь не работает: наш поллер забирает статус у Kaspi по своему расписанию, а ваш запрос возвращает лишь то, что у нас уже есть. Десять запросов в секунду ничего не ускорят, зато приведут к 429 (rate_limited).

Разумное расписание:

Возраст счётаЧастота опроса
Первые 3 минутыРаз в 3-5 секунд
3-30 минутРаз в 20-30 секунд
СтаршеРаз в 1-2 минуты или прекратить

Оно совпадает с расписанием нашего поллера: свежие счета и так проверяются часто, а по старым частый опрос бессмыслен.

Дополнительные правила:

А можно только опрашивать

Да, можно — если у вас нет сервера, доступного снаружи (локальная кассовая программа, система в закрытой сети). Тогда вебхук просто не подключается, и вы работаете через GET /api/v1/invoices/{id}.

Минус: запросов больше, а задержка равна вашей частоте опроса. Плюс: не нужны ни входящий адрес, ни проверка подписи, ни сертификат HTTPS.

Вопросы и ответы

Если вебхук не пришёл сразу, значит он потерян? Нет. Он повторится 11 раз, то есть будет пытаться доставиться около часа. Но если ваш бизнес-сценарий не может столько ждать — нужен опрос.

Если придут оба, я обработаю заказ дважды? При наличии идемпотентности — нет. Проверяйте по паре (invoice.id, status).

Опрос расходует лимит тарифа? Нет. Месячный лимит считается по количеству счетов, а не запросов. Но у частоты запросов есть отдельное ограничение, оно отвечает 429.

Оплата подтверждается медленно — может, опрашивать чаще? Сначала разберитесь в причине: Оплата подтверждается медленно. Учащение не поможет, потому что узкое место — на стороне получения статуса из Kaspi.

Как проверить, что сам сервис жив? Для этого есть GET /api/v1/status: Проверка состояния сервиса.

Связанные статьи

Настройка вебхуковКак добавить адрес вебхука в кабинете, выбрать события и сохранить секрет, какие приходят заголовки и тело, как устроены 11 повторов, как читать журнал, протестировать адрес и что с редиректами.Оплата подтверждается медленно — почему и что делатьПокупатель заплатил, а счёт не сразу становится paid. Как частота проверки зависит от возраста счёта, сколько это занимает на практике и что делать в сценариях, чувствительных к задержке.Жизненный цикл счётаВсе статусы счёта и переходы между ними, какое событие вебхука приходит в какой момент, какие статусы считаются открытыми и оплаченными, и как обработать поздно пришедшую оплату.Проверка состояния сервисаЧто возвращает GET /api/v1/status, как поставить его в мониторинг и как по шагам отличить проблему на нашей стороне от проблемы на стороне Kaspi или в вашей интеграции. Три метрики, которые стоит мерить у себя.Безопасность вебхуков и проверка подписиКак устроена подпись, почему обязателен raw body, как проверять timestamp, примеры кода для Express, Laravel, Django и чистого Node, идемпотентная обработка и разбор частых ошибок.

Остались вопросы? WhatsApp +77788813333 · kazprose@gmail.com
Написать можно и из кабинета: Поддержка.

Qut Pay — независимый сервис, не аффилирован с АО «Kaspi Bank». Kaspi и Kaspi Pay — товарные знаки их правообладателя.