Was GoCardless sagt
| Reason | Typ | Text von 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. |
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.

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.

Was zu tun ist
- Ö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.
- Bei
total_amount_confirmation_invalidprü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. - Bei
number_of_refunds_exceededakzeptiert diese Zahlung bei GoCardless keine weiteren Rückerstattungen. Wenn Sie noch etwas zurückzahlen müssen, dann auf anderem Weg. - Um das Limit nicht zu erreichen, fassen Sie alles, was von derselben Lastschrift zurückzuzahlen ist, in einer einzigen Rückerstattung zusammen.
- Wenn Sie sich an GoCardless wenden, bewahren Sie die
request_idaus 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
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
