Drei Ereignisse und vier Zeilen, derselbe Code
| Ereignis | Ursache | Text von GoCardless |
|---|---|---|
| payments · failed | mandate_cancelled | The customer cancelled their mandate at their bank. |
| payments · charged_back | mandate_cancelled | This payment was charged back by the customer's bank, because the customer disputed authorising the transaction. |
| payments · cancelled | authorisation_disputed | This payment has been cancelled because the payer disputes authorising its mandate. |
| payments · cancelled | mandate_cancelled | This payment has been cancelled because the payer disputes authorising its mandate. |
Alle vier Zeilen stammen aus der SEPA-Core-Tabelle der GoCardless-Dokumentation und tragen MD01; die stornierte Zahlung erscheint mit zwei Ursachen und demselben Text. Auch das Mandat wird storniert, und GoCardless meldet das mit einem eigenen Ereignis: «A payment under this mandate failed, indicating that the mandate has been cancelled at the customer's bank. Any subscriptions and pending payments will also be cancelled.».

Was sich je nach Zeitpunkt ändert
Storniert der Kunde das Mandat, bevor die Lastschrift eingezogen wird, schlägt die Zahlung fehl: Das Geld ist nicht eingegangen. Bestreitet er sie nach dem Einzug, handelt es sich um eine Rückbelastung: Das Geld ist eingegangen und wird zurückgebucht. Und wenn Zahlungen zur Einreichung anstanden, storniert GoCardless sie, bevor sie übermittelt werden. Der Konnektor vermerkt in seinem Code, dass er die Ursache authorisation_disputed mit MD01 bei einer Testzahlung der Sandbox als Rückbelastung einer bereits abgerechneten Zahlung gesehen hat.
Was Odoo mit dem Konnektor macht
Die Transaktion wird von der Rechnung aus geöffnet, über die Schaltfläche «Zahlungstransaktion» oben; das Menü der Transaktionen erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht. In allen drei Fällen endet die Transaktion mit «Fehler» und der sichtbaren Ursache. Die Meldung hängt vom Ereignis ab: «GoCardless could not collect this payment (mandate_cancelled).» bei einem Fehlschlag und «GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.» bei einer Rückbelastung. Hatte Odoo die Rechnung mit dieser Lastschrift bereits als bezahlt markiert, storniert der Konnektor die Zahlung, und die Rechnung ist wieder offen.
Entscheidend ist das Mandat. mandate_cancelled und authorisation_disputed gehören zu den vier Ursachen, mit denen der Konnektor es für ungültig erklärt, also:
- archiviert er die Zahlungsart des Kunden, die nicht mehr zum Einzug angeboten wird;
- schreibt er in dessen Datensatz «The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.»;
- erstellt er eine Aktivität «GoCardless mandate lost».
Es kommen mehrere Ereignisse mit derselben Nachricht, das der Zahlung und das des Mandats, aber die Meldung erscheint nur einmal: Das zweite findet das Mandat bereits archiviert vor.
Alle diese 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 (mandate_cancelled).», «GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.», «The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.» und «GoCardless mandate lost».
Was zu tun ist
Bevor Sie ein neues Mandat anfordern, klären Sie, warum der Kunde es storniert hat. Ein Kunde, der den Dienst nicht mehr möchte, braucht eine Kündigung, keine neue Unterschrift. War es ein Fehler seinerseits oder eine Änderung bei seiner Bank, bitten Sie ihn, erneut zu unterschreiben, und ziehen Sie die offenen Rechnungen mit dem neuen Mandat ein. Behauptet er, die Lastschrift nie autorisiert zu haben, prüfen Sie, wie das Mandat unterschrieben wurde, bevor Sie weiter von ihm einziehen.
Hat es einen Sinn, eine Zahlung mit MD01 erneut zu versuchen?
Nein. Das Mandat existiert für seine Bank nicht mehr, und bei archiviertem Mandat erscheint die Schaltfläche «Retry collection» in der Transaktion nicht. Es braucht ein neues, vom Kunden unterschriebenes Mandat.

Mit unserem Konnektor
In Odoo 17, 18, 19 und 20 unterscheidet der Konnektor den Fehlschlag von der Rückbelastung, öffnet die Rechnung bei Bedarf wieder, entfernt das Mandat und hinterlässt Ihnen im Datensatz die Aufgabe, mit dem Kunden zu sprechen. Was er nicht tut, ist, selbstständig ein neues Mandat anzufordern: Dieses Gespräch ist Ihre Aufgabe.
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: 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 71 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 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 713 in 17.0 (d203ee6), Zeile 713 in 18.0 (e2ab18b), Zeile 712 in 19.0 (ce7f5a3) und Zeile 736 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: 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_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: 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 529 in 17.0 (d203ee6), Zeile 529 in 18.0 (e2ab18b), Zeile 529 in 19.0 (ce7f5a3) und Zeile 531 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)
- docs.gocardless.com/docs/api-reference/events/mandate
- 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)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/de.po
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
