Wat GoCardless zegt
| Reason | Type | Tekst van GoCardless |
|---|---|---|
retry_failed | invalid_state | Payment could not be retried. |
De documentatie van het herhalen (POST /payments/{id}/actions/retry) geeft de regels: de betaling wordt herhaald als het mandaat actief is, de API geeft retry_failed terug als de betaling niet is mislukt en "Payments can be retried up to 3 times.". Zoals bij alle invalid_state-fouten vraagt GoCardless om de gebruiker van het systeem te waarschuwen en hem niet te laten herhalen. De connector noteert in zijn code dat een vierde herhaling in de GoCardless-sandbox ook retry_failed kreeg.

Waarom het verschijnt
Volgens de documentatie komt retry_failed als de betaling niet is mislukt, en de connector zag het ook bij een vierde herhaling. Bij een mandaat dat niet meer actief is, zegt de documentatie niet welke fout komt: de connector verwacht retry_failed of mandate_is_inactive en behandelt beide gelijk.
Een betaling die niet mislukt is, omvat meer dan het lijkt. Een openstaande of bevestigde incasso is niet mislukt, en een teruggeboekte (charged_back) evenmin: het geld kwam binnen en de bank van de klant haalde het daarna terug. Volgens de GoCardless-documentatie zou elk daarvan retry_failed krijgen.
Bij de limiet van herhalingen verwart vooral Success+. Als Success+ een betaling herhaalt, stuurt GoCardless een resubmission_requested-event, net als bij elke andere herhaling. De connector telt er één op per zo'n event, of het nu van Success+ komt of van een herhaling die vanuit Odoo is aangevraagd, en noteert in zijn code dat de limiet van 3 bij GoCardless die van Success+ meetelt. Omdat elke incasso die de connector verstuurt retry_if_possible aanvraagt, is met Success+ ingeschakeld een deel van dat quotum vaak al opgebruikt als je de factuur bekijkt.
Wat je in Odoo ziet met de connector
De transactie open je vanuit de factuur, met de knop "Betalingstransactie" bovenaan; het menu met transacties verschijnt alleen in ontwikkelaarsmodus en bestaat niet in Odoo 20. De knop "Retry collection" van de transactie verschijnt alleen als de connector de herhaling zou accepteren: een berekend veld bepaalt dat met dezelfde regel die de server controleert bij het indrukken. Zegt de regel nee, dan verschijnt de knop niet en komt de reden niet op het scherm. Wat je ziet is de status van de transactie en haar GoCardless-groep:
| Situatie | Wat je ziet in de transactie |
|---|---|
| Success+ gaat het herhalen | Status "In behandeling", het vakje "Success+ Will Retry" aangevinkt en, bij "Bericht", "GoCardless could not collect this payment (…). Success+ will retry it automatically; there is nothing to do.". Geen knop. |
| Mislukt, zonder Success+, met minder dan 3 herhalingen en een actief mandaat | Status "Fout" en de knop "Retry collection". |
| Er zijn al 3 herhalingen geweest | Status "Fout" en "GoCardless Retries" op 3. Geen knop. |
| Het mandaat is gearchiveerd | Status "Fout"; bij het contact de notitie over het mandaat en de activiteit "GoCardless mandate lost". Geen knop. |
| In behandeling of bevestigd | Geen knop. |
| Teruggeboekt, bijvoorbeeld met MD06 | Status "Fout", ook als het mandaat nog actief is. Geen knop: bij GoCardless staat de betaling op charged_back, niet op failed. |
Bij het indrukken van de knop vraagt Odoo om bevestiging: "GoCardless will try to collect this payment again, which can cost a fee. Continue?". Als GoCardless accepteert, gaat de transactie naar in behandeling met "Retry requested. GoCardless will confirm the new charge date.". Zodra het resubmission_requested-event binnenkomt, telt de connector de herhaling op en schrijft de datum: "GoCardless will collect this payment again on … (retry requested, retry 1 of 3).". Bij het indrukken wordt niets opgeteld, zodat elke herhaling maar één keer telt.
Wat met de events binnenkomt, schrijft de connector zonder dat er iemand bij is: het Success+-bericht uit de tabel, de nieuwe incassodatum en, als het mandaat door een event verloren ging, de notitie en de activiteit bij het contact. 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 (…). Success+ will retry it automatically; there is nothing to do.", "GoCardless will collect this payment again on … (retry requested, retry 1 of 3)." en "GoCardless mandate lost". Wat uit het indrukken van de knop komt, staat in jouw taal.

