Преглед на Webhooks
Webhook-овете доставят HTTP POST известия в реално време до вашия сървър, когато настъпят събития с вашите поръчки. Това елиминира необходимостта от периодично запитване (polling) на API-то за актуализации на статуса.
Поддържани събития
| Събитие | Описание |
|---|---|
order.completed | Поръчката е напълно завършена и всички продукти са доставени |
order.failed | Поръчката е неуспешна (неуспешно плащане или грешка при предоставяне) |
order.refunded | Поръчката е възстановена |
order.cancelled | Поръчката е отменена |
* | Заместващ символ (wildcard) -- получавайте всички събития |
Съдържание на webhook
Когато настъпи събитие, 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 включва следните хедъри:
| Header | Описание |
|---|---|
X-Webhook-Signature | HMAC-SHA256 hex подпис на тялото на заявката, подписан с signingSecret на webhook-а |
X-Webhook-Event | Типът на събитието (напр. order.completed) |
X-Webhook-Timestamp | ISO 8601 timestamp на момента, когато събитието е генерирано |
Content-Type | application/json |
Верификация на подписа
Винаги верифицирайте подписа на 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');
});
Политика за повторни опити
Ако вашата крайна точка не върне отговор 2xx в рамките на 10 секунди, Vignetim повтаря доставката:
| Опит | Забавяне |
|---|---|
| 1-ви повторен опит | Незабавно |
| 2-ри повторен опит | 1 секунда |
| 3-ти повторен опит | 5 секунди |
След неуспех на всички 3 повторни опита доставката се маркира като неуспешна.
Автоматично деактивиране
Ако webhook крайна точка натрупа 10 последователни неуспешни доставки, тя се деактивира автоматично. Ще трябва да я активирате отново чрез API-то или от партньорското табло за управление. Използвайте тестовата крайна точка (POST /webhooks/:id/test), за да проверите свързаността, преди да активирате отново.