Przejdź do głównej zawartości

Webhooki

Selgeo wysyła powiadomienia HTTP POST w czasie rzeczywistym do Twojego serwera, gdy zdarzenia występują na Twoim koncie. Używaj webhooków do automatyzacji przepływów pracy, takich jak przydzielanie dostępu gdy partner zostaje zatwierdzony, synchronizacja prowizji z systemem księgowym lub alertowanie zespołu o oszustwach.

Wszystkie payloady webhooków używają API wersji v1.

Rejestracja punktów końcowych

Zarejestruj punkty końcowe webhooków ze strony Ustawienia > Webhooki w panelu sprzedawcy.

  1. Kliknij Dodaj punkt końcowy.
  2. Wprowadź adres URL, pod którym chcesz odbierać zdarzenia. Punkty końcowe trybu live muszą używać HTTPS.
  3. Wybierz zdarzenia, które chcesz subskrybować.
  4. Kliknij Utwórz. Twój sekret podpisywania (whsec_...) jest wyświetlany jednorazowo — skopiuj go i przechowaj bezpiecznie.

Weryfikacja podpisu

Każde żądanie webhooka zawiera nagłówek X-Selgeo-Signature:

t=<unix_timestamp>,v1=<hmac_hex>

HMAC jest obliczany jako HMAC-SHA256(signing_secret_bytes, "<timestamp>.<raw_json_body>").

Przykłady weryfikacji

import crypto from 'node:crypto';

function verifyWebhookSignature(signingSecret, signatureHeader, rawBody) {
if (!signatureHeader) return false;

const rawSecret = signingSecret.replace(/^whsec_/, '');
const secretBytes = Buffer.from(rawSecret, 'hex');

const parts = Object.fromEntries(
signatureHeader.split(',').map((part) => part.split('=', 2))
);

const timestamp = parts.t;
const receivedHmac = parts.v1;

if (!timestamp || !receivedHmac) return false;

const age = Math.floor(Date.now() / 1000) - parseInt(timestamp, 10);
if (age > 300 || age < -30) return false;

const expectedHmac = crypto
.createHmac('sha256', secretBytes)
.update(`${timestamp}.${rawBody}`)
.digest('hex');

const receivedBuf = Buffer.from(receivedHmac, 'hex');
const expectedBuf = Buffer.from(expectedHmac, 'hex');
if (receivedBuf.length !== expectedBuf.length) return false;
return crypto.timingSafeEqual(receivedBuf, expectedBuf);
}

Katalog zdarzeń

Zdarzenia partnerów

ZdarzenieOpis
participant.createdNowy partner złożył wniosek lub został dodany do programu
participant.approvedPartner został zatwierdzony
participant.rejectedWniosek partnera został odrzucony
participant.suspendedAktywny partner został zawieszony
participant.reinstatedZawieszony partner został przywrócony
participant.erasedDane partnera zostały usunięte (RODO)

Zdarzenia atrybucji

ZdarzenieOpis
attribution.createdKliknięcie zostało przypisane do partnera
attribution.convertedPrzypisane kliknięcie skutkowało konwersją
attribution.expiredOkno atrybucji wygasło bez konwersji

Zdarzenia konwersji

ZdarzenieOpis
conversion.createdZarejestrowano nową konwersję
conversion.fraud_detectedWykryto oszustwo (samopolecenie lub duplikat konwersji)

Zdarzenia prowizji

ZdarzenieOpis
commission.createdObliczono nową prowizję
commission.approvedProwizja została zatwierdzona do wypłaty
commission.rejectedProwizja została odrzucona
commission.refundedProwizja została cofnięta z powodu zwrotu

Polityka ponownych prób

Jeśli Twój punkt końcowy zwraca kod statusu inny niż 2xx lub żądanie przekroczy limit czasu (30 sekund), Selgeo ponawia próbę z wykładniczym opóźnieniem:

PróbaOpóźnienie po niepowodzeniu
1. próba1 minuta
2. próba2 minuty
3. próba4 minuty
4. próba15 minut

Po 5 łącznych próbach dostawa przechodzi do stanu dead-letter.

Najlepsze praktyki

  • Zwracaj 200 szybko. Przetwarzaj zdarzenie asynchronicznie w tle.
  • Obsługuj duplikaty. Używaj pola event_id do deduplikacji.
  • Weryfikuj podpisy. Zawsze weryfikuj nagłówek X-Selgeo-Signature.
  • Używaj HTTPS na produkcji. Punkty końcowe trybu live wymagają HTTPS.