Как работают вебхуки
Вебхуки — это HTTP-коллбэки. Когда событие происходит в системе провайдера, он отправляет HTTP POST на зарегистрированный вами URL.
1. Вы регистрируете: "Отправляйте события на https://myapp.com/webhooks/stripe"
2. Событие в Stripe: payment_intent.succeeded
3. Stripe отправляет POST на https://myapp.com/webhooks/stripe
4. Ваш сервер обрабатывает событие и возвращает 200 OK
5. Stripe отмечает webhook как доставленный
Что тестировать
1. Валидация payload
Проверьте, что приёмник корректно разбирает payload вебхука.
2. Верификация подписи
Проверьте, что приёмник отклоняет неподписанные или подделанные payload.
3. Идемпотентность
Один и тот же вебхук может быть доставлен несколько раз. Приёмник должен обрабатывать дубликаты.
4. Обработка ошибок и повторы
Проверьте, что происходит при сбое приёмника: возврат 500, внутренний сбой обработки, приёмник недоступен.
5. Порядок событий
Вебхуки могут приходить не по порядку.
Инструменты тестирования
webhook.site
Бесплатный сервис с уникальным URL для приёма и инспекции вебхуков.
ngrok
Открывает локальный сервер разработки в интернет:
ngrok http 3000
# Возвращает: https://abc123.ngrok.io
Локальный тестовый сервер
const express = require('express');
const app = express();
const receivedWebhooks = [];
app.post('/webhooks/:provider', express.json(), (req, res) => {
receivedWebhooks.push({
provider: req.params.provider,
headers: req.headers,
body: req.body,
timestamp: new Date(),
});
res.status(200).json({ received: true });
});
app.listen(3000);
Упражнение: Лаборатория тестирования вебхуков
Задание 1: Создать приёмник вебхуков
Создайте приёмник на Express.js, который валидирует подписи HMAC-SHA256, разбирает payload, дедуплицирует события и возвращает правильные коды статуса.
Задание 2: Тестирование подписей
Проверьте: валидная подпись принимается, отсутствие подписи — 401, невалидная подпись — 401, подделанный payload отклоняется.
Задание 3: Тестирование идемпотентности
Отправьте одно событие 5 раз. Проверьте, что создана только 1 запись.
Задание 4: Тестирование ошибочных сценариев
Невалидный JSON → 400. Симуляция сбоя БД → приёмник ставит в очередь на повтор. События не по порядку → система корректно обрабатывает.
Задание 5: Нагрузочное тестирование вебхуков
Отправьте 100 вебхуков в быстрой последовательности. Проверьте, что все получены и обработаны без повреждения данных.
Результаты
- Код приёмника с верификацией подписи.
- Набор тестов, покрывающий все сценарии.
- Отчёт с результатами тестирования.