Webhooks

Webhook — HTTP-запрос, который сервис ОТПРАВЛЯЕТ тебе при событии. Альтернатива polling. GitHub при push шлёт POST на твой URL, Stripe при оплате — POST на твой URL.

Как работает

  1. Ты регистрируешь URL в сервисе (Settings → Webhooks).
  2. Указываешь на какие события подписан (push, invoice.paid).
  3. Сервис при событии шлёт POST /твой-url с JSON.
  4. Ты отвечаешь 2xx = принял. 5xx = сервис повторит.

Пример GitHub push

POST /webhook-endpoint HTTP/1.1
Host: yourapp.com
X-GitHub-Event: push
X-GitHub-Delivery: 12345-uuid
X-Hub-Signature-256: sha256=abcdef...
Content-Type: application/json

{
  "ref": "refs/heads/main",
  "commits": [...],
  "repository": {...}
}

Безопасность

1. HMAC-подпись

Сервис подписывает body секретом. Ты вычисляешь HMAC и сверяешь.

# github
X-Hub-Signature-256: sha256=<HMAC-SHA256(secret, body)>

# stripe
Stripe-Signature: t=1700000000,v1=<hash>

2. Whitelist IP

GitHub, Stripe публикуют список IP-адресов с которых шлют.

3. Timestamp

В подписи включён timestamp → защита от replay.

Идемпотентность

Сервис может повторить webhook (5xx, timeout). Твой обработчик должен быть idempotent — обрабатывать delivery_id один раз (см. idempotency).

Retries

Проблемы webhook

Альтернативы

Dev-инструменты

См. также

← на главную