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
| Zdarzenie | Opis |
|---|---|
order.completed | Zamowienie zostalo w pelni zrealizowane i wszystkie produkty dostarczone |
order.failed | Zamowienie nie powiodlo sie (blad platnosci lub blad przy przygotowywaniu) |
order.refunded | Zamowienie zostalo zwrocone |
order.cancelled | Zamowienie 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:
| Naglowek | Opis |
|---|---|
X-Webhook-Signature | Podpis HMAC-SHA256 w formacie hex tresci zapytania, podpisany signingSecret webhooka |
X-Webhook-Event | Typ zdarzenia (np. order.completed) |
X-Webhook-Timestamp | Znacznik czasu ISO 8601 wygenerowania zdarzenia |
Content-Type | application/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:
| Proba | Opoznienie |
|---|---|
| 1. ponowienie | Natychmiast |
| 2. ponowienie | 1 sekunda |
| 3. ponowienie | 5 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.