Co mówi GoCardless
| Zdarzenie | Przyczyna | Tekst GoCardless |
|---|---|---|
| mandates · expired | mandate_expired | The mandate is being marked as expired, because no payments have been collected against it for the dormancy period of your service user number. If you have access to the mandate reinstation API endpoint, you can use this to attempt to set this mandate up again. |
| payments · cancelled | mandate_expired | The mandate expired before the payment could be collected. |
Opis zdarzenia jest jasny: „No collection attempts were made against the mandate within the dormancy period of your service user number.”. A konsekwencja: „As a result it has expired, and no further collections can be taken against it.”. Status mandatu przechodzi na expired, co GoCardless definiuje jako wygaśnięcie z powodu nieaktywności.

Kiedy się pojawia
Dotyczy mandatu, który został podpisany, a potem przestał być używany: klienta, który już nie kupuje, albo takiego, którego obciąża się tak rzadko, że między jednym obciążeniem a następnym mija cały okres nieaktywności. Liczy się czas bez prób obciążenia, a nie data podpisania.
Jeśli w chwili wygaśnięcia czekało obciążenie do wysłania, GoCardless anuluje je z tą samą przyczyną: „The mandate expired before the payment could be collected.”.
Co robi Odoo z konektorem
- Zdarzenie wygasłego mandatu go wycofuje. Konektor traktuje mandat
expiredjak martwy: archiwizuje metodę płatności klienta, zapisuje w jego karcie, że mandat nie może już być używany, i tworzy aktywność „GoCardless mandate lost”. Dzieje się to tylko za pierwszym razem; jeśli inne zdarzenie przyniesie tę samą informację, mandat jest już zarchiwizowany. - Anulowana płatność ustawia transakcję na „Błąd” („Błąd”), którą otwiera się z faktury przyciskiem „Transakcja płatnicza” u góry, z komunikatem „GoCardless could not collect this payment (mandate_expired).”. Jeśli faktura była już opłacona tym obciążeniem, płatność zostaje anulowana i faktura znów jest nieopłacona. Ponieważ
mandate_expiredto jedna z przyczyn, dla których konektor archiwizuje mandat, to zdarzenie także go wycofuje jakoexpired. - W karcie metody płatności pole „Mandate Status” pokazuje
expired.
Te teksty konektor zapisuje przy stosowaniu zdarzenia, bez udziału użytkownika. W bazie danych utworzonej po polsku pojawiają się tak samo; 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 direct debit mandate of … is no longer usable (mandate_expired). No further collection can be taken against it. Ask the customer to set up a new mandate.”, „GoCardless mandate lost” i „GoCardless could not collect this payment (mandate_expired).”.
Jeśli Odoo spróbuje obciążyć mandat, zanim się o tym dowie, bo zdarzenie zginęło po drodze, GoCardless odpowie mandate_is_inactive. Konektor wtedy pobiera mandat, archiwizuje go i wpisuje do transakcji własny komunikat: „The customer's GoCardless mandate is expired, so it cannot be charged. Ask the customer for a new mandate.”. Zadanie, które co godzinę odzyskuje utracone zdarzenia, w końcu sprowadza także zdarzenie mandatu.

Reaktywować czy poprosić o nowy?
GoCardless wskazuje dwie drogi. Aby dalej obciążać tego klienta, trzeba poprosić go o zgodę i użyć reaktywacji mandatu („you should request their permission and use the reinstate endpoint”). Ten endpoint jest jednak ograniczony: wymaga własnych stron płatności zatwierdzonych przez GoCardless („Restricted this endpoint requires approved custom payment pages”).
Konektor nie reaktywuje mandatów na produkcji: przycisk „Reinstate mandate (sandbox)” w karcie metody płatności pojawia się tylko przy dostawcy w trybie testowym i przy mandacie anulowanym, nieudanym lub wygasłym. Na produkcji drogą jest nowy mandat.
Co zrobić
- Porozmawiaj z klientem: jeśli nadal jest klientem, poproś go o podpisanie nowego mandatu. W Odoo będzie to nowa metoda płatności.
- Pobierz z nim oczekujące faktury. Obciążenia, które GoCardless anulował z powodu wygaśnięcia, nie zostaną wysłane same.
- Jeśli klient jest obciążany bardzo rzadko, licz się z tym, że jego mandat może wygasnąć między jednym obciążeniem a następnym.
Czy mogę obciążyć wygasły mandat, jeśli klient się zgadza?
Nie tym mandatem: GoCardless nie pozwala tworzyć z nim obciążeń. Potrzebny jest nowy albo, tam gdzie to możliwe, reaktywacja w GoCardless.
Czy można przetestować reaktywację?
Tak, w sandboxie GoCardless. Przy dostawcy w trybie testowym karta metody płatności pokazuje „Reinstate mandate (sandbox)”, gdy mandat jest wygasły.
Z naszym konektorem
W Odoo 17, 18, 19 i 20 konektor wycofuje wygasły mandat, gdy tylko GoCardless o tym poinformuje, zostawia obciążenie anulowane w błędzie z jego przyczyną i ostrzega w karcie klienta, aby przed następną fakturą poprosić o nowy mandat.
Czytaj dalej
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/mandate
- docs.gocardless.com/docs/api-reference/events/payment
- docs.gocardless.com/docs/api-reference/mandate
- Kod modułu: flexigo_payment_gocardless: const.py, wiersz 33 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 83 w 17.0 (d203ee6), wiersz 83 w 18.0 (e2ab18b), wiersz 83 w 19.0 (ce7f5a3) i wiersz 82 w 20.0 (688d86b)
- Kod modułu: flexigo_payment_gocardless: models/payment_token.py, wiersz 131 w 17.0 (d203ee6), wiersz 131 w 18.0 (e2ab18b), wiersz 131 w 19.0 (ce7f5a3) i wiersz 130 w 20.0 (688d86b)
- Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1148 w 17.0 (d203ee6), wiersz 1148 w 18.0 (e2ab18b), wiersz 1148 w 19.0 (ce7f5a3) i wiersz 1155 w 20.0 (688d86b)
- Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 495 w 17.0 (d203ee6), wiersz 495 w 18.0 (e2ab18b), wiersz 495 w 19.0 (ce7f5a3) i wiersz 497 w 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: models/payment_transaction.py, wiersz 914 w 17.0 (d203ee6), wiersz 914 w 18.0 (e2ab18b), wiersz 913 w 19.0 (ce7f5a3) i wiersz 937 w 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 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: 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: models/payment_transaction.py, wiersz 278 w 17.0 (d203ee6), wiersz 278 w 18.0 (e2ab18b), wiersz 278 w 19.0 (ce7f5a3) i wiersz 289 w 20.0 (688d86b)
- Kod modułu: flexigo_payment_gocardless: models/payment_transaction.py, wiersz 321 w 17.0 (d203ee6), wiersz 321 w 18.0 (e2ab18b), wiersz 321 w 19.0 (ce7f5a3) i wiersz 332 w 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/responses-and-errors
- Kod modułu: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, wiersz 1233 w 17.0 (d203ee6), wiersz 1233 w 18.0 (e2ab18b), wiersz 1233 w 19.0 (ce7f5a3) i wiersz 1240 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: 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: 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 162 w 17.0 (d203ee6), wiersz 162 w 18.0 (e2ab18b), wiersz 162 w 19.0 (ce7f5a3) i wiersz 161 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/17.0/odoo/http.py
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pl.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- Kod modułu: flexigo_payment_gocardless: __manifest__.py, wiersz 31 w 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
