Skip to main content
Вебхуки — как Oblodai сообщает вашему серверу, что платёж оплачен, кошелёк пополнен или выплата подтверждена. Это правильный способ узнавать о событиях — надёжнее, чем постоянный опрос. Разберём регистрацию, проверку подписи и обязательную идемпотентность. Справочник формата — Объект вебхука.

Что такое вебхук — на пальцах

Вебхук — это HTTP‑запрос (POST), который сервер Oblodai сам присылает вам, когда что‑то произошло (например, счёт оплачен). Endpoint (он же url_callback, он же «callback URL») — это ваш собственный адрес и обработчик, которые вы должны написать: маршрут на вашем сервере, принимающий этот POST. То есть вебхук работает так: покупатель оплатил → Oblodai делает POST на ваш URL → ваш код принимает его и помечает заказ оплаченным.
На CMS‑модуле это уже сделано. Если вы используете готовый CMS-модуль (WooCommerce и т. п.) — регистрировать вебхук и писать обработчик не нужно, модуль делает всё сам. Инструкция ниже — для собственной интеграции на SDK/HTTP.

Что нужно подготовить до регистрации

  1. Публичный HTTPS‑URL, доступный из интернета, отвечающий на POST. Пример в коде ниже (https://shop.example/oblodai/callback) — подставьте свой реальный адрес.
  2. Ваш обработчик должен возвращать HTTP 2xx (обычно 200). Любой не‑2xx (или падение) Oblodai считает неудачной доставкой и будет повторять.
  3. Локальная разработка: на localhost вебхуки не дойдут (и SSRF‑проверка запретит приватные адреса). Поднимите туннельngrok (ngrok http 8000 → адрес https://xxxx.ngrok-free.app), Cloudflare Tunnel или localtunnel — и регистрируйте выданный публичный HTTPS‑адрес.

1

Зарегистрировать endpoint

Один раз на проект зарегистрируйте HTTPS‑URL и сохраните выданный secret. В примерах call() — подписанная обёртка запроса (её определение — в Как подписать запрос; проще взять SDK):
Этот эндпоинт — единственный, кто отвечает 201 Created без конверта state/result.
Особенности:
  • У проекта один активный endpoint. Повторный вызов заменит URL и выдаст новый секрет.
  • URL проходит SSRF‑проверку: приватные и локальные адреса запрещены.
  • Индивидуальный url_callback конкретного платежа/выплаты доставляется на свой URL, но подписывается секретом endpoint проекта — то есть endpoint всё равно должен быть зарегистрирован.
Полностью — POST /v1/webhooks.
2

Проверять подпись

Подпись вебхука — ДРУГОЙ алгоритм, не тот, что у подписи запроса. Здесь это timestamp + точка . + сырое тело. Никаких метода/пути/переводов строк.
Возьмите сырое тело запроса (до JSON‑парсинга) и сравните подписи в постоянном времени.
3

Обрабатывать идемпотентно

Доставка — как минимум один раз. Один и тот же вебхук может прийти несколько раз (в том числе после payment/resend). Обязательно:
  • Дедуплицируйте по uuid + status. Если такое событие уже обработано — верните 2xx и выйдите (no‑op).
  • Не полагайтесь на порядок доставок. Опирайтесь на status/is_final, а не на очерёдность.
  • Отвечайте 2xx только после успешной обработки. Любой не‑2xx — сигнал повторить доставку.

Какие события приходят


Ретраи

Если ваш endpoint не ответил 2xx, диспетчер повторяет доставку с экспоненциальным backoff: от 10 с с удвоением, потолок 1 час, до 12 попыток (в сумме ~3,5 часа). Исчерпав попытки — статус dead, виден в журнале доставок.

Проверьте себя до боя

Прогоните пробное событие, не дожидаясь реальной оплаты — см. Отладка вебхуков.

Связанные страницы

Объект вебхука и проверка подписи

Безопасность вебхуков за пределами подписи

replay‑защита, перепроверка статуса.

POST /v1/webhooks

Отладка вебхуков

POST /v1/webhooks/deliveries