Als GoCardless retry_failed antwoordt
Antwoordt de API toch retry_failed of mandate_is_inactive, dan raadpleegt de connector het mandaat voordat hij iets toont:
- Is het mandaat dood, dan archiveert hij het en meldt dat in de transactie: "The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.".
- Is het nog actief, dan toont hij de GoCardless-fout ongewijzigd: "GoCardless rejected the request." en daaronder het bericht van de API, met reason en
request_id.
Bij een teruggeboekte incasso kom je hier niet meer: sinds versie 1.1.4 biedt de connector de knop niet aan als de betaling bij GoCardless niet op failed staat, en een teruggeboekte staat op charged_back.
Wat te doen
- Verschijnt de knop niet, kijk dan naar de status van de transactie, "Success+ Will Retry" en "GoCardless Retries": een van de situaties in de tabel verklaart het.
- Zijn er 3 herhalingen geweest, neem dan contact op met de klant: de connector vraagt geen vierde meer aan.
- Is het mandaat gearchiveerd, vraag dan een nieuw aan en incasseer ermee.
- Bij een teruggeboekte incasso is er geen knop: spreek eerst met de klant en incasseer de factuur indien nodig opnieuw met een nieuwe incasso.
Kost elke herhaling geld?
Mogelijk. De knop waarschuwt vóór er iets wordt verstuurd, en de connector biedt hem niet aan zolang Success+ de incasso gaat herhalen, omdat een handmatige herhaling alleen een vergoeding zou toevoegen. De precieze tarieven hangen af van je contract met GoCardless.
Kan ik een door de klant teruggeboekte incasso herhalen?
Met deze knop niet: de connector biedt hem niet aan bij een teruggeboekte incasso, omdat GoCardless alleen mislukte betalingen herhaalt en een teruggeboekte dat niet is. Een terugboeking, zoals MD06, los je op door met de klant te praten en, indien nodig, met een nieuwe incasso.
Met onze connector
In Odoo 17, 18, 19 en 20 telt de connector de herhalingen met de GoCardless-events en toont hij de knop alleen als zijn regel dat toestaat: niet terwijl Success+ bezig is, niet bij 3 herhalingen en niet bij een gearchiveerd mandaat. Komt er toch retry_failed, dan kijkt hij naar het mandaat voordat hij je de fout laat zien.
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/payment
- docs.gocardless.com/docs/api-reference/responses-and-errors
- 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)
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- 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 449 in 17.0 (d203ee6), regel 449 in 18.0 (e2ab18b), regel 448 in 19.0 (ce7f5a3) en regel 463 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: 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: 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 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: 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 713 in 17.0 (d203ee6), regel 713 in 18.0 (e2ab18b), regel 712 in 19.0 (ce7f5a3) en regel 736 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: models/payment_transaction.py, regel 437 in 17.0 (d203ee6), regel 437 in 18.0 (e2ab18b), regel 436 in 19.0 (ce7f5a3) en regel 451 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 442 in 17.0 (d203ee6), regel 442 in 18.0 (e2ab18b), regel 441 in 19.0 (ce7f5a3) en regel 456 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 435 in 17.0 (d203ee6), regel 435 in 18.0 (e2ab18b), regel 434 in 19.0 (ce7f5a3) en regel 449 in 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: 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: 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: 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_provider.py, regel 462 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 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: models/payment_transaction.py, regel 683 in 17.0 (d203ee6), regel 683 in 18.0 (e2ab18b), regel 682 in 19.0 (ce7f5a3) en regel 706 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 567 in 17.0 (d203ee6), regel 567 in 18.0 (e2ab18b), regel 567 in 19.0 (ce7f5a3) en regel 569 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 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 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 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: i18n/flexigo_payment_gocardless.pot, regel 560 in 17.0 (d203ee6), regel 560 in 18.0 (e2ab18b), regel 560 in 19.0 (ce7f5a3) en regel 562 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1481 in 17.0 (d203ee6), regel 1481 in 18.0 (e2ab18b), regel 1481 in 19.0 (ce7f5a3) en regel 1488 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: 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)
- 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/events/payment
- 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
