Zum Hauptinhalt springen
GoCardless API · invalid_state · Rückerstattungen

GoCardless total_amount_confirmation_invalid: der erstattete Gesamtbetrag stimmt nicht

Jede Rückerstattung, die an GoCardless gesendet wird, trägt eine Kontrollzahl: alles, was von dieser Zahlung bereits erstattet wurde, einschließlich der neuen Rückerstattung. Stimmt sie nicht mit dem überein, was GoCardless gespeichert hat, lehnt GoCardless die Rückerstattung mit total_amount_confirmation_invalid ab. Das ist ein Schutz gegen zwei Systeme, die dieselbe Lastschrift erstatten, ohne voneinander zu wissen.

FlexigoTech · Verantwortlich: Víctor Gómez · Aktualisiert am 6. November 2026

Das Wichtigste

Versionen
Odoo 17, 18, 19 und 20
Geprüft
im Quellcode des Connectors, Version 17.0, 18.0, 19.0 und 20.0 · in den Quellen am Ende
Lesezeit
3 Min.

Was GoCardless sagt

ReasonTypText von 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.

Die Referenz der Rückerstattungen erklärt den ersten: «total_amount_confirmation_invalid if the confirmation amount doesn't match the total amount refunded for the payment.». Und wozu er dient: «This safeguard is there to prevent two processes from creating refunds without awareness of each other.».

Dieses Feld ist laut GoCardless die Summe der Rückerstattungen, die die Zahlung bereits hat, plus die neue, in Cent. In seinem Beispiel ergibt eine Rückerstattung von 100 einen total_amount_confirmation von 150: Von dieser Zahlung waren bereits 50 zurückerstattet.

GoCardless-Karte des Fehlers total_amount_confirmation_invalid
Der reason, sein Typ invalid_state, das Feld total_amount_confirmation und das Limit von 5 Rückerstattungen pro Zahlung.

Wie der Konnektor diese Zahl berechnet

Für jede Rückerstattung addiert der Konnektor die Rückerstattungen dieser Lastschrift, die in Odoo ausstehend, autorisiert oder abgeschlossen sind, und rechnet die neue hinzu. Die fehlerhaften zählen nicht. Diese Summe wird als total_amount_confirmation gesendet.

Dass auch die ausstehenden mitzählen, ist wichtig: Eine unterwegs befindliche Rückerstattung ist bereits bei GoCardless beauftragt, und würde sie nicht gezählt, fiele die Zahl zu niedrig aus und GoCardless würde die nächste ablehnen.

Wann es nicht stimmt

Die Zahl stammt aus dem, was Odoo weiß. Wenn jemand Geld von dieser Lastschrift auf einem Weg zurückgezahlt hat, der nicht über Odoo läuft, zum Beispiel über ein anderes Programm, das mit demselben GoCardless-Konto verbunden ist, hat GoCardless das vermerkt und Odoo nicht. Der Gesamtbetrag, den der Konnektor sendet, fällt dann zu niedrig aus, und GoCardless lehnt die Rückerstattung ab. Genau dafür gibt es diesen Schutz: Würde er sie annehmen, bekäme der Kunde dasselbe Geld zweimal zurück.

number_of_refunds_exceeded ist etwas anderes: Der Konnektor erlaubt Teilrückerstattungen, und GoCardless akzeptiert höchstens 5 pro Zahlung. Die sechste wird abgelehnt, auch wenn noch Betrag offen ist.

Was Odoo mit dem Konnektor macht

In Odoo wird eine Lastschrift über ihre Zahlung zurückerstattet, mit der Schaltfläche für Rückerstattung, und nur wenn ihre Transaktion bestätigt ist. Der Konnektor sendet die Rückerstattung mit ihrem Idempotenzschlüssel, und lehnt GoCardless sie ab, wechselt die Rückerstattungstransaktion auf «Fehler» mit «GoCardless rejected the request.» und darunter der Meldung von GoCardless mit dem reason und der request_id in eckigen Klammern.

Ab Version 1.1.5 zeigt eine fehlerhafte Rückerstattung nicht die Schaltfläche «Retry collection»: Eine Rückerstattung ist keine Lastschrift.

Schema: was GoCardless antwortet, wenn der Gesamtbetrag nicht stimmt, und was Odoo mit dem Konnektor tut
Schema auf Grundlage des Codes des Konnektors (17.0, 18.0, 19.0 und 20.0) und der Dokumentation von GoCardless.

Was zu tun ist

  1. Öffnen Sie die Transaktion der Lastschrift über die Rechnung, mit der Schaltfläche «Zahlungstransaktion» oben; das Transaktionsmenü erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht. Von dort führt die Schaltfläche für Rückerstattungen zur Rückerstattungstransaktion und ihrer Meldung.
  2. Bei total_amount_confirmation_invalid prüfen Sie im GoCardless-Dashboard die Rückerstattungen dieser Zahlung. Wenn eine außerhalb von Odoo ausgeführt wurde, ist das Geld bereits beim Kunden: Erstatten Sie es nicht erneut über Odoo.
  3. Bei number_of_refunds_exceeded akzeptiert diese Zahlung bei GoCardless keine weiteren Rückerstattungen. Wenn Sie noch etwas zurückzahlen müssen, dann auf anderem Weg.
  4. Um das Limit nicht zu erreichen, fassen Sie alles, was von derselben Lastschrift zurückzuzahlen ist, in einer einzigen Rückerstattung zusammen.
  5. Wenn Sie sich an GoCardless wenden, bewahren Sie die request_id aus der Meldung auf: Die Dokumentation verlangt, sie beim Kontakt mit dem Support anzugeben.

Warum sieht Odoo Rückerstattungen nicht, die auf einem anderen Weg gemacht wurden?

GoCardless meldet jede erstellte Rückerstattung per Webhook, der Konnektor wendet diese Meldungen aber nur auf Rückerstattungen an, die er in Odoo hat: Eine auf anderem Weg erstellte hat keine Transaktion und fließt nicht in die Zahl ein.

Kann ich nur einen Teil einer Lastschrift zurückerstatten?

Ja. Der Konnektor erlaubt Teilrückerstattungen, bis zum Limit von 5 pro Zahlung, das GoCardless vorgibt; jede trägt in ihrer Kontrollzahl die vorherigen mit.

Mit unserem Konnektor

In Odoo 17, 18, 19 und 20 sendet der Konnektor bei jeder Rückerstattung den Gesamtbetrag dessen, was von dieser Lastschrift erstattet wurde, einschließlich der unterwegs befindlichen, damit GoCardless eine doppelte Rückerstattung stoppt, statt sie auszuzahlen, und er hinterlegt die Ablehnung mit ihrer request_id in der Transaktion.

Weiterlesen

GoCardless refund_payment_invalid_state: diese Lastschrift kann noch nicht erstattet werdenGoCardless antwortet mit refund_payment_invalid_state, wenn die Zahlung nicht bestätigt oder ausgezahlt ist. Fristregeln von GoCardless und des Odoo-Konnektors.GoCardless 409 idempotent_creation_conflict: Die Abbuchung existierte bereitsGoCardless gibt 409 zurück, wenn ein Idempotenzschlüssel schon etwas angelegt hat. Warum das kein Fehler ist und wie der Konnektor Doppelabbuchungen verhindert.GoCardless MD06: Der Kunde lässt seine Bank eine Lastschrift zurückbuchenDer Kunde lässt eine GoCardless-Lastschrift über seine Bank zurückbuchen: charged_back, refund_requested und MD06. Was in Odoo mit Rechnung und Mandat passiert.
Geprüft im Quellcode des Connectors (Version 17.0, 18.0, 19.0 und 20.0) und in den verlinkten Quellen

Quellen

  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • docs.gocardless.com/docs/api-reference/refund
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 550 in 17.0 (d203ee6), Zeile 550 in 18.0 (e2ab18b), Zeile 549 in 19.0 (ce7f5a3) und Zeile 568 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 389 in 17.0 (d203ee6), Zeile 389 in 18.0 (e2ab18b), Zeile 388 in 19.0 (ce7f5a3) und Zeile 403 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 383 in 17.0 (d203ee6), Zeile 383 in 18.0 (e2ab18b), Zeile 382 in 19.0 (ce7f5a3) und Zeile 397 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 256 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 397 in 17.0 (d203ee6), Zeile 397 in 18.0 (e2ab18b), Zeile 396 in 19.0 (ce7f5a3) und Zeile 411 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 352 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 397 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_provider.py, Zeile 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 521 in 17.0 (d203ee6), Zeile 521 in 18.0 (e2ab18b), Zeile 521 in 19.0 (ce7f5a3) und Zeile 523 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 424 in 17.0 (d203ee6), Zeile 424 in 18.0 (e2ab18b), Zeile 423 in 19.0 (ce7f5a3) und Zeile 438 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 418 in 17.0 (d203ee6), Zeile 418 in 18.0 (e2ab18b), Zeile 417 in 19.0 (ce7f5a3) und Zeile 432 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 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/de.po
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py