Platico
Prijava

Webhook-ovi

Platico šalje HMAC-SHA256 potpisane događaje na vaš endpoint. Verifikujte potpis pre nego što verujete sadržaju.

Format zaglavlja

Platico-Signature: t=<unix_timestamp>,v1=<hex hmac-sha256>

Potpis pokriva t.payload gde je payload TAČNE bajtove tela zahteva (ne JSON-parsovano).

Verifikacija sa Node SDK

import express from 'express'
import Platico from 'platico'

const platico = new Platico(process.env.PLATICO_API_KEY!)
const app = express()

// KRITIČNO: express.raw, NIKADA express.json za webhook rutu.
// json() re-serijalizuje body i HMAC više ne odgovara.
app.post(
  '/webhooks/platico',
  express.raw({ type: 'application/json' }),
  (req, res) => {
    try {
      const event = platico.webhooks.constructEvent(
        req.body,                              // Buffer
        req.header('Platico-Signature') ?? '',
        process.env.PLATICO_WEBHOOK_SECRET!,
      )
      // event je verifikovan + parsiran
      switch (event.type) {
        case 'payment_intent.succeeded':
          // proveri narudžbu kao plaćenu
          break
        case 'charge.dispute.created':
          // alert tim za sporove
          break
      }
      res.sendStatus(200)
    } catch (err) {
      res.sendStatus(400)
    }
  },
)

Tipovi grešaka

SDK baca tri različite klase grešaka za webhook verifikaciju:

  • WebhookSignatureInvalidError — potpis ne odgovara. Potencijalni napad (ili pogrešan secret). Alert.
  • WebhookTimestampStaleError — timestamp je stariji od tolerancije (podrazumevano 300s). Verovatno clock skew ili replay napad.
  • WebhookMalformedHeaderError — header nedostaje ili je u pogrešnom formatu.

Politika ponavljanja isporuke

Ako vaš endpoint ne vrati 2xx u roku od 30 sekundi, Platico pokušava ponovo na sledećim intervalima: 5s, 30s, 5min, 30min, 2h, 5h, 10h, 24h. Posle 3 dana odustajemo i obeležavamo dostavu kao failed.

Idempotentno rukovanje

Isti događaj može biti dostavljen više puta (na mrežnoj grešci ili retry-ju). Koristite event.id kao deduplikacioni ključ — sačuvajte ID-ove obrađenih događaja i preskočite duplikate.

Generisanje tajne ključeva

Webhook secret se generiše kada dodajete endpoint u dashboardu. Format: whsec_... Čuvajte ga kao tajnu — ako se ugrozi, rotirajte ga iz Webhook stranice u dashboardu.