Przejdź do głównej treści
GoCardless API · invalid_state · reinstate

GoCardless mandate_not_inactive: mandatu nie można reaktywować

Reaktywacja mandatu (reinstate) to ponowne przedstawienie bankom anulowanego lub wygasłego mandatu. GoCardless odrzuca ją błędem mandate_not_inactive, jeśli mandat jest już aktywny lub właśnie jest przedstawiany. Konektor może o nią poprosić tylko poza produkcją, bo w produkcji GoCardless ogranicza tę funkcję.

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
3 min

Co mówi GoCardless

ReasonTypTekst GoCardless
mandate_not_inactiveinvalid_state„Mandate could not be reinstated” oraz „it is already active or being submitted.”

GoCardless oddziela obie części tekstu myślnikiem. W referencji API szczegółowo to opisuje: „This will fail with a mandate_not_inactive error if the mandate is already being submitted, or is active.”. To błąd invalid_state, a przy takich błędach GoCardless zaleca poinformować użytkownika i nie ponawiać próby („invalid_state → inform the end user, do not allow retry.”).

Karta błędu mandate_not_inactive z GoCardless
Reason, jego typ invalid_state, akcja reaktywacji (actions/reinstate) i tekst GoCardless.

Które mandaty można reaktywować

Reaktywacja ma więcej warunków niż sam stan:

  • To funkcja z ograniczeniami: „Restricted this endpoint requires approved custom payment pages”.
  • Działa tylko dla mandatu anulowanego z Dashboardu lub przez API: „A mandate can only be reinstated if it has been cancelled through the dashboard or the API.”. Mandatu anulowanego przez bank nie da się: „Any mandate that has been cancelled by the bank cannot be reinstated.”.
  • Dotyczy mandatów anulowanych lub wygasłych („Reinstates a cancelled or expired mandate to the banks.”), a mandat można przedstawić ponownie do 10 razy („Mandates can be resubmitted up to 10 times.”).

Po złożeniu prośby proces przebiega jak przy zakładaniu mandatu: pojawia się resubmission_requested, a potem, jak podaje GoCardless, „so you will receive a submitted webhook, followed by a reinstated or failed webhook up to two working days later.”.

Co robi konektor w Odoo

Na karcie metody płatności klienta konektor pokazuje przycisk „Reinstate mandate (sandbox)”. Pojawia się tylko wtedy, gdy mandat pochodzi z GoCardless, dostawca nie jest w produkcji (w Odoo 17, 18 i 19 według stanu dostawcy, w Odoo 20 według pola produkcji) i „Mandate Status” ma wartość cancelled, failed lub expired.

Po kliknięciu:

  1. Konektor prosi GoCardless o reaktywację tego mandatu.
  2. Jeśli GoCardless ją przyjmie, stan przechodzi na reinstate_requested, a na karcie klienta widać: „Reinstatement of the GoCardless mandate requested. It stays unusable until the bank confirms it.”. Metoda płatności pozostaje zarchiwizowana.
  3. Gdy przyjdzie reinstated, konektor uznaje mandat za ważny: reaktywuje go i zapisuje: „The GoCardless mandate is usable again (reinstated).”.

Jeśli GoCardless odpowie mandate_not_inactive, konektor tego nie przechwytuje: Odoo pokazuje „GoCardless rejected the request.” z komunikatem GoCardless, reason i request_id, a mandat zostaje bez zmian. Dzieje się tak, gdy Odoo uważa mandat za martwy, a w GoCardless jest już aktywny lub przedstawiany, bo jego zdarzenia jeszcze nie dotarły do Odoo. Po zaakceptowanej prośbie przycisk już się nie pokazuje, bo stan przechodzi na reinstate_requested.

Notatkę, że mandat znów można używać, zapisuje konektor przy przetwarzaniu zdarzenia, bez udziału człowieka. Konektor nie jest przetłumaczony na polski: te teksty zawsze pojawiają się po angielsku, także w Odoo po polsku, niezależnie od tego, czy uruchamia je użytkownik, czy zaplanowane działanie: „The GoCardless mandate is usable again (reinstated).”.

Schemat: co GoCardless wysyła przy mandate_not_inactive i co robi Odoo z konektorem
Schemat przygotowany na podstawie kodu konektora (17.0, 18.0, 19.0 i 20.0) oraz dokumentacji GoCardless.

