Naar hoofdinhoud
GoCardless API · invalid_state

Fout mandate_is_inactive van GoCardless bij het aanmaken van een incasso vanuit Odoo

mandate_is_inactive komt niet van de bank van de klant maar van de GoCardless-API zelf: Odoo heeft geprobeerd een incasso aan te maken met een mandaat dat niet meer actief is. Het is een fout van het type invalid_state, en de documentatie van GoCardless is duidelijk over wat je moet doen: de gebruiker waarschuwen en niet opnieuw proberen.

FlexigoTech · Verantwoordelijk: Víctor Gómez · Bijgewerkt op 6 november 2026

In het kort

Versies
Odoo 17, 18, 19 en 20
Gecontroleerd
in de broncode van de connector, versie 17.0, 18.0, 19.0 en 20.0 · in de bronnen onderaan
Leestijd
4 min

Wat GoCardless zegt

ReasonTypeTekst van GoCardless
mandate_is_inactiveinvalid_state"Payment could not be created" en "mandate is cancelled, failed, or expired."

GoCardless scheidt de twee delen van de tekst met een streepje. Volgens GoCardless betekent een invalid_state-fout dat de actie niet geldig is in de huidige staat van de resource. Hier is de resource het mandaat: geannuleerd, mislukt of verlopen, dus het accepteert geen incasso's meer.

Kaart van de fout mandate_is_inactive van GoCardless
De reason, het type invalid_state en de tekst waarmee GoCardless deze fout documenteert.

Hoe je bij deze fout terechtkomt

Normaal gesproken hoort Odoo via een GoCardless-gebeurtenis dat een mandaat is komen te vervallen voordat het ermee probeert te incasseren. Deze fout verschijnt wanneer dat niet is gebeurd: de melding kwam niet aan of te laat, of het mandaat werd vlak voor de incasso geannuleerd. De incasso kan komen van een abonnement dat wordt verlengd of van een betaling die is geregistreerd met de bewaarde betaalmethode van de klant. De meldingen van GoCardless komen binnen via webhook: met de verbinding in twee klikken via FlexigoTech Cloud, of in de geavanceerde modus naar het eindpunt dat je zelf hebt aangemaakt in het Dashboard van GoCardless. Als die route faalt, merkt Odoo het niet op tijd.

Wat de connector doet

Zonder speciale afhandeling zie je de fout zoals hij is, met de tekst van de API, en blijft het mandaat worden aangeboden voor de volgende factuur. De connector doet iets anders:

  1. Herkent de reason mandate_is_inactive in het antwoord.
  2. Vraagt GoCardless naar dat mandaat om de status te bevestigen.
  3. Als het geannuleerd, mislukt, verlopen, verbruikt of geblokkeerd is, archiveert hij het in Odoo. Als dit de eerste melding van dat dode mandaat is, schrijft hij het in de klantkaart, met de status van het mandaat tussen haakjes ("The GoCardless direct debit mandate of … is no longer usable (cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate."), en maakt hij de activiteit "GoCardless mandate lost".
  4. Zet de transactie op "Fout" met een eigen melding, in plaats van de ruwe fout: "The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.".

Als het mandaat blijkt actief te zijn, raakt de connector het niet aan en toont de transactie de fout van GoCardless: "GoCardless rejected the request." gevolgd door het bericht van de API en de request_id. Dezelfde afhandeling geldt voor de knop om een incasso opnieuw te proberen wanneer GoCardless mandate_is_inactive antwoordt.

De connector is niet in het Nederlands vertaald: deze teksten verschijnen altijd in het Engels, ook in een Nederlandstalige Odoo, of een gebruiker of een geplande actie ze nu start: "The GoCardless direct debit mandate of … is no longer usable (cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.", "GoCardless mandate lost", "The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate." en "GoCardless rejected the request.".

Waarom je beter niet opnieuw probeert

GoCardless zegt het in de beschrijving van de invalid_state-fouten: je moet de gebruiker informeren en niet laten opnieuw proberen. Een geannuleerd mandaat wordt niet weer actief door er vaker tegenaan te gaan; de klant moet een nieuw mandaat tekenen of, in sommige gevallen en alleen met speciale rechten van GoCardless, het mandaat laten reactiveren.

Schema: wat GoCardless antwoordt met mandate_is_inactive en wat Odoo met de connector doet
Schema op basis van de code van de module (17.0, 18.0, 19.0 en 20.0) en de documentatie van GoCardless.

Wat te doen

  • Bekijk het bericht van de transactie en de notitie van de connector in de klantkaart. De transactie open je vanuit de factuur, met de knop "Betalingstransactie" bovenaan; het transactiemenu verschijnt alleen in de ontwikkelaarsmodus, en in Odoo 20 bestaat het niet. Beide teksten vertellen je in welke staat het mandaat zich bevindt.
  • Vraag de klant om een nieuw mandaat en incasseer daarmee de openstaande factuur.
  • Als het vaak gebeurt, controleer dan of de webhooks van GoCardless bij je Odoo aankomen: die waarschuwen voordat de incasso komt. Toch vraagt de connector elk uur de gebeurtenissen op die verloren zijn gegaan.

Waarom raadpleegt de connector het mandaat in plaats van het gewoon te archiveren?

Omdat hij alleen archiveert wat GoCardless bevestigt als dood. Als de raadpleging zegt dat het mandaat actief is, zou archiveren de klant onnodig laten tekenen.

Met onze connector

In Odoo 17, 18, 19 en 20 zet de connector een API-fout om in een duidelijke taak: het dode mandaat verdwijnt uit de lijst met betaalmethoden, de klant wordt in zijn kaart gewaarschuwd en de factuur blijft openstaan tot er een werkend mandaat is.

Lees verder

GoCardless MD01: mandate_cancelled en authorisation_disputed bij een SEPA-incassoSEPA-code MD01 komt bij GoCardless als mandate_cancelled of authorisation_disputed, bij een mislukte, teruggeboekte of geannuleerde incasso. Wat Odoo doet.GoCardless bank_account_closed: AC04 en MD07, de rekening bestaat niet meerGoCardless bank_account_closed met AC04 (gesloten rekening) of MD07 (overleden houder): het mandaat vervalt. Wat Odoo met de factuur en de klant doet.GoCardless-fout retry_failed bij het herhalen van een incasso vanuit OdooGoCardless antwoordt retry_failed als de betaling niet mislukt is of geen herhaling meer toelaat. Wanneer de knop in Odoo verschijnt en wat de connector doet.
Gecontroleerd in de broncode van de connector (versie 17.0, 18.0, 19.0 en 20.0) en in de gelinkte bronnen

Bronnen

  • Broncode van de module: flexigo_payment_gocardless: const.py, regel 15 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 247 in 17.0 (d203ee6), regel 247 in 18.0 (e2ab18b), regel 247 in 19.0 (ce7f5a3) en regel 258 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: __manifest__.py, regel 6 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/mandate
  • Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 278 in 17.0 (d203ee6), regel 278 in 18.0 (e2ab18b), regel 278 in 19.0 (ce7f5a3) en regel 289 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: const.py, regel 33 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_token.py, regel 131 in 17.0 (d203ee6), regel 131 in 18.0 (e2ab18b), regel 131 in 19.0 (ce7f5a3) en regel 130 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: const.py, regel 134 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 397 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 469 in 17.0 (d203ee6), regel 469 in 18.0 (e2ab18b), regel 468 in 19.0 (ce7f5a3) en regel 487 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: const.py, regel 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1148 in 17.0 (d203ee6), regel 1148 in 18.0 (e2ab18b), regel 1148 in 19.0 (ce7f5a3) en regel 1155 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 495 in 17.0 (d203ee6), regel 495 in 18.0 (e2ab18b), regel 495 in 19.0 (ce7f5a3) en regel 497 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 521 in 17.0 (d203ee6), regel 521 in 18.0 (e2ab18b), regel 521 in 19.0 (ce7f5a3) en regel 523 in 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Broncode van de module: flexigo_payment_gocardless: __manifest__.py, regel 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 321 in 17.0 (d203ee6), regel 321 in 18.0 (e2ab18b), regel 321 in 19.0 (ce7f5a3) en regel 332 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1233 in 17.0 (d203ee6), regel 1233 in 18.0 (e2ab18b), regel 1233 in 19.0 (ce7f5a3) en regel 1240 in 20.0 (688d86b)
  • Broncode van de module: flexigo_payment_gocardless: models/payment_token.py, regel 83 in 17.0 (d203ee6), regel 83 in 18.0 (e2ab18b), regel 83 in 19.0 (ce7f5a3) en regel 82 in 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/nl.po
  • Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml