Wat GoCardless zegt
| Gebeurtenis | Oorzaak | SEPA Core-code | Tekst van GoCardless |
|---|---|---|---|
| payments · failed | insufficient_funds | AM04 | The customer's account had insufficient funds to make this payment. |
De documentatie van de gebeurtenis failed voegt een belangrijk detail toe: GoCardless probeert de betaling zelf opnieuw wanneer het veld will_attempt_retry van de gebeurtenis op true staat ("GoCardless will automatically retry the payment if event's will_attempt_retry field is true."). Die automatische herhaling is Success+, en om die te gebruiken moet je ze activeren in het Dashboard van GoCardless.
Volgens de gids van Success+ probeert het alleen opnieuw bij betalingen die mislukken door een tekort aan geld. In SEPA gaat het om twee codes: AM04 en MS03, en MS03 alleen in Oostenrijk, België, Duitsland, Luxemburg en Slowakije. GoCardless waarschuwt echter dat de criteria kunnen wijzigen: wat voor elke storing geldt, is het veld will_attempt_retry.

Waarom het binnenkomt wanneer de factuur al betaald leek
Een SEPA-incasso wordt niet meteen afgehandeld: volgens GoCardless kan het innen van een betaling tot 5 werkdagen duren. Meestal meldt de bank van de klant de storing één werkdag na de incassodatum, voordat de betaling confirmed wordt. In enkele gevallen komt de melding later, terwijl de betaling al als confirmed staat: dat is een laat falen (late failure), en de gids van Success+ noemt als voorbeeld een storing door gebrek aan geld. Daarom kan AM04 verschijnen terwijl de incasso in Odoo al bevestigd was en de factuur afgeletterd. De connector houdt daar rekening mee: als een incasso die Odoo als voltooid beschouwde mislukt, annuleert hij de betaling en staat de factuur weer open.
De GoCardless-connector voor Odoo int alleen via SEPA Core en in euro's, en bij een mislukte SEPA Core-betaling geeft de documentatie van GoCardless bij insufficient_funds één enkele code: AM04. In Odoo zie je de oorzaak en niet de code, omdat de connector de oorzaak van de gebeurtenis opslaat en niet de SEPA-code. De connector noteert in zijn code bovendien dat de combinatie insufficient_funds met AM04 is waargenomen bij echte SEPA-betalingen in de sandbox van GoCardless.
Wat je in Odoo ziet met de connector
Elke incasso die de connector verstuurt, vraagt aan GoCardless retry_if_possible, de optie van Success+. Wanneer de storing binnenkomt, kunnen er twee dingen gebeuren, en de transactie laat je in zijn GoCardless-groep zien welke: "GoCardless Cause" en het vinkje "Success+ Will Retry". De transactie open je vanuit de factuur, met de knop "Betalingstransactie" bovenaan; het menu met transacties is alleen zichtbaar in de ontwikkelaarsmodus en bestaat niet in Odoo 20.
will_attempt_retry | Status | "Bericht" van de transactie | Knop "Retry collection" |
|---|---|---|---|
| true | "In behandeling" | "GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do." | Verschijnt niet |
| false | "Fout", en de factuur staat weer open | "GoCardless could not collect this payment (insufficient_funds)." en, als GoCardless de reden geeft, "It will not be retried automatically (…)." | Verschijnt, als er nog pogingen over zijn en het mandaat actief is |
Die berichten schrijft de connector bij het verwerken van de gebeurtenis, zonder dat iemand ingrijpt. 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: "GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do.", "GoCardless could not collect this payment (insufficient_funds)." en "It will not be retried automatically (…).".
De transactie blijft bewust in behandeling wanneer Success+ gaat opnieuw proberen: het geld kan nog binnenkomen, en een foutstatus zou doen lijken dat de incasso verloren is. Elke keer dat GoCardless de incasso opnieuw aanbiedt, stuurt het een gebeurtenis resubmission_requested, en de connector verhoogt "GoCardless Retries" met één, of het nu een poging van Success+ is of een poging die jij hebt gevraagd.
Wat te doen
- Open de transactie vanuit de factuur en kijk naar "GoCardless Cause" en "Success+ Will Retry".
- Als Success+ het opnieuw gaat proberen, hoef je niets te doen: de herhaalknop verschijnt zelfs niet. GoCardless vraagt om de klant ondertussen niet via een ander kanaal te incasseren, omdat die anders twee keer zou betalen.
- Als het niet opnieuw wordt geprobeerd, overleg dan eerst met de klant wanneer er weer saldo is, en klik op "Retry collection" wanneer die dat bevestigt. De knop kiest geen datum: de nieuwe incassodatum bepaalt GoCardless, en de transactie komt in de status "Retry requested. GoCardless will confirm the new charge date.".
- Houd het bij: GoCardless staat maximaal 3 pogingen per betaling toe ("Payments can be retried up to 3 times."), en de connector telt ook de pogingen van Success+ mee in "GoCardless Retries".
Annuleert een AM04 het mandaat van de klant?
Nee. De oorzaak insufficient_funds staat niet in de lijst van oorzaken waardoor de connector het mandaat archiveert: dat zijn mandate_cancelled, bank_account_closed, mandate_expired en authorisation_disputed. De klant houdt zijn betaalmethode voor de volgende factuur.
Waarom probeert Success+ niet elke storing opnieuw?
Omdat de gids het beperkt tot betalingen zonder saldo: in SEPA AM04 en, alleen in vijf landen, MS03. Een klant die de incasso weigert of een gesloten rekening lossen zich niet op door de incasso opnieuw aan te bieden. De connector beslist dat niet zelf: hij volgt het veld will_attempt_retry van elke storing.

