Webhookit ovat hetki, jolloin maksujärjestelmä siirtää vastuun koodillesi. Ne saapuvat julkisen internetin yli, joskus kahdesti, joskus myöhässä. Siihen varautuminen ratkaisee, onko tuloksena luotettava integraatio vai jono tukipyyntöjä.
Mitä FeitPay takaa
- Toimitus vähintään kerran. Jokainen tapahtuma kirjoitetaan outboxiin samassa transaktiossa kuin tilamuutos, ja se toimitetaan eksponentiaalisesti kasvavalla viiveellä ja satunnaisvaihtelulla (jitter). Kun yritysten enimmäismäärä täyttyy, epäonnistuneet toimitukset säilytetään dead letter -listalla, josta voit toistaa ne.
- Pysyvä tunniste. Jokaisella tapahtumalla on
event_id. Uudelleenyritykset käyttävät samaa tunnistetta. - Todennettava allekirjoitus.
FeitPay-Signature-otsake sisältää aikaleiman ja HMAC-SHA256-arvon, joka lasketaan arvostatimestamp + "." + raw_bodypäätepisteesi allekirjoitussalaisuudella.
Mitä päätepisteesi pitäisi tehdä
import { verifyWebhook } from '@feitpay/webhooks';
// Rejects stale timestamps (300 s tolerance) and accepts the previous secret during rotation.
const event = await verifyWebhook({
payload: rawBody, // the exact bytes received
header: request.headers['feitpay-signature'],
secrets: [process.env.FEITPAY_WEBHOOK_SECRET, process.env.FEITPAY_WEBHOOK_SECRET_PREVIOUS].filter(Boolean),
});
if (await alreadyProcessed(event.event_id)) return ok();
Kolme tapaa on tärkeintä:
- Tarkista allekirjoitus raakarunkoa vasten. Uudelleen sarjallistettu JSON ei vastaa allekirjoitusta.
- Poista kaksoiskappaleet
event_id:n perusteella. Käsittele toistunut tapahtuma onnistumisena, ei virheenä. - Varmista ennen peruuttamattomia toimia. Arvokkaissa toimituksissa hae maksu rajapinnasta ja tarkista sen tila ennen lähettämistä.
Salaisuuksien kierrätys ilman katkoja
Kun kierrätät päätepisteen allekirjoitussalaisuuden, toimitukset allekirjoitetaan lyhyen päällekkäisyysjakson ajan sekä uudella että edellisellä salaisuudella, jotta tarkistajat voivat vaihtaa salaisuutta menettämättä tapahtumia. Salaisuudet näytetään vain kerran, ne tallennetaan salattuina eikä niitä koskaan kirjata lokeihin.