Przejdź do głównej treści
GoCardless · SEPA Core · nieudana płatność

GoCardless refer_to_payer: MS02, MS03, RR04 i SL01 w polecie SEPA

Przy refer_to_payer GoCardless informuje, że problem leży po stronie płatnika i trzeba z nim porozmawiać. W SEPA Core przyczyna przychodzi jednym z czterech kodów: MS02, jeśli klient odrzucił obciążenie, MS03 lub RR04, jeśli bank nie podaje powodu, oraz SL01, jeśli jego konto ogranicza polecenia zapłaty.

FlexigoTech · Odpowiada: Víctor Gómez · Aktualizacja: 6 listopada 2026

Najważniejsze

Wersje
Odoo 17, 18, 19 i 20
Sprawdzone
w kodzie źródłowym konektora, wersja 17.0, 18.0, 19.0 i 20.0 · w źródłach podanych na końcu
Czas czytania
4 min

Jedna przyczyna, cztery kody

Kod SEPA CoreTekst GoCardless
MS02The customer refused to accept this payment.
MS03, RR04The payment failed but the reason for the failure was not provided, usually for regulatory reasons.
SL01The payment failed due to a restriction on Direct Debit payments from the payer's bank account.

Wszystkie trzy wiersze pochodzą z tabeli nieudanych płatności (payments · failed) w dokumentacji GoCardless dla SEPA Core. W przeciwieństwie do innych przyczyn żadna z nich nie mówi, że mandat zostaje anulowany: klient nadal jest upoważniony do obciążeń, mimo że to konkretne obciążenie nie przeszło.

Karta przyczyny refer_to_payer w GoCardless
Przyczyna, jej cztery kody SEPA Core oraz tekst GoCardless dla MS02.

Co kryje się za każdym kodem

MS02 jest najbardziej jednoznaczną odpowiedzią: klient powiedział swojemu bankowi, żeby nie realizował tej składki. Konektor zapisał w komentarzu do kodu, że to kombinacja, którą zaobserwował w testowej płatności SEPA w sandboksie GoCardless. MS03 i RR04 są odwrotnością: płatność nie przechodzi, a bank nie podaje powodu, zwykle z przyczyn regulacyjnych, więc jedynym sposobem, by się dowiedzieć, co się dzieje, jest zapytanie klienta. SL01 wskazuje na konto: jego bank ogranicza obciążenia, które można na nie nałożyć, a zmienić to może tylko właściciel konta w swoim banku.

W przypadku MS02, RR04 i SL01 ponowne przedstawienie polecenia bez wcześniejszej rozmowy z klientem zwykle kończy się tak samo i może wiązać się z kolejną opłatą. MS03 ma wyjątek: według przewodnika Success+ w Austrii, Belgii, Niemczech, Luksemburgu i na Słowacji MS03 liczy się jako brak środków i Success+ może je ponowić. Jeśli tak jest, zdarzenie przychodzi z will_attempt_retry ustawionym na true.

Co robi Odoo z konektorem

Transakcję otwiera się z faktury, przyciskiem „Transakcja płatnicza” u góry; menu transakcji widoczne jest tylko w trybie deweloperskim, a w Odoo 20 w ogóle nie istnieje. Konektor zapisuje przyczynę w polu „GoCardless Cause”, a nie kod SEPA, i wyświetla: „GoCardless could not collect this payment (refer_to_payer).”. Dalej postępuje zgodnie z treścią zdarzenia:

  • Jeśli will_attempt_retry ma wartość true, transakcja otrzymuje status „Oczekujące”, zaznaczane jest pole „Success+ Will Retry” i komunikat brzmi: „Success+ will retry it automatically; there is nothing to do.”. Przycisk ponowienia się nie pojawia.
  • W przeciwnym razie transakcja przechodzi w stan „Błąd” i pojawia się przycisk „Retry collection”, o ile pozostały próby. Jeśli Odoo uznało już obciążenie za zrealizowane, konektor anuluje jego płatność, a faktura wraca do stanu oczekującej na zapłatę.
  • Mandat pozostaje bez zmian. refer_to_payer nie znajduje się wśród przyczyn, dla których konektor archiwizuje mandat, więc metoda płatności klienta pozostaje dostępna przy kolejnym obciążeniu.

Ten ostatni punkt jest celowy: archiwizowanie mandatu z powodu jednorazowego odrzucenia zmusiłoby klienta do podpisania nowego bez powodu.

Oba komunikaty zapisuje konektor podczas stosowania zdarzenia, bez udziału człowieka. W bazie danych utworzonej po polsku również wyświetlają się w języku angielskim, ponieważ konektor nie jest przetłumaczony na polski i te teksty zawsze są w języku angielskim: „GoCardless could not collect this payment (refer_to_payer).” oraz „Success+ will retry it automatically; there is nothing to do.”.

Co zrobić zależnie od kodu

Odoo nie informuje, który z czterech kodów nadszedł: konektor zapisuje tylko przyczynę. Kod zobaczysz w GoCardless. Według ich centrum pomocy powód każdej porażki widać na osi czasu płatności w Dashboardzie („You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.”). W trybie zaawansowanym dokładny kod znajduje się też w zdarzeniu (details.reason_code), a Dashboard przechowuje wysyłki webhooków z ostatnich 3 miesięcy w Developers > Webhooks wraz z ich treścią.

