Żądanie Verification of Payee zwykle zwraca wynik dopasowania w czasie rzeczywistym, wystarczająco szybko, aby pokazać go przed autoryzacją przelewu przez płatnika. Ale VoP to wywołanie sieciowe do innego banku, a sieci nie są idealnie niezawodne. Odpowiadający PSP może być wolny, połączenie może się przerwać, a żądanie może trafić do kolejki. Integracja klasy produkcyjnej wymaga planu na odpowiedź, która przychodzi kilka sekund - lub kilka minut - później.
Czemu wywołanie VoP może stać się asynchroniczne
Schemat definiuje wąskie okno odpowiedzi, ale realny ruch nadal generuje przypadki brzegowe, które musisz obsługiwać z gracją, a nie traktować jako poważne błędy:
- Odpowiadający PSP jest tymczasowo przeciążony i odpowiada tuż poza Twoim synchronicznym limitem czasu.
- Chwilowa awaria sieci uruchamia ponowną próbę, która kończy się po tym, jak Twoje pierwotne żądanie już wróciło.
- Wysyłasz wiele kontroli w partii (na przykład przebieg płatności) i zbierasz wyniki w miarę ich napływania.
Projektowanie przepływu webhooka
Najczystszym wzorcem jest przypisanie każdej kontroli stabilnego identyfikatora, zwrócenie statusu oczekującego, gdy synchroniczne okno wygasa, i pozwolenie, aby webhook dostarczył końcowy wynik.
- 1 Wyślij weryfikację i zapisz jej identyfikator żądania przy płatności, którą zamierzasz wykonać.
- 2 Jeśli odpowiedź nie nadejdzie w ramach synchronicznego budżetu czasowego, pokaż płatnikowi stan oczekujący, a nie błąd.
- 3 Odbierz końcowy wynik (zgodność, częściowa zgodność, brak zgodności lub niedostępny) na swoim endpoincie webhooka.
- 4 Dopasuj treść webhooka do zapisanego identyfikatora żądania i zaktualizuj decyzję dotyczącą płatności.
Bezpieczne i idempotentne domyślnie
Weryfikuj podpis każdego webhooka, zanim mu zaufasz, i uczyń swoją obsługę idempotentną: ten sam wynik może zostać dostarczony więcej niż raz. Indeksuj przetwarzanie według identyfikatora żądania, aby duplikat dostawy nigdy nie zadziałał dwukrotnie na tej samej płatności.
RoxPay zwraca wynik synchroniczny zawsze, gdy to możliwe, i przechodzi na podpisany webhook, gdy odpowiadający PSP jest wolny, dzięki czemu Twój proces płatności pozostaje responsywny, a Twoje zapisy - kompletne.