Vignetim

Przeglad webhookow

Webhooki dostarczaja powiadomienia HTTP POST w czasie rzeczywistym na Twoj serwer, gdy wystepuja zdarzenia dotyczace Twoich zamowien. Eliminuje to koniecznosc odpytywania (polling) API o aktualizacje statusow.

Obslugiwane zdarzenia

ZdarzenieOpis
order.completedZamowienie zostalo w pelni zrealizowane i wszystkie produkty dostarczone
order.failedZamowienie nie powiodlo sie (blad platnosci lub blad przy przygotowywaniu)
order.refundedZamowienie zostalo zwrocone
order.cancelledZamowienie zostalo anulowane
*Symbol wieloznaczny (wildcard) -- otrzymuj wszystkie zdarzenia

Payload webhooka

Gdy wystapi zdarzenie, Vignetim wysyla zapytanie POST na zarejestrowany URL z nastepujaca struktura:

{
	"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"
	}
}

Naglowki dostarczania

Kazde dostarczenie webhooka zawiera nastepujace naglowki:

NaglowekOpis
X-Webhook-SignaturePodpis HMAC-SHA256 w formacie hex tresci zapytania, podpisany signingSecret webhooka
X-Webhook-EventTyp zdarzenia (np. order.completed)
X-Webhook-TimestampZnacznik czasu ISO 8601 wygenerowania zdarzenia
Content-Typeapplication/json

Weryfikacja podpisu

Zawsze weryfikuj podpis webhooka, aby upewnic sie, ze payload jest autentyczny i nie zostal zmodyfikowany.

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));
}

// W Twoim handlerze webhooka:
app.post('/webhooks/vignetim', (req, res) => {
	const signature = req.headers['x-webhook-signature'];
	const rawBody = req.rawBody; // Upewnij sie, ze przechwytujesz surowa tresc

	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}`);

	// Przetwarzanie zdarzenia...

	res.status(200).send('OK');
});

Polityka ponowien

Jesli Twoj endpoint nie zwroci odpowiedzi 2xx w ciagu 10 sekund, Vignetim ponawia dostarczenie:

ProbaOpoznienie
1. ponowienieNatychmiast
2. ponowienie1 sekunda
3. ponowienie5 sekund

Po niepowodzeniu wszystkich 3 prob ponowienia, dostarczenie jest oznaczane jako nieudane.

Automatyczna dezaktywacja

Jesli endpoint webhooka zgromadzi 10 kolejnych nieudanych dostarczy, zostanie automatycznie dezaktywowany. Bedziesz musial ponownie go wlaczyc z poziomu API lub panelu partnerskiego. Uzyj endpointu testowego (POST /webhooks/:id/test), aby zweryfikowac lacznosc przed ponownym wlaczeniem.