Co zrobić

  1. Gdy pojawi się mandate_not_inactive, znajdź mandat w Dashboardzie GoCardless. Jeśli jest aktywny lub przedstawiany, nie ma czego reaktywować: poczekaj, aż dotrą jego zdarzenia. Zadanie, które co godzinę odzyskuje zagubione zdarzenia, je przyniesie.
  2. Jeśli mandat anulował bank, nie próbuj: GoCardless nie reaktywuje takich mandatów. Poproś klienta o nowy mandat.
  3. W produkcji konektor nie oferuje reaktywacji: drogą jest nowy mandat podpisany przez klienta.
  4. Aby to przetestować, użyj sandboxa GoCardless z dostawcą w trybie testowym.

Dlaczego przycisk pojawia się tylko poza produkcją?

Bo GoCardless ogranicza reaktywację do podmiotów z zatwierdzonymi własnymi stronami płatności, a konektor oferuje ją tylko poza produkcją.

Ile trwa, zanim mandat znów zacznie działać?

Tyle, ile trwa odpowiedź banków: według GoCardless najpierw informuje, że poproszono o reaktywację, potem, że mandat został przedstawiony, a do dwóch dni roboczych później, czy został reaktywowany, czy się nie udało. Do tego czasu konektor z niego nie korzysta.

Z naszym konektorem

W Odoo 17, 18, 19 i 20 konektor oferuje reaktywację mandatu anulowanego, nieudanego lub wygasłego, i to tylko poza produkcją, a nie używa go ponownie, dopóki GoCardless nie potwierdzi reaktywacji swoim zdarzeniem.

Czytaj dalej

GoCardless mandate_expired: mandat wygasł z powodu braku użyciaGoCardless oznacza mandat jako expired, gdy przez cały okres uśpienia nie podjęto z nim żadnej próby obciążenia. Co robi Odoo i jak dalej pobierać płatności.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 mandate_is_inactive w GoCardless przy tworzeniu pobrania z OdooGoCardless zwraca mandate_is_inactive przy płatności z mandatem anulowanym, nieudanym lub wygasłym. Dlaczego tak się dzieje i jak obsługuje to konektor w Odoo.
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/responses-and-errors
  • docs.gocardless.com/docs/api-reference/mandate
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 134 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: views/payment_token_views.xml, wiersz 23 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: views/payment_token_views.xml, wiersz 22 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 998 w 17.0 (d203ee6), wiersz 998 w 18.0 (e2ab18b), wiersz 998 w 19.0 (ce7f5a3) i wiersz 1013 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_token.py, wiersz 176 w 17.0 (d203ee6), wiersz 176 w 18.0 (e2ab18b), wiersz 176 w 19.0 (ce7f5a3) i wiersz 175 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_token.py, wiersz 173 w 17.0 (d203ee6), wiersz 173 w 18.0 (e2ab18b), wiersz 173 w 19.0 (ce7f5a3) i wiersz 172 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1004 w 17.0 (d203ee6), wiersz 1004 w 18.0 (e2ab18b), wiersz 1004 w 19.0 (ce7f5a3) i wiersz 1019 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_token.py, wiersz 170 w 17.0 (d203ee6), wiersz 170 w 18.0 (e2ab18b), wiersz 170 w 19.0 (ce7f5a3) i wiersz 169 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_provider.py, wiersz 397 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_provider.py, wiersz 462 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 521 w 17.0 (d203ee6), wiersz 521 w 18.0 (e2ab18b), wiersz 521 w 19.0 (ce7f5a3) i wiersz 523 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 158 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: models/payment_token.py, wiersz 77 w 17.0 (d203ee6), wiersz 77 w 18.0 (e2ab18b), wiersz 77 w 19.0 (ce7f5a3) i wiersz 76 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1157 w 17.0 (d203ee6), wiersz 1157 w 18.0 (e2ab18b), wiersz 1157 w 19.0 (ce7f5a3) i wiersz 1164 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: views/payment_token_views.xml, wiersz 15 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 785 w 17.0 (d203ee6), wiersz 785 w 18.0 (e2ab18b), wiersz 785 w 19.0 (ce7f5a3) i wiersz 800 w 20.0 (688d86b)
  • Kod modułu: flexigo_payment_gocardless: const.py, wiersz 117 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
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • Kod modułu: flexigo_payment_gocardless: __manifest__.py, wiersz 31 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)