StudyCode
Платёжный провайдер шлёт колбэки на твой сервер. Принимаем события, проверяем подпись, не применяем дважды.
Легенда урока. Пользователь оплатил заказ на сайте платёжного провайдера. Как твой сервер узнает, что деньги пришли? Опрашивать провайдера каждую секунду («ну что, оплатили?») — расточительно. Вместо этого провайдер сам вызовет твой сервер, когда что-то произойдёт.
Webhook — это «API наоборот»:
| Обычный API | Webhook | |
|---|---|---|
| Кто звонит | ты → провайдеру | провайдер → тебе |
| Когда | когда тебе нужно | когда случилось событие |
| Что нужно от тебя | API-ключ | публичный URL-обработчик |
Так работают уведомления об оплате (Stripe, ЮKassa), пуши GitHub (git push → CI), боты Telegram.
Два железных правила приёмника webhook:
2xx пару секунд. Не успел — считает доставку неудачной и ретраит: через минуту, через час… Тяжёлую работу откладывай в очередь, а 200 отдавай сразу.И третье, про безопасность: URL обработчика — публичный, POST туда может прислать кто угодно. Поэтому провайдер подписывает каждый запрос — научимся проверять.
// Событие от платёжного провайдера (тело POST-запроса):
// {
// id: 'evt_42', // уникальный id события
// event: 'payment.succeeded', // что случилось
// orderId: 1 // какой заказ оплачен
// }
//
// Наша задача: принять → проверить → обновить заказ → быстро ответить 200