Webhooks API
Система webhook-уведомлений для интеграции с внешними сервисами.
Обзор
Webhooks позволяют получать уведомления о важных событиях в режиме реального времени без необходимости постоянного опроса API.
Поддерживаемые события
Заказы
order.created
- Создан новый заказorder.status_changed
- Изменен статус заказаorder.cancelled
- Заказ отмененorder.completed
- Заказ выполнен
Платежи
payment.succeeded
- Успешная оплатаpayment.failed
- Ошибка оплатыpayment.refunded
- Возврат платежа
Товары
product.created
- Добавлен новый товарproduct.updated
- Обновлен товарproduct.out_of_stock
- Товар закончился
Пользователи
user.registered
- Регистрация нового пользователяuser.verified
- Подтверждение email
Настройка webhook
// POST /api/webhooks
{
"url": "https://your-domain.com/webhook",
"events": ["order.created", "payment.succeeded"],
"secret": "your-secret-key",
"active": true
}
Структура webhook-запроса
// Headers
{
"Content-Type": "application/json",
"X-Webhook-Signature": "sha256=...",
"X-Webhook-Event": "order.created",
"X-Webhook-ID": "uuid"
}
// Body
{
"event": "order.created",
"timestamp": "2024-01-01T00:00:00Z",
"data": {
"order": {
"id": "uuid",
"status": "pending",
"total": 5000,
// ... остальные поля заказа
}
}
}
Проверка подписи
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(payload);
const digest = `sha256=${hmac.digest('hex')}`;
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(digest)
);
}
Повторные попытки
Система автоматически повторяет отправку webhook при ошибках:
- 1-я попытка: немедленно
- 2-я попытка: через 1 минуту
- 3-я попытка: через 5 минут
- 4-я попытка: через 15 минут
- 5-я попытка: через 1 час
Тестирование webhooks
// POST /api/webhooks/{id}/test
{
"event": "order.created"
}
Ответ:
{
"success": true,
"response_code": 200,
"response_time": 245,
"error": null
}
Логи webhooks
// GET /api/webhooks/{id}/logs
{
"logs": [
{
"id": "uuid",
"event": "order.created",
"status": "success",
"response_code": 200,
"attempts": 1,
"created_at": "2024-01-01T00:00:00Z"
}
]
}
Безопасность
- Всегда проверяйте подпись webhook
- Используйте HTTPS для URL webhooks
- Ограничивайте доступ к endpoint-у webhook
- Храните secret в безопасном месте