Was GoCardless meldet
| Ereignis | SEPA-Core-Code | Text von GoCardless |
|---|---|---|
| payments · failed | AC04 | The bank account for this payment has been closed. The mandate will also be cancelled. |
| payments · failed | MD07 | This payment failed because the customer is deceased. |
| mandates · cancelled | AC04 | The bank account for this mandate has been closed. Any subscriptions and pending payment will also be cancelled. |
| mandates · cancelled | MD07 | This mandate has been cancelled because the customer is deceased. |
Der Grund ist in allen vier Zeilen derselbe, bank_account_closed; der Code unterscheidet den Anlass. Achten Sie auf die dritte Zeile: GoCardless storniert neben dem Mandat auch die ausstehenden Zahlungen dieses Mandats, die Ihnen als stornierte Zahlungen mit demselben Grund ankommen.

Zwei Ereignisse für denselben Vorgang
Eine Kontoschließung kommt in Odoo zweimal an: mit der fehlgeschlagenen Zahlung und mit dem Mandat, das storniert wird. Der Konnektor verarbeitet beide: Das zuerst eintreffende archiviert das Mandat und meldet es, das zweite findet es bereits archiviert vor und wiederholt die Meldung nicht. Falls eines über den Webhook nicht ankommt, holt die stündliche Aufgabe, die bei GoCardless verlorene Ereignisse anfordert, es nach, bis zu 100 pro Durchlauf.
Was der Konnektor macht
- Setzt die Transaktion auf Fehler mit «GoCardless could not collect this payment (bank_account_closed).» und speichert den Grund.
- War die Rechnung mit dieser Abbuchung bereits bezahlt, storniert er die Zahlung in Odoo, und die Rechnung ist wieder offen.
- Archiviert die Zahlungsmethode des Kunden:
bank_account_closedgehört zu den vier Gründen, mit denen der Konnektor das Mandat für tot erklärt, zusammen mitmandate_cancelled,mandate_expiredundauthorisation_disputed. - Schreibt es in die Kundenkarte: «The GoCardless direct debit mandate of … is no longer usable (bank_account_closed). No further collection can be taken against it. Ask the customer to set up a new mandate.»
- Legt eine Aktivität «GoCardless mandate lost» an, damit sich jemand vor der nächsten Rechnung darum kümmert.
Das archivierte Mandat bleibt in Odoo als Historie erhalten, wird zum Einziehen aber nicht mehr angeboten. Die Transaktion öffnen Sie aus der Rechnung über die Schaltfläche «Zahlungstransaktion» oben; das Menü der Transaktionen erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht.
Diese drei Texte schreibt der Konnektor beim Anwenden des Ereignisses, ohne dass jemand eingreift. 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 (bank_account_closed).», «The GoCardless direct debit mandate of … is no longer usable (bank_account_closed). No further collection can be taken against it. Ask the customer to set up a new mandate.» und «GoCardless mandate lost».
Wie Sie AC04 von MD07 unterscheiden
Aus Odoo heraus ist das nicht zu unterscheiden. Der Grund ist derselbe, der Konnektor speichert den Grund und nicht den SEPA-Code, und die Notiz am Kunden und die Aktivität sagen in beiden Fällen dasselbe. Den Code sehen Sie bei GoCardless. Laut deren Hilfezentrum steht der Grund eines Fehlschlags in der Zeitleiste der Zahlung, im Dashboard («You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.»). Im erweiterten Modus steht der genaue Code auch im Ereignis (details.reason_code), und das Dashboard bewahrt die Sendungen der letzten 3 Monate unter Developers > Webhooks samt Inhalt auf.
Wenn der Code MD07 ist
MD07 ist kein technisches Problem. Der Kontoinhaber ist verstorben, und das Mandat wird storniert. Die offenen Rechnungen dieses Kunden werden nicht per Lastschrift eingezogen, und wie sie einzufordern sind, ist eine Frage für Ihre Steuerberatung, nicht für den Konnektor. Ratsam ist, die geplanten Abbuchungen und Abonnements dieses Kunden in Odoo zu prüfen, damit keine weiteren entstehen. Die Notiz von Odoo verlangt auch in diesem Fall ein neues Mandat, da sie nur den Grund kennt: Bei MD07 fordern Sie keines an.
Was bei AC04 zu tun ist
- Nehmen Sie Kontakt mit dem Kunden auf: Er hat ein neues Konto oder wird eines haben und muss damit ein Mandat unterschreiben.
- Nach der Unterschrift ist das neue Mandat eine weitere Zahlungsmethode in Odoo; das alte bleibt archiviert.
- Ziehen Sie die offen gebliebenen Rechnungen mit dem neuen Mandat ein.

Kann ich eine Zahlung mit bank_account_closed erneut versuchen?
Das ergibt keinen Sinn: Das Konto existiert nicht. Außerdem archiviert der Konnektor das Mandat, und bei archiviertem Mandat erscheint die Schaltfläche «Retry collection» in der Transaktion nicht.
Und wenn der Kunde mit dem Kontowechsel-Dienst die Bank gewechselt hat?
Das ist keine Schließung: GoCardless meldet es als übertragenes Mandat mit dem Grund bank_account_transferred, und das Mandat bleibt gültig.
Mit unserem Konnektor
Der GoCardless-Konnektor für Odoo 17, 18, 19 und 20 macht bei bank_account_closed das, was eine aufmerksame Person täte: Er setzt die Abbuchung auf fehlgeschlagen, öffnet die Rechnung wieder, nimmt das tote Mandat aus dem Verkehr, damit es niemand erneut verwendet, und hinterlässt in der Kundenkarte einen Hinweis mit dem Grund.
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)
- Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 442 in 17.0 (d203ee6), Zeile 442 in 18.0 (e2ab18b), Zeile 441 in 19.0 (ce7f5a3) und Zeile 456 in 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: const.py, Zeile 145 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- 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 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: 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: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/payment
- 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/webhooks
- 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)
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