KodPierwszy krok
MS02Zapytaj klienta, dlaczego odrzucił polecenie: kwota, termin albo niezgoda z fakturą.
MS03Sprawdź „Success+ Will Retry”: w Austrii, Belgii, Niemczech, Luksemburgu i na Słowacji Success+ może ponowić MS03 jako brak środków. Jeśli pole nie jest zaznaczone, poproś klienta, by skontaktował się z bankiem.
RR04Poproś klienta, by skontaktował się z bankiem: GoCardless nie otrzymuje powodu.
SL01Klient musi zdjąć ograniczenie obciążeń ze swojego konta albo podać ci inne.

Gdy klient potwierdzi, że obciążenie przejdzie, użyj w transakcji przycisku „Retry collection” i potwierdź ostrzeżenie o opłacie. Konektor odpowie „Retry requested. GoCardless will confirm the new charge date.” i zostawi transakcję w stanie oczekującym. Pamiętaj o limicie: płatność można ponowić najwyżej 3 razy („Payments can be retried up to 3 times.”).

Czy mandat zostaje anulowany, jeśli klient odrzuci obciążenie?

Nie. Dokumentacja GoCardless tego nie przewiduje dla tej przyczyny, a konektor nie archiwizuje mandatu przy refer_to_payer. Jeśli klient chce przestać płacić przez polecenie zapłaty, anuluje mandat w swoim banku, a to przychodzi z inną przyczyną: mandate_cancelled.

Schemat: co GoCardless wysyła przy refer_to_payer i co Odoo robi z konektorem
Schemat sporządzony na podstawie kodu konektora (17.0, 18.0, 19.0 i 20.0) oraz dokumentacji GoCardless; przekreślone jest to, czego konektor nie robi przy tej przyczynie.

Z naszym konektorem

W Odoo 17, 18, 19 i 20 konektor zamienia refer_to_payer w nieopłaconą fakturę z widoczną przyczyną i mandatem, który nadal obowiązuje. Nie zgaduje kodu SEPA: Odoo zapisuje przyczynę w transakcji, a kod sprawdzasz w GoCardless. Decyzja o ponownym obciążeniu należy do ciebie, po rozmowie z klientem.

Czytaj dalej

GoCardless insufficient_funds (AM04): na koncie klienta brakowało środkówPolecenie zapłaty GoCardless kończy się błędem insufficient_funds i kodem SEPA AM04. Co oznacza, kiedy Success+ ponawia próbę i co Odoo robi z fakturą.GoCardless MD01: mandate_cancelled i authorisation_disputed przy płatności SEPAKod SEPA MD01 pojawia się w GoCardless jako mandate_cancelled lub authorisation_disputed przy nieudanej, zwróconej lub anulowanej płatności. Co z tym robi Odoo.Błąd retry_failed GoCardless przy ponawianiu płatności z OdooGoCardless odpowiada retry_failed, gdy płatność się nie nie powiodła lub nie można jej ponowić. Kiedy w Odoo jest „Retry collection” i co robi konektor.
Sprawdzone w kodzie źródłowym konektora (wersja 17.0, 18.0, 19.0 i 20.0) i w podlinkowanych źródłach

Źródła

  • docs.gocardless.com/docs/api-reference/events/payment
  • docs.gocardless.com/docs/api-reference/payment
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 15 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 79 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 76 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 71 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 725 w 17.0 (d203ee6), wiersz 725 w 18.0 (e2ab18b), wiersz 724 w 19.0 (ce7f5a3) i wiersz 748 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 729 w 17.0 (d203ee6), wiersz 729 w 18.0 (e2ab18b), wiersz 728 w 19.0 (ce7f5a3) i wiersz 752 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 754 w 17.0 (d203ee6), wiersz 754 w 18.0 (e2ab18b), wiersz 753 w 19.0 (ce7f5a3) i wiersz 777 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 122 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: views/payment_transaction_views.xml, wiersz 13 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 436 w 17.0 (d203ee6), wiersz 436 w 18.0 (e2ab18b), wiersz 436 w 19.0 (ce7f5a3) i wiersz 438 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 356 w 17.0 (d203ee6), wiersz 356 w 18.0 (e2ab18b), wiersz 356 w 19.0 (ce7f5a3) i wiersz 358 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1016 w 17.0 (d203ee6), wiersz 1016 w 18.0 (e2ab18b), wiersz 1016 w 19.0 (ce7f5a3) i wiersz 1031 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1022 w 17.0 (d203ee6), wiersz 1022 w 18.0 (e2ab18b), wiersz 1022 w 19.0 (ce7f5a3) i wiersz 1037 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: __manifest__.py, wiersz 31 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 63 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 418 w 17.0 (d203ee6), wiersz 418 w 18.0 (e2ab18b), wiersz 417 w 19.0 (ce7f5a3) i wiersz 432 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: views/payment_transaction_views.xml, wiersz 27 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pl.po
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1083 w 17.0 (d203ee6), wiersz 1083 w 18.0 (e2ab18b), wiersz 1083 w 19.0 (ce7f5a3) i wiersz 1090 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1063 w 17.0 (d203ee6), wiersz 1063 w 18.0 (e2ab18b), wiersz 1063 w 19.0 (ce7f5a3) i wiersz 1070 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 567 w 17.0 (d203ee6), wiersz 567 w 18.0 (e2ab18b), wiersz 567 w 19.0 (ce7f5a3) i wiersz 569 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 461 w 17.0 (d203ee6), wiersz 461 w 18.0 (e2ab18b), wiersz 460 w 19.0 (ce7f5a3) i wiersz 479 w 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/webhooks
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • support.gocardless.com/hc/en-gb/articles/360001467265
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 66 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml