Was GoCardless sagt
| Ereignis | Ursache | Codes | Text von GoCardless |
|---|---|---|---|
| payments · failed | direct_debit_not_enabled | AG01, AC06 | The bank account for this payment does not support SEPA Direct Debit. The mandate will also be cancelled. |
| payments · failed | account_blocked_for_any_financial_transaction | AC06 | This payment failed because the payer's account was blocked. |
| mandates · cancelled | direct_debit_not_enabled | AG01, AC06 | The bank account for this mandate does not support SEPA direct debit. Any subscriptions and pending payments will also be cancelled. |
| mandates · cancelled | account_blocked_for_any_financial_transaction | AC06 | The bank account for this mandate was blocked. Any subscriptions and pending payments will also be cancelled. |
Beide Ursachen erscheinen auch bei payments · cancelled: Dort stehen die Einzüge, die noch darauf warteten, mit diesem Mandat eingereicht zu werden, und die GoCardless zusammen mit dem Mandat storniert.

Woher es kommt
Hier scheitert nicht die Unterschrift, sondern das Konto. Das Mandat existiert, aber wenn GoCardless die Lastschrift einreicht, antwortet die Bank des Kunden, dass auf diesem Konto keine SEPA-Lastschriften akzeptiert werden oder dass es gesperrt ist. Deshalb haben diese Ereignisse den Ursprung bank: Sie werden von der Bank des Zahlers entschieden.
direct_debit_not_enabled zieht das Mandat mit. GoCardless storniert es, und mit ihm fallen die Abonnements und die ausstehenden Einzüge weg. Bei account_blocked_for_any_financial_transaction ist das Konto gesperrt; wenn GoCardless aus diesem Grund auch das Mandat storniert, meldet es das in einem eigenen Ereignis mit derselben Ursache.
Was Odoo mit jedem Ereignis tut
| Eingehendes Ereignis | Was der Konnektor tut |
|---|---|
| payments · failed | Die Transaktion wechselt in «Fehler» mit «GoCardless could not collect this payment (direct_debit_not_enabled).» oder mit der Ursache des gesperrten Kontos. Hatte dieser Einzug die Rechnung bereits bezahlt, wird die Zahlung annulliert und die Rechnung ist wieder offen. |
| payments · cancelled | Dasselbe wie bei einer fehlgeschlagenen Zahlung. |
| mandates · cancelled | Archiviert die Zahlungsmethode, vermerkt im Kundenstamm, dass dieses Mandat nicht mehr gültig ist, und erstellt die Aktivität «GoCardless mandate lost». |
Achten Sie auf die Reihenfolge: Das Zahlungsereignis zieht das Mandat nicht zurück, denn diese Ursachen gehören nicht zu den vier, bei denen der Konnektor das Mandat beim Eingang einer Zahlung archiviert. Das übernimmt das Mandatsereignis. Und falls es nicht über den Webhook ankommt, holt es die stündliche Aufgabe nach, die verpasste Ereignisse sucht.
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: «GoCardless could not collect this payment (direct_debit_not_enabled).» und «GoCardless mandate lost».
Auch von Success+ ist nichts zu erwarten: Laut dessen Leitfaden werden nur Zahlungen erneut versucht, die wegen fehlender Deckung scheitern. Der Konnektor prüft bei jedem Fehlschlag trotzdem das Feld will_attempt_retry des Ereignisses und lässt die Transaktion im Fehlerzustand, wenn es nicht true ist.
Und die Schaltfläche zum erneuten Versuch
Um die Meldung zu sehen, öffnen Sie die Rechnung und klicken oben auf «Zahlungstransaktion». Das Menü der Transaktionen erscheint nur im Entwicklermodus und ist in Odoo 20 nicht mehr vorhanden.
Bei einer fehlgeschlagenen Zahlung bietet diese Transaktion «Retry collection» an, solange Odoo das Mandat nicht archiviert hat; bei einer stornierten nicht. Das nützt wenig: GoCardless wiederholt nur Zahlungen, deren Mandat noch aktiv ist, und bei direct_debit_not_enabled hat es das Mandat soeben storniert. Lautet die Antwort retry_failed oder mandate_is_inactive, fragt der Konnektor das Mandat ab, archiviert es, falls es tot ist, und hält das in der Transaktion fest: «The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.». Ab da verschwindet die Schaltfläche.

Was zu tun ist
- Sprechen Sie mit dem Kunden. Wenn das Konto keine Lastschriften zulässt, braucht es ein anderes Konto, das sie zulässt; ist es gesperrt (AC06), muss der Kunde das zuerst mit seiner Bank klären.
- Mit dem funktionierenden Konto unterschreibt der Kunde ein neues Mandat, das in Odoo als weitere Zahlungsmethode erscheint.
- Ziehen Sie die offenen Rechnungen mit dieser Methode erneut ein. Die von GoCardless stornierten Einzüge werden nicht von selbst wieder eingereicht.
- Wenn Sie den genauen Code brauchen, suchen Sie ihn bei GoCardless, denn Odoo speichert nur die Ursache: Der Konnektor behält den SEPA-Code nicht. Das Hilfecenter von GoCardless erklärt es so: «You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.».
Warum erscheint AC06 bei beiden Ursachen?
GoCardless verwendet denselben Code AC06 für das Konto, das keine Lastschriften zulässt, und für das gesperrte Konto. In der Praxis ist das egal: Dieses Konto taugt derzeit nicht zum Einziehen, und es braucht ein anderes oder die Entsperrung durch die Bank.
Kann ich das Mandat reaktivieren?
Wenn das Konto keine Lastschriften zulässt, ergibt das keinen Sinn: Es würde sie weiterhin nicht zulassen. Nötig ist ein neues Mandat mit einem anderen Konto.
Mit unserem Konnektor
Mit Odoo 17, 18, 19 und 20 bleibt dieser Fehler nicht verborgen: Die Transaktion zeigt die Ursache von GoCardless, die Rechnung wird wieder geöffnet, wenn sie bezahlt war, und sobald die Stornierung des Mandats eintrifft, ist der Kunde markiert, damit Sie ihn vor der nächsten Rechnung um ein anderes Konto bitten.
Weiterlesen
Geprüft im Quellcode des Connectors (Version 17.0, 18.0, 19.0 und 20.0) und in den verlinkten Quellen
Quellen
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 15 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/payment
- docs.gocardless.com/docs/api-reference/events/mandate
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 33 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_token.py, Zeile 83 in 17.0 (d203ee6), Zeile 83 in 18.0 (e2ab18b), Zeile 83 in 19.0 (ce7f5a3) und Zeile 82 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_token.py, Zeile 131 in 17.0 (d203ee6), Zeile 131 in 18.0 (e2ab18b), Zeile 131 in 19.0 (ce7f5a3) und Zeile 130 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 725 in 17.0 (d203ee6), Zeile 725 in 18.0 (e2ab18b), Zeile 724 in 19.0 (ce7f5a3) und Zeile 748 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 754 in 17.0 (d203ee6), Zeile 754 in 18.0 (e2ab18b), Zeile 753 in 19.0 (ce7f5a3) und Zeile 777 in 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)
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 74 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 435 in 17.0 (d203ee6), Zeile 435 in 18.0 (e2ab18b), Zeile 434 in 19.0 (ce7f5a3) und Zeile 449 in 20.0 (688d86b)
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 436 in 17.0 (d203ee6), Zeile 436 in 18.0 (e2ab18b), Zeile 436 in 19.0 (ce7f5a3) und Zeile 438 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1148 in 17.0 (d203ee6), Zeile 1148 in 18.0 (e2ab18b), Zeile 1148 in 19.0 (ce7f5a3) und Zeile 1155 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 495 in 17.0 (d203ee6), Zeile 495 in 18.0 (e2ab18b), Zeile 495 in 19.0 (ce7f5a3) und Zeile 497 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: views/payment_transaction_views.xml, Zeile 13 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 63 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 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: i18n/flexigo_payment_gocardless.pot, Zeile 1016 in 17.0 (d203ee6), Zeile 1016 in 18.0 (e2ab18b), Zeile 1016 in 19.0 (ce7f5a3) und Zeile 1031 in 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/payment
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 469 in 17.0 (d203ee6), Zeile 469 in 18.0 (e2ab18b), Zeile 468 in 19.0 (ce7f5a3) und Zeile 487 in 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1233 in 17.0 (d203ee6), Zeile 1233 in 18.0 (e2ab18b), Zeile 1233 in 19.0 (ce7f5a3) und Zeile 1240 in 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
- support.gocardless.com/hc/en-gb/articles/360001467265
- Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 66 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/responses-and-errors
