Webhook

Коротко

HTTP-запрос, который сервис сам отправляет на заданный адрес другой системы, как только у него что-то произошло: пришла оплата, сменился статус, появилось сообщение.

Что такое «Webhook»

Обычный способ узнать об изменениях — регулярно спрашивать сервис: «есть новые заказы?». Это опрос, и большая часть таких запросов уходит впустую. Вебхук переворачивает схему: вы один раз указываете сервису адрес своего обработчика, а он сам сообщает о событии в момент, когда оно случилось. Обычно это POST-запрос с телом в JSON.

Так работают уведомления платёжных систем об оплате, Telegram-боты (метод setWebhook задаёт адрес, куда Telegram отправляет новые сообщения), исходящие вебхуки Битрикс24 и GitHub, службы доставки со сменой статуса посылки.

Как принять вебхук на PHP

Принимающая сторона — обычный URL на сайте. Главное — убедиться, что запрос пришёл от настоящего сервиса. Многие сервисы подписывают тело секретным ключом; имя заголовка и алгоритм указаны в их документации:

$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$expected  = hash_hmac('sha256', $payload, WEBHOOK_SECRET);

if (!hash_equals($expected, $signature)) {
    http_response_code(403);
    exit;
}
$event = json_decode($payload, true);
save_to_queue($event);      // тяжёлую работу — потом
http_response_code(200);

Если подписи нет, проверяют IP-адреса отправителя по списку из документации или запрашивают статус объекта обратно через API сервиса.

Надёжность: повторы и идемпотентность

  • Отвечать быстро. Сервис ждёт ответа несколько секунд; долгую обработку выносят в очередь или фоновую задачу.
  • Готовиться к повторам. Если ответ не пришёл, сервис пришлёт то же событие ещё раз. Обработчик хранит идентификаторы уже обработанных событий и не проводит оплату дважды.
  • Не доверять порядку. События могут прийти не по очереди, поэтому статус лучше сверять с данными, а не с последним полученным уведомлением.
  • Логировать входящие запросы — без этого разбирать спорные случаи почти невозможно.

Вебхуки — основа большинства интеграций сайта с CRM, оплатой и мессенджерами; их проектированием занимается разработка API и интеграций.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение