Zdarzenia & synchronizacja

Webhooki i powiadomienia

Uporządkuj odbieranie zmian statusu i połącz płatności z własnymi systemami bez ciągłego pollingu.

EndpointHTTPS
WzorzecAsynchroniczny
CelSynchronizacja stanu

Jak to działa

Skonfiguruj adres URL HTTPS powiadomień, aby Twoja aplikacja otrzymywała istotne zmiany w operacji. Webhook powinien zasilać wewnętrzny stan odpowiedniego zamówienia, płatności lub procesu.

Bieżąca konfiguracja. URL ustawia się w Ustawienia → Transakcje online. Akceptowany jest tylko HTTPS. W przypadku błędu requestu lub odpowiedzi innej niż 200 obecna dokumentacja podaje 3 dodatkowe próby.

Zalecany przepływ

01 · IOPAYStatus się zmienia.

Transakcja lub istotne zdarzenie postępuje w przetwarzaniu.

02 · EndpointTwój webhook odbiera.

Aplikacja odbiera payload w skonfigurowanym endpoincie HTTPS.

03 · UtrwalenieZarejestruj zdarzenie.

Zapisz identyfikatory i wystarczającą treść dla identyfikowalności.

04 · DomenaZaktualizuj systemy.

Zamówienie, ERP, OMS, finanse i automatyzacje podążają za nowym stanem.

Struktura powiadomienia

Zdarzenia transakcyjne zawierają identyfikator transakcji, typ zdarzenia, status, odniesienie operacji, sellera i podpis powiadomienia.

Przykład · transaction.succeeded
{
  "id": "8774b47d26d54a0b9138cde9d8cc421f",
  "type": "transaction.succeeded",
  "status": "succeeded",
  "reference_id": "order_102938",
  "io_seller_id": "<IO_SELLER_ID>",
  "sign_confirm": "iopay::<SIGNATURE>"
}
Zdarzenia. Wśród zdarzeń transakcyjnych są transaction.created, transaction.pending, transaction.succeeded, transaction.failed, transaction.disputed i transaction.void.succeeded.

Implementacja

Przykład koncepcyjny · Laravel
Route::post('/webhooks/iopay', function (Request $request) {
    $payload = $request->all();

    // Identificador da transação
    $transactionId = $payload['id'] ?? null;

    // Ex.: transaction.succeeded
    $eventType = $payload['type'] ?? null;

    // Ex.: succeeded
    $status = $payload['status'] ?? null;

    // Referência enviada na criação da transação
    $referenceId = $payload['reference_id'] ?? null;

    // 1. valide sign_confirm conforme o contrato vigente
    // 2. garanta idempotência antes de aplicar efeitos
    // 3. persista o evento para rastreabilidade
    // 4. processe operações pesadas de forma assíncrona
    ProcessIopayWebhook::dispatch($payload);

    return response()->json(['received' => true], 200);
});
Ważne. Przykład ma charakter architektoniczny. Walidacja sign_confirm musi być zgodna z aktualnym kontraktem integracji, zanim zdarzenie zostanie uznane za wiarygodne.

Idempotentność i odporność

Idempotentność

Nie przetwarzaj dwa razy.

Webhooki mogą być wysyłane ponownie. Upewnij się, że to samo zdarzenie nie wywoła zdublowanych efektów w Twojej aplikacji.

Reakcja

Szybkie potwierdzenie.

Unikaj długich operacji przed zwróceniem HTTP 200 do webhooka.

Kolejność

Zweryfikuj bieżący stan.

Nie polegaj wyłącznie na kolejności przybycia; porównaj zdarzenie ze znanym stanem.

Obserwowalność

Zachowaj historię.

Rejestruj odbiór, przetwarzanie, błędy i powiązanie z zamówieniem/transakcją.

Lista kontrolna

  • URL HTTPS skonfigurowany i dostępny z zewnątrz.
  • Krótki timeout i ciężkie przetwarzanie w kolejce.
  • Walidacja sign_confirm.
  • Idempotentność, aby uniknąć zdublowanych efektów.
  • Logi z id, type, reference_id i io_seller_id.
  • Alerty dla powtarzających się błędów przetwarzania.
  • Rutyna uzgadniania przez zapytania do API w wyjątkowych przypadkach.