Wat GoCardless zegt
| Reason | Type | Tekst van GoCardless |
|---|---|---|
mandate_is_inactive | invalid_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.

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:
- Herkent de reason
mandate_is_inactivein het antwoord. - Vraagt GoCardless naar dat mandaat om de status te bevestigen.
- 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".
- 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.

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