Vignetim

Pregled webhookov (Webhooks)

Webhooki dostavljajo HTTP POST obvestila v realnem času na vaš strežnik, ko se zgodijo dogodki na vaših naročilih. To odpravlja potrebo po povpraševanju (polling) API-ja za posodobitve statusa.

Podprti dogodki

DogodekOpis
order.completedNaročilo je bilo v celoti zaključeno in vsi produkti dostavljeni
order.failedNaročilo ni uspelo (neuspelo plačilo ali napaka pri pripravi)
order.refundedNaročilo je bilo povrnjeno
order.cancelledNaročilo je bilo preklicano
*Nadomestni znak (wildcard) -- prejemajte vse dogodke

Vsebina webhooka

Ko se zgodi dogodek, Vignetim pošlje POST zahtevo na vaš registrirani URL z naslednjo strukturo:

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

Glave dostave

Vsaka dostava webhooka vključuje naslednje glave:

HeaderOpis
X-Webhook-SignatureHMAC-SHA256 šestnajstiški podpis telesa zahteve, podpisan z signingSecret webhooka
X-Webhook-EventTip dogodka (npr. order.completed)
X-Webhook-TimestampISO 8601 časovni žig, kdaj je bil dogodek ustvarjen
Content-Typeapplication/json

Preverjanje podpisa

Vedno preverite podpis webhooka, da zagotovite avtentičnost vsebine in da ni bila spremenjena.

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

Politika ponovnih poskusov

Če vaša končna točka ne vrne odgovora 2xx v 10 sekundah, Vignetim ponovi dostavo:

PoskusZakasnitev
1. ponovni poskusTakoj
2. ponovni poskus1 sekunda
3. ponovni poskus5 sekund

Po vseh 3 neuspelih poskusih ponovitve se dostava označi kot neuspela.

Samodejna onemogočitev

Če webhook končna točka nabere 10 zaporednih neuspelih dostav, se samodejno onemogoči. Ponovno jo boste morali omogočiti prek API-ja ali vaše partnerske nadzorne plošče. Uporabite testno končno točko (POST /webhooks/:id/test) za preverjanje povezljivosti pred ponovnim omogočenjem.