Wat GoCardless zegt
| Reason | Tipo | Texto de GoCardless |
|---|---|---|
total_amount_confirmation_invalid | invalid_state | Total amount refunded does not match the confirmation value. |
number_of_refunds_exceeded | invalid_state | Maximum of 5 refunds per payment already reached. |
De referentie van de terugbetalingen legt de eerste uit: "total_amount_confirmation_invalid if the confirmation amount doesn't match the total amount refunded for the payment.". En waarvoor het dient: "This safeguard is there to prevent two processes from creating refunds without awareness of each other.".
Dat veld, zegt GoCardless, is de som van de terugbetalingen die de betaling al heeft plus de nieuwe die wordt aangemaakt, in centen. In hun voorbeeld heeft een terugbetaling van 100 een total_amount_confirmation van 150: van die betaling was al 50 teruggestort.

Hoe de connector dat getal berekent
Voor elke terugbetaling telt de connector de terugbetalingen van die incasso op die in Odoo in behandeling, goedgekeurd of gedaan zijn, en voegt de nieuwe toe. Die in fout tellen niet mee. Die som gaat mee als total_amount_confirmation.
Dat ook de lopende meetelt, is belangrijk: een terugbetaling die onderweg is, is al bij GoCardless aangevraagd. Als die niet werd meegeteld, zou het getal te laag zijn en zou GoCardless de volgende afwijzen.
Wanneer het niet klopt
Het getal komt uit wat Odoo weet. Als iemand geld van die incasso heeft teruggestort via een weg die niet over Odoo loopt, bijvoorbeeld met een ander programma dat op dezelfde GoCardless-rekening is aangesloten, dan staat dat bij GoCardless genoteerd en bij Odoo niet. Het totaal dat de connector stuurt, is dan te laag, en GoCardless weigert de terugbetaling. Dit is precies het geval waarvoor dit vangnet bestaat: als het de terugbetaling zou accepteren, zou de klant hetzelfde geld twee keer ontvangen.
number_of_refunds_exceeded is iets anders: de connector staat gedeeltelijke terugbetalingen toe, en GoCardless accepteert er maximaal 5 per betaling. De zesde wordt geweigerd, ook al staat er nog bedrag open om terug te betalen.
Wat Odoo met de connector doet
In Odoo wordt een incasso terugbetaald vanaf de betaling, met de knop voor terugbetaling, en alleen als de transactie bevestigd is. De connector stuurt de terugbetaling met zijn idempotentiesleutel en, als GoCardless ze weigert, gaat de transactie van de terugbetaling naar "Fout" met "GoCardless rejected the request." en daaronder het bericht van GoCardless met de reason en de request_id tussen haakjes.
Vanaf versie 1.1.5 toont een terugbetaling in fout de knop "Retry collection" niet: een terugbetaling is geen incasso.

Wat te doen
- Open de transactie van de incasso vanuit de factuur, met de knop "Betalingstransactie" bovenaan; het menu met transacties verschijnt alleen in de ontwikkelaarsmodus, en in Odoo 20 bestaat het niet. Vanuit daar leidt de knop voor terugbetalingen naar de transactie van de terugbetaling en het bericht ervan.
- Bij
total_amount_confirmation_invalidkijk je in het Dashboard van GoCardless naar de terugbetalingen van die betaling. Als er één buiten Odoo is gedaan, is het geld al naar de klant teruggegaan: betaal het niet opnieuw terug vanuit Odoo. - Bij
number_of_refunds_exceededaccepteert die betaling bij GoCardless geen terugbetalingen meer. Als je toch nog iets moet terugbetalen, zal dat via een andere weg moeten. - Om de limiet niet te bereiken, voeg je wat van één incasso terug te betalen samen in één terugbetaling.
- Als je GoCardless nodig hebt, bewaar dan de
request_idvan het bericht: hun documentatie vraagt om die mee te sturen bij contact met hun support.
Waarom ziet Odoo de terugbetalingen niet die langs een andere weg zijn gedaan?
GoCardless meldt elke aangemaakte terugbetaling via een webhook, maar de connector past die meldingen alleen toe op de terugbetalingen die in Odoo staan: een terugbetaling die langs een andere weg is aangemaakt, heeft geen transactie en telt niet mee in het getal.
Kan ik maar een deel van een incasso terugbetalen?
Ja. De connector staat gedeeltelijke terugbetalingen toe, tot de limiet van 5 per betaling die GoCardless hanteert; elke terugbetaling neemt in zijn controlegetal de vorige mee.
Met onze connector
In Odoo 17, 18, 19 en 20 stuurt de connector bij elke terugbetaling het totaal van wat van die incasso is terugbetaald, inclusief de lopende, zodat GoCardless een dubbele terugbetaling tegenhoudt in plaats van die uit te voeren, en de afwijzing zet hij in de transactie met de request_id.
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/responses-and-errors
- docs.gocardless.com/docs/api-reference/refund
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 550 in 17.0 (d203ee6), regel 550 in 18.0 (e2ab18b), regel 549 in 19.0 (ce7f5a3) en regel 568 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 389 in 17.0 (d203ee6), regel 389 in 18.0 (e2ab18b), regel 388 in 19.0 (ce7f5a3) en regel 403 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 383 in 17.0 (d203ee6), regel 383 in 18.0 (e2ab18b), regel 382 in 19.0 (ce7f5a3) en regel 397 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 256 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 397 in 17.0 (d203ee6), regel 397 in 18.0 (e2ab18b), regel 396 in 19.0 (ce7f5a3) en regel 411 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_provider.py, regel 352 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_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: 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: models/payment_transaction.py, regel 424 in 17.0 (d203ee6), regel 424 in 18.0 (e2ab18b), regel 423 in 19.0 (ce7f5a3) en regel 438 in 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: models/payment_transaction.py, regel 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/models/payment_transaction.py
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_payment_views.xml
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/nl.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- 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)
- github.com/odoo/odoo/blob/17.0/odoo/http.py