Met onze connector
De GoCardless-connector voor Odoo 17, 18, 19 en 20 vertaalt de gebeurtenis naar iets wat je vanuit de factuur kunt beheren: hij houdt de transactie in behandeling terwijl Success+ werkt, zet ze op fout en heropent de factuur wanneer er geen nieuwe poging meer komt, en telt de pogingen zodat hij je geen herhaling aanbiedt die niet nodig is. Wat hij niet kan, is geld op de rekening van je klant zetten: als AM04 zich herhaalt, is het gesprek met de klant wat de incasso oplost.
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
- docs.gocardless.com/docs/api-reference/events/payment
- docs.gocardless.com/docs/api-reference/payment
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- 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: const.py, regel 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 71 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 260 in 17.0 (d203ee6), regel 260 in 18.0 (e2ab18b), regel 260 in 19.0 (ce7f5a3) en regel 271 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 729 in 17.0 (d203ee6), regel 729 in 18.0 (e2ab18b), regel 728 in 19.0 (ce7f5a3) en regel 752 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 746 in 17.0 (d203ee6), regel 746 in 18.0 (e2ab18b), regel 745 in 19.0 (ce7f5a3) en regel 769 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 732 in 17.0 (d203ee6), regel 732 in 18.0 (e2ab18b), regel 731 in 19.0 (ce7f5a3) en regel 755 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 754 in 17.0 (d203ee6), regel 754 in 18.0 (e2ab18b), regel 753 in 19.0 (ce7f5a3) en regel 777 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 680 in 17.0 (d203ee6), regel 680 in 18.0 (e2ab18b), regel 679 in 19.0 (ce7f5a3) en regel 703 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 430 in 17.0 (d203ee6), regel 430 in 18.0 (e2ab18b), regel 429 in 19.0 (ce7f5a3) en regel 444 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 122 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 119 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 461 in 17.0 (d203ee6), regel 461 in 18.0 (e2ab18b), regel 460 in 19.0 (ce7f5a3) en regel 479 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 484 in 17.0 (d203ee6), regel 484 in 18.0 (e2ab18b), regel 483 in 19.0 (ce7f5a3) en regel 502 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: views/payment_transaction_views.xml, regel 13 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 63 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 418 in 17.0 (d203ee6), regel 418 in 18.0 (e2ab18b), regel 417 in 19.0 (ce7f5a3) en regel 432 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: views/payment_transaction_views.xml, regel 22 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: views/payment_transaction_views.xml, regel 27 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: views/payment_transaction_views.xml, regel 28 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/nl.po
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 436 in 17.0 (d203ee6), regel 436 in 18.0 (e2ab18b), regel 436 in 19.0 (ce7f5a3) en regel 438 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1083 in 17.0 (d203ee6), regel 1083 in 18.0 (e2ab18b), regel 1083 in 19.0 (ce7f5a3) en regel 1090 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 703 in 17.0 (d203ee6), regel 703 in 18.0 (e2ab18b), regel 703 in 19.0 (ce7f5a3) en regel 710 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 356 in 17.0 (d203ee6), regel 356 in 18.0 (e2ab18b), regel 356 in 19.0 (ce7f5a3) en regel 358 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1063 in 17.0 (d203ee6), regel 1063 in 18.0 (e2ab18b), regel 1063 in 19.0 (ce7f5a3) en regel 1070 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 408 in 17.0 (d203ee6), regel 408 in 18.0 (e2ab18b), regel 408 in 19.0 (ce7f5a3) en regel 410 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1016 in 17.0 (d203ee6), regel 1016 in 18.0 (e2ab18b), regel 1016 in 19.0 (ce7f5a3) en regel 1031 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1022 in 17.0 (d203ee6), regel 1022 in 18.0 (e2ab18b), regel 1022 in 19.0 (ce7f5a3) en regel 1037 in 20.0 (688d86b)
- 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)
- support.gocardless.com/hc/en-gb/articles/360001467265
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 66 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
