Vignetim

Огляд 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-Typeapplication/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) для перевірки з'єднання перед повторним увімкненням.