Naar hoofdinhoud
GoCardless API · invalid_state · terugbetalingen

GoCardless total_amount_confirmation_invalid: het teruggegeven totaal klopt niet

Elke terugbetaling die aan GoCardless wordt gevraagd, krijgt een controlegetal: alles wat van die betaling al is terugbetaald, inclusief de nieuwe. Komt dat niet overeen met wat GoCardless heeft genoteerd, dan weigert GoCardless de terugbetaling met total_amount_confirmation_invalid. Het is een vangnet tegen twee systemen die dezelfde incasso terugbetalen zonder van elkaar te weten.

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

ReasonTipoTexto de GoCardless
total_amount_confirmation_invalidinvalid_stateTotal amount refunded does not match the confirmation value.
number_of_refunds_exceededinvalid_stateMaximum 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.

Kaart van de fout total_amount_confirmation_invalid van GoCardless
De reason, het type invalid_state, het veld total_amount_confirmation en de limiet van 5 terugbetalingen per betaling.

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.

Schema: wat GoCardless antwoordt als het totaal niet klopt en wat Odoo met de connector doet
Schema gemaakt op basis van de code van de connector (17.0, 18.0, 19.0 en 20.0) en de documentatie van GoCardless.

Wat te doen

  1. 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.
  2. Bij total_amount_confirmation_invalid kijk 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.
  3. Bij number_of_refunds_exceeded accepteert die betaling bij GoCardless geen terugbetalingen meer. Als je toch nog iets moet terugbetalen, zal dat via een andere weg moeten.
  4. Om de limiet niet te bereiken, voeg je wat van één incasso terug te betalen samen in één terugbetaling.
  5. Als je GoCardless nodig hebt, bewaar dan de request_id van 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

GoCardless refund_payment_invalid_state: deze incasso kan nog niet worden terugbetaaldGoCardless antwoordt met refund_payment_invalid_state als de betaling niet confirmed of paid_out is. De termijnregels van GoCardless en de connector.GoCardless 409 idempotent_creation_conflict: de incasso bestond alGoCardless geeft 409 idempotent_creation_conflict als een idempotentiesleutel al iets heeft aangemaakt. Geen fout: zo voorkomt de connector dubbele incasso.GoCardless MD06: de klant vraagt zijn bank om een incasso terug te boekenDe klant vraagt zijn bank om een GoCardless-incasso terug te boeken: charged_back, refund_requested en MD06. Wat er in Odoo gebeurt met factuur en mandaat.
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