Огляд Webhooks (Webhooks Overview)
Webhook-и доставляють HTTP POST-сповіщення в реальному часі на ваш сервер, коли відбуваються події з вашими замовленнями. Це усуває необхідність опитування API для отримання оновлень статусу.
Підтримувані події
| Подія | Опис |
|---|---|
order.completed | Замовлення повністю виконано та всі продукти доставлені |
order.failed | Замовлення не вдалося (помилка оплати або помилка при підготовці) |
order.refunded | Замовлення повернуто |
order.cancelled | Замовлення скасовано |
* | Підстановковий знак (wildcard) -- отримувати всі події |
Навантаження Webhook (Webhook Payload)
Коли відбувається подія, Vignetim надсилає POST-запит на вашу зареєстровану URL-адресу з наступною структурою:
{
"event": "order.completed",
"timestamp": "2026-03-20T14:31:15.000Z",
"data": {
"orderId": "ord-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "COMPLETED",
"externalReference": "YOUR-ORDER-REF-001",
"products": [
{
"productId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"productTypeId": 1,
"status": "COMPLETED"
}
],
"total": {
"amount": 11.5,
"currency": "EUR"
},
"completedAt": "2026-03-20T14:31:15.000Z"
}
}
Заголовки доставки
Кожна доставка webhook включає наступні заголовки:
| Заголовок | Опис |
|---|---|
X-Webhook-Signature | Шістнадцятковий підпис HMAC-SHA256 тіла запиту, підписаний за допомогою signingSecret webhook-а |
X-Webhook-Event | Тип події (наприклад, order.completed) |
X-Webhook-Timestamp | Мітка часу ISO 8601, коли подія була згенерована |
Content-Type | application/json |
Перевірка підпису (Signature Verification)
Завжди перевіряйте підпис webhook, щоб переконатися, що навантаження є автентичним і не було змінено.
import crypto from 'crypto';
function verifyWebhookSignature(body, signature, secret) {
const expected = crypto.createHmac('sha256', secret).update(body).digest('hex');
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}
// In your webhook handler:
app.post('/webhooks/vignetim', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const rawBody = req.rawBody; // Ensure you capture the raw body
if (!verifyWebhookSignature(rawBody, signature, 'whs_your-webhook-signing-secret')) {
return res.status(401).send('Invalid signature');
}
const event = req.body;
console.log(`Received event: ${event.event}`);
// Process the event...
res.status(200).send('OK');
});
Політика повторних спроб (Retry Policy)
Якщо ваш ендпоінт не повертає відповідь 2xx протягом 10 секунд, Vignetim повторює доставку:
| Спроба | Затримка |
|---|---|
| 1-а повторна | Негайно |
| 2-а повторна | 1 секунда |
| 3-я повторна | 5 секунд |
Після невдачі всіх 3 повторних спроб доставка позначається як невдала.
Автоматичне вимкнення (Auto-Disable)
Якщо ендпоінт webhook накопичить 10 послідовних невдалих доставок, він автоматично вимикається. Вам потрібно буде повторно увімкнути його через API або вашу партнерську панель. Використовуйте тестовий ендпоінт (POST /webhooks/:id/test) для перевірки з'єднання перед повторним увімкненням.