Przejdź do głównej zawartości

Kody odmów

Gdy płatność, zwrot albo wypłata się nie uda, obiekt w zdarzeniu webhook niesie pole failure ze stabilnym kodem dpay. Kod jest wspólny dla wszystkich metod płatności, więc jedną logiką obsłużysz odmowę BLIK, karty i przelewu. Oryginalny kod dostawcy przychodzi obok, do diagnozy.

Kody odmów a kody błędów

Kody błędów to odpowiedzi API na nieprawidłowe żądanie, zwracane od razu. Kody odmów opisują, dlaczego płatność, zwrot albo wypłata nie doszły do skutku - przychodzą w zdarzeniach payment.failed, refund.failed i payout.failed.

Obiekt failure​

"failure": {
"code": "insufficient_funds",
"message": "Insufficient funds",
"category": "customer",
"retryable": true,
"provider_code": "INSUFFICIENT_FUNDS"
}
PoleOpis
codeKod odmowy dpay z tabeli niżej. Na nim opieraj logikę.
messageKrótki opis po angielsku - do logów i dla zespołu. Klientowi pokaż własny komunikat.
categoryKto może usunąć przyczynę: customer, merchant, risk albo system.
retryabletrue, gdy ponowienie tej samej płatności może się udać.
provider_codeKod dostawcy (BLIK, operator kart, bank) albo null. Tylko do diagnozy - lista kodów dostawców się zmienia.

W zdarzeniach, które nie są odmową, failure ma wartość null.

Kategorie​

KategoriaZnaczenieCo zrobić
customerPrzyczyna po stronie klienta: środki, limit, kod, bank, karta.Poinformuj klienta i zaproponuj ponowienie albo inną metodę płatności.
merchantPrzyczyna po Twojej stronie: żądanie, warunki płatności cyklicznej, termin albo kwota zwrotu.Popraw żądanie albo dane - samo ponowienie nie pomoże.
riskOdmowa ze względów bezpieczeństwa.Nie ponawiaj automatycznie i nie podawaj klientowi szczegółów.
systemChwilowy błąd po stronie banku, dostawcy albo dpay.Ponów później.

Ponowienie (retryable)​

retryable: true znaczy, że ta sama płatność może się udać przy kolejnej próbie - np. gdy klient doładuje konto, poda nowy kod BLIK albo potwierdzi płatność na czas. Przy false ponowienie bez zmiany (innej karty, innej metody, poprawionego żądania) się nie uda.

Przy obciążeniach płatności cyklicznej ponawiaj automatycznie tylko odmowy z retryable: true i z rozsądnym odstępem. Odmowy z retryable: false wymagają kontaktu z klientem.

Tabela kodów​

KodKategoriaPonowienieZnaczenie
insufficient_fundscustomertakBrak środków na rachunku albo karcie.
limit_exceededcustomertakPrzekroczony limit klienta - kwotowy albo liczby transakcji.
customer_declinedcustomertakKlient odrzucił płatność, np. w aplikacji banku.
customer_timeoutcustomertakKlient nie potwierdził płatności na czas.
invalid_codecustomertakNieprawidłowy, wygasły albo już użyty kod (np. BLIK).
expiredcustomertakPłatność nie została opłacona w ciągu 7 dni.
app_update_requiredcustomertakKlient musi zaktualizować aplikację bankową.
issuer_declinedcustomernieOdmowa banku albo wydawcy karty, także przy zamkniętym albo zablokowanym koncie.
card_invalidcustomernieNieprawidłowa albo wygasła karta.
authentication_requiredcustomernieSilne uwierzytelnienie klienta (3-D Secure) nie powiodło się.
alias_invalidcustomernieZapisany alias płatności (BLIK OneClick, płatność cykliczna) nie jest już ważny.
unsupported_by_bankcustomernieBank klienta nie obsługuje tego rodzaju płatności.
generic_declinecustomernieOdmowa bez bliższej przyczyny. Dostaje go też każdy nowy albo nieznany kod dostawcy - zobaczysz go w provider_code.
security_declinedrisknieOdmowa ze względów bezpieczeństwa, np. system antyfraudowy albo karta zgłoszona jako utracona.
blockedriskniePłatności kodem czasowo zablokowane po serii błędnych kodów.
recurring_conditions_not_metmerchantnieObciążenie nie spełnia warunków płatności cyklicznej, np. kwota ponad limit.
invalid_requestmerchantnieNieprawidłowe żądanie, np. alias już istnieje, błędny numer rachunku albo płatności cykliczne niewłączone dla serwisu.
refund_window_expiredmerchantnieMinął termin na zwrot.
refund_amount_exceededmerchantnieKwota zwrotu przekracza kwotę możliwą do zwrotu.
payout_failedmerchantnieWypłata nie została zrealizowana (patrz Wypłaty).
refund_failedsystemnieZwrot się nie powiódł.
processing_errorsystemtakChwilowy błąd przetwarzania po stronie banku, dostawcy albo dpay.
Nowe kody

Lista kodów może się wydłużać. Nieznany code obsłuż według category i retryable, tak jak generic_decline.

Mapowanie kodów dostawców​

W provider_code przychodzi oryginalny kod dostawcy. Poniżej kody, które zamieniamy na kody dpay. Kod spoza tych tabel (także od innych dostawców, np. przy przelewach online) daje generic_decline z tym kodem w provider_code.

BLIK​

Kod dpayKody BLIK
insufficient_fundsINSUFFICIENT_FUNDS
limit_exceededLIMIT_EXCEEDED, LOW_LIMIT, LIMIT_LOCKED
customer_declinedUSER_DECLINED
customer_timeoutTIMEOUT, USER_TIMEOUT, AM_TIMEOUT, LONG_TIMEOUT
invalid_codeBAD_PIN, ER_WRONG_TICKET, ER_TIC_EXPIRED, ER_TIC_USED
app_update_requiredOLD_APK_VERSION
issuer_declinedISSUER_DECLINED, ACCOUNT_CLOSED, ACCOUNT_DISABLED, BLIKL_DECLINED, LIMIT_NOT_APPROVED, LIMIT_IN_OTHER_BANK, LIMIT_ALREADY_ACTIVE, TFR_REJECTED
alias_invalidALIAS_DECLINED, ALIAS_NOT_FOUND, ALIAS_APP_NOT_FOUND, ALIAS_EXPIRED, ALIAS_NOT_AVAILABLE
unsupported_by_bankOFFUS_NOT_ALLOWED, TXTYPE_USR_UNHANDLED, BLIK-L_NOTSUPPORTED, SPLITPAYMENT_UNHANDL
security_declinedSEC_DECLINED, TAS_DECLINED, SENDER_BLOCKED, SENDER_UNKNOWN, WRONG_DEVLOC_DATA, PEP_VERIFICATION, PESEL_RESTRICTED
blockedTOO_MANY_TRIES
recurring_conditions_not_metAUTOCONF_REQ_NOT_MET, AMOUNT_LIMIT_EXCEEDED
invalid_requestALIAS_ALR_EXISTS, BAD_IBAN, RECURRING_NOT_ENABLED, ALIAS_APP_AMBIGUOUS
refund_window_expiredRET_LATE, TFR_LATE
refund_amount_exceededRET_AMT_EXCEEDED
processing_errorSYSTEM_ERROR, GENERAL_ERROR, ISS_OUTOFSERVICE, PESEL_SERVICE_FAILED, TX_NOTFOUND, TFR_NOT_POSSIBLE, INTERNAL_ERROR

Karty (ISO 8583)​

Kod kartyZnaczenieKod dpay
51Brak środkówinsufficient_funds
61Przekroczony limit kwotylimit_exceeded
65Przekroczony limit liczby transakcjilimit_exceeded
05Odmowa wydawcy (do not honor)issuer_declined
46Konto zamknięteissuer_declined
57Transakcja niedozwolona dla posiadacza kartyissuer_declined
62Karta z ograniczeniamiissuer_declined
14Nieprawidłowy numer kartycard_invalid
54Karta wygasłacard_invalid
04Zatrzymaj kartęsecurity_declined
41Karta zgubionasecurity_declined
43Karta skradzionasecurity_declined
59Podejrzenie oszustwasecurity_declined
03Nieprawidłowy akceptantinvalid_request
12Nieprawidłowa transakcjainvalid_request
13Nieprawidłowa kwotainvalid_request
30Błąd formatuinvalid_request
58Transakcja niedozwolona dla terminalainvalid_request
91Wydawca niedostępnyprocessing_error
96Awaria systemuprocessing_error

Kody dpay​

KodZnaczenieKod dpay
SCA_REJECTEDSilne uwierzytelnienie (3-D Secure) odrzuconeauthentication_required
WRONG_TICKET_BLOCKEDPłatności kodem BLIK czasowo zablokowane po serii błędnych kodówblocked

Wypłaty​

Odrzucona wypłata (payout.failed) ma zawsze kod payout_failed, a provider_code mówi, co stało się ze środkami:

provider_codeZnaczenie
refunded_to_dpayŚrodki wróciły na saldo konta w dpay.
refunded_to_nrbŚrodki zostały zwrócone na rachunek bankowy.
frozenŚrodki są zamrożone.
blockedŚrodki są zablokowane.
nullBez dodatkowej informacji.

Szczegóły odrzuconej wypłaty wyjaśnisz z obsługą dpay.