V RoundlyConsulting\Webhooks\Events, všetky final readonly; žiadna nenesie tajný kľúč, podpis ani surové telo. Audit môžete zapisovať priamo z nich:
| Udalosť | Kedy | Obsahuje |
|---|---|---|
WebhookReceived | Na workeri pred handlerom — pri každom pokuse behu | webhook (InboundWebhook: sanitizovaný obsah, id doručenia, endpoint, isReplay, run, attempt; isFirstAttempt()) |
WebhookRejected | Požiadavka na známy endpoint bola odmietnutá (kroky 2–8); odmietnutia pre limit raz za okno | endpointId, reason (RejectionReason), status, ip, userAgent |
WebhookProcessingFailed | Handler zlyhal pri poslednom pokuse alebo bol endpoint zmazaný pred spracovaním doručenia | delivery, errorCode (handler_failed / endpoint_deleted) |
DeliverySucceeded | Odpoveď 2xx | delivery, attempt |
DeliveryFailed | Každý zlyhaný pokus | delivery, attempt, final, nextAttemptAt |
EndpointDisabled | Automaticky (zlyhania po sebe, 410) alebo ručne | endpoint (outbound), reason (DisableReason) |
EndpointSecretRotated | Rotácia | endpoint, direction, graceEndsAt |
Neznáme kľúče nevyvolajú nič, takže cudzí nemôže zahlcovať vaše listenery; duplicita nevyvolá nič.
Raz na pokus — WebhookReceived
WebhookReceived sa vyvolá pri každom pokuse behu — handler, ktorý vyhodí výnimku, sa opakuje a opakovanie udalosť vyvolá znova. Listener, ktorý má konať raz na doručenie, skontroluje pokus:
Event::listen(function (WebhookReceived $event): void {
if (! $event->webhook->isFirstAttempt()) {
return; // a retry of a run whose handler threw
}
Cache::increment('webhooks.received.'.$event->webhook->type);
});Listenery vo fronte
WebhookProcessingFailed, DeliverySucceeded, DeliveryFailed, EndpointDisabled a EndpointSecretRotated používajú SerializesModels: listener ShouldQueue dostane modely v stave, v akom sú pri jeho spustení. WebhookReceived nesie sanitizovaný obsah a listener vo fronte by ho zapísal do úložiska frontu nešifrovaný, mimo payloads.encrypt. Listenery na WebhookReceived nechajte synchrónne, alebo do frontu pošlite len id doručenia a doručenie načítajte v jobe:
Event::listen(function (WebhookReceived $event): void {
SyncInvoice::dispatch($event->webhook->deliveryId); // the job loads it again
});
// in SyncInvoice::handle()
$delivery = Webhooks::inbound()->deliveries()->where('public_id', $this->deliveryId)->firstOrFail();Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.