Was GoCardless sagt
| Reason | Typ | Text von GoCardless |
|---|---|---|
refund_payment_invalid_state | invalid_state | Payment must be confirmed or paid_out before it can be refunded. |
In der Referenz zu den Rückerstattungen nennt GoCardless eine Frist: «A refund can only be created once it is outside the safer refund period (7 calendar days after the charge date) otherwise an error is returned.». Dieser Zeitraum lässt sich deaktivieren: «The safer refund period can be disabled by contacting GoCardless.». Und er erklärt, warum es ihn gibt: «A payment that has been (partially) refunded can still receive a late failure or chargeback from the customer's bank.».
Rückerstattungen über die API sind außerdem standardmäßig deaktiviert: «This endpoint is disabled by default. To enable it, you will need to enable refunds on your GoCardless Dashboard.».

Die Fristregeln auf einen Blick
| Tage seit der Lastschrift | GoCardless, Standard | Der Konnektor |
|---|---|---|
| Weniger als 2 | innerhalb des sicheren Zeitraums: gibt einen Fehler zurück | sendet die Rückerstattung nicht |
| 2 oder mehr, aber weniger als 7 | innerhalb des sicheren Zeitraums: gibt einen Fehler zurück | sendet sie und hinterlässt einen Hinweis im Serverprotokoll |
| 7 oder mehr | außerhalb des sicheren Zeitraums | sendet sie |
Beide zählen nicht ab demselben Zeitpunkt. GoCardless zählt ab dem Belastungsdatum der Zahlung. Der Konnektor zählt ab der letzten Statusänderung der Zahlungstransaktion der Lastschrift in Odoo. Wenn GoCardless Ihnen den sicheren Zeitraum erlassen hat, kann die Rückerstattung zwischen 2 und 7 Tagen durchgehen.
Wann refund_payment_invalid_state beim Konnektor erscheint
Odoo erlaubt nur die Erstattung einer bestätigten Transaktion, und der Konnektor bestätigt sie, wenn GoCardless confirmed oder paid_out meldet. Dieser reason bedeutet beim Konnektor also: Die Zahlung hat sich bei GoCardless geändert, und Odoo weiß es noch nicht. Das kann ein später Fehlschlag sein, den GoCardless bei bereits bestätigter Zahlung meldet, oder eine Rückbuchung durch den Kunden, deren Ereignis noch nicht angekommen ist.
Was der Konnektor macht
- Bei weniger als 2 Tagen sendet er nichts: Odoo bricht mit «GoCardless cannot refund a collection until it has settled. This one was charged … day(s) ago; refunds are possible after 2 days.» ab.
- Andernfalls sendet er die Rückerstattung mit seinem Idempotenzschlüssel an GoCardless. Lehnt GoCardless sie ab, aus diesem reason, wegen des sicheren Zeitraums oder aus einem anderen Grund, geht die Rückerstattungstransaktion auf «Fehler» mit «GoCardless rejected the request.» und darunter der Meldung von GoCardless mit dem reason und der
request_id. - Nimmt GoCardless sie an, bleibt die Transaktion auf «Ausstehend» mit «Refund submitted. GoCardless will deduct it from a future payout.» und wechselt zu «Bestätigt», sobald GoCardless sie auszahlt oder aus einer Auszahlung verrechnet.
Seit Version 1.1.5 zeigt eine fehlerhafte Rückerstattung nicht die Schaltfläche «Retry collection»: Eine Rückerstattung ist keine Lastschrift, und es gibt nichts, was GoCardless erneut versuchen könnte. Wenn GoCardless das Geld nicht zum Kunden zurückbringen kann, setzt der Konnektor die Rückerstattung auf Fehler mit «GoCardless could not pay this refund back (…).». Der Konnektor ist nicht ins Deutsche übersetzt: Diese Texte erscheinen immer auf Englisch, auch in einem deutschen Odoo, egal ob ein Benutzer oder eine geplante Aktion sie auslöst.

Was zu tun ist
- Öffnen Sie die Transaktion der Lastschrift über die Rechnung mit der Schaltfläche «Zahlungstransaktion» oben; das Menü der Transaktionen erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht. Von dort führt die Schaltfläche für Rückerstattungen zur Transaktion der Rückerstattung und zu ihrer Meldung.
- Lautet der reason
refund_payment_invalid_state, prüfen Sie die Zahlung im GoCardless-Dashboard. Ist sie spät fehlgeschlagen oder hat der Kunde sie zurückgebucht, gibt es nichts mehr zu erstatten: Das Geld ist nicht mehr bei Ihnen. Odoo bildet das ab, sobald das Ereignis ankommt; die stündliche Aufgabe, die verlorene Ereignisse nachholt, bringt es. - Stammt die Ablehnung vom sicheren Zeitraum, warten Sie 7 Tage ab dem Belastungsdatum oder bitten Sie GoCardless, ihn zu erlassen.
- Für eine erneute Rückerstattung gehen Sie über die Zahlung der Lastschrift und deren Schaltfläche für Rückerstattungen. Der Konnektor unterstützt Teilrückerstattungen.
Warum erlaubt der Konnektor die Erstattung ab 2 Tagen, wenn GoCardless von 7 spricht?
Die 2 Tage sind das Mindestmaß des Konnektors: Darunter sendet er nichts. GoCardless erlaubt, den sicheren Zeitraum zu entfernen, und solange er aktiv ist, lehnt GoCardless die Rückerstattung vor 7 Tagen ab. Zwischen 2 und 7 Tagen warnt der Konnektor im Protokoll, weil ein SEPA-Fehlschlag noch eintreffen kann.
Kann eine erstattete Lastschrift danach noch fehlschlagen?
Ja. GoCardless warnt davor: Eine ganz oder teilweise erstattete Zahlung kann trotzdem einen späten Fehlschlag oder eine Rückbuchung durch die Bank des Kunden erhalten. Dann hätten Sie Geld zurückgegeben, das Sie gar nicht behalten haben.
Mit unserem Konnektor
In Odoo 17, 18, 19 und 20 sendet der Konnektor keine Rückerstattungen für Lastschriften, die weniger als 2 Tage alt sind, setzt die von GoCardless abgelehnten mit ihrer request_id auf Fehler und bietet kein erneutes Versuchen für eine Rückerstattung an, weil diese keine Lastschrift ist.
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
- support.gocardless.com/hc/en-gb/articles/360001467265
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 41 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
- 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: const.py, Zeile 106 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 361 in 17.0 (d203ee6), Zeile 361 in 18.0 (e2ab18b), Zeile 360 in 19.0 (ce7f5a3) und Zeile 375 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 365 in 17.0 (d203ee6), Zeile 365 in 18.0 (e2ab18b), Zeile 364 in 19.0 (ce7f5a3) und Zeile 379 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 414 in 17.0 (d203ee6), Zeile 414 in 18.0 (e2ab18b), Zeile 414 in 19.0 (ce7f5a3) und Zeile 416 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 371 in 17.0 (d203ee6), Zeile 371 in 18.0 (e2ab18b), Zeile 370 in 19.0 (ce7f5a3) und Zeile 385 in 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 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 413 in 17.0 (d203ee6), Zeile 413 in 18.0 (e2ab18b), Zeile 412 in 19.0 (ce7f5a3) und Zeile 427 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 605 in 17.0 (d203ee6), Zeile 605 in 18.0 (e2ab18b), Zeile 604 in 19.0 (ce7f5a3) und Zeile 625 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: i18n/flexigo_payment_gocardless.pot, Zeile 987 in 17.0 (d203ee6), Zeile 987 in 18.0 (e2ab18b), Zeile 987 in 19.0 (ce7f5a3) und Zeile 1002 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 611 in 17.0 (d203ee6), Zeile 611 in 18.0 (e2ab18b), Zeile 610 in 19.0 (ce7f5a3) und Zeile 631 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 442 in 17.0 (d203ee6), Zeile 442 in 18.0 (e2ab18b), Zeile 442 in 19.0 (ce7f5a3) und Zeile 444 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)
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- 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
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
