Skip to main content

Kształt odpowiedzi błędu

Bramka zwraca błędy w jednym, stałym formacie:
Nie opieraj logiki na treści message. Rozgałęziaj wyłącznie po statusie HTTP. Komunikaty bywają zmieniane bez zapowiedzi, a część z nich zawiera wewnętrzne nazwy klas z backendu - na przykład PaySubProductEntity not found. Nie ma osobnego, maszynowego kodu błędu.
Dwa wyjątki od powyższego kształtu warto znać: Niepoprawny JSON w żądaniu - błąd rozpoznawany, zanim dane trafią do logiki biznesowej:
Nieoczekiwany błąd po stronie Paymove - zawsze z tym samym, ogólnym komunikatem:

Tabela błędów

Czego w tym API nie ma

Ta sekcja jest równie ważna jak tabela powyżej. Poniższych mechanizmów bramka nie posiada - pisanie kodu, który je obsługuje, jest zbędne i wprowadza w błąd:

Błędy, które wyglądają jak sukces

Najgroźniejsza kategoria: API zwraca 200, choć żądanie było błędne. Sprawdź te przypadki, zanim uznasz integrację za działającą.
Kwota z częścią dziesiętną jest po cichu obcinana. "price": 12.99 zostanie zapisane jako 12 grosze, a odpowiedź to 200. Przeliczaj przez Math.round(kwota * 100).
Nieznane pola są ignorowane. Wysłanie amount zamiast price, currency czy returnUrl na najwyższym poziomie zamiast w details nie zgłosi błędu - płatność powstanie z niekompletnymi danymi.
Powtórzony externalId zwraca starą płatność. Odpowiedź to 200 z redirectUrl utworzonym wcześniej, a nowa kwota jest odrzucana. Kwotę zmieniaj przez PATCH /api/pay/product/{productId}/subproduct/{externalId}.
Brak externalId kończy się kodem 500, a nie 400. Zanim potraktujesz 500 jako błąd przejściowy i ponowisz wywołanie, sprawdź, czy Twoje body zawiera externalId.
Brak price albo details.returnUrl nie zgłasza żadnego błędu. Dostajesz 200 i działający redirectUrl - do płatności bez kwoty albo bez powrotu do sklepu. Kompletność tych pól musisz sprawdzić po swojej stronie, przed wysłaniem żądania.
Niepoprawny format UUID w ścieżce też zwraca 500. Literówka w productId nie da czytelnego 400 - dostaniesz ogólne Something went wrong.

Obsługa błędów w kodzie

Ponawianie ma sens wyłącznie przy 500 i błędach sieciowych, i tylko po upewnieniu się, że żądanie było kompletne. Kody 400, 401, 403 i 404 oznaczają problem po Twojej stronie - ponowienie zwróci ten sam wynik.

Błędy SDK

SDK dla Node.js opakowuje powyższe odpowiedzi w typowane wyjątki:
Walidacja amount w SDK sprawdza wyłącznie, czy wartość jest liczbą większą od zera. Kwota 49.99 przejdzie tę kontrolę, a API obetnie ją do 49 groszy.

Co dalej

REST API

Poprawna struktura żądania i pełne odpowiedzi.

Weryfikacja podpisu

Obsługa błędów po stronie odbioru webhooka.