Zum Hauptinhalt springen
GoCardless · Mandate · replaced

GoCardless mandate_replaced: das Mandat hat einen Nachfolger

Manchmal storniert GoCardless ein Mandat und ersetzt es durch ein neues, etwa wenn der Gläubiger einen neuen Gläubiger-Identifikator erhält. Das meldet GoCardless mit dem Ereignis replaced, das die ID des neuen Mandats enthält, und der Konnektor übernimmt die Zahlungsmethode des Kunden auf das neue Mandat. Versucht Odoo, mit dem alten Mandat zu kassieren, bevor es davon erfährt, antwortet die API mit mandate_replaced.

FlexigoTech · Verantwortlich: Víctor Gómez · Aktualisiert am 6. November 2026

Das Wichtigste

Versionen
Odoo 17, 18, 19 und 20
Geprüft
im Quellcode des Connectors, Version 17.0, 18.0, 19.0 und 20.0 · in den Quellen am Ende
Lesezeit
3 Min.

Was GoCardless meldet

WoReason oder UrsacheText von GoCardless
API, beim Anlegen einer Zahlung (invalid_state)mandate_replacedMandate has been replaced. Check links[new_mandate] in the error or on the mandate itself.
mandates · replacedscheme_identifier_changedThe creditor has changed to a different scheme identifier, so this mandate has been cancelled and replaced by a new one.

Die Ereignisdokumentation erklärt es so: «The mandate has been cancelled and replaced by a new mandate (for example, because the creditor has moved to a new Service User Number).». Und das Ereignis enthält: «The event will include links[new_mandate] with the ID of the new mandate.».

mandate_replaced ist ein Fehler vom Typ invalid_state: Die Aktion ist im aktuellen Zustand der Ressource nicht gültig. Bei solchen Fehlern empfiehlt GoCardless, den Benutzer zu informieren und keinen erneuten Versuch zuzulassen («invalid_state → inform the end user, do not allow retry.»).

Karte des GoCardless-Fehlers mandate_replaced
Der reason, sein Typ invalid_state, das Feld links.new_mandate und die Ursache scheme_identifier_changed des Ereignisses.

Wann es auftritt

Die Änderung wird nicht vom Kunden oder seiner Bank ausgelöst: Das Ereignis replaced hat den Ursprung gocardless, und die dokumentierte Ursache ist, dass der Gläubiger, also das Konto, über das Sie bei GoCardless einziehen, zu einem neuen Identifikator des Schemas gewechselt ist. GoCardless storniert das alte Mandat und legt an dessen Stelle ein neues an.

mandate_replaced erscheint nur, wenn Odoo mit dem alten Mandat einzieht: die Abbuchung eines verlängerten Abonnements oder eine Zahlung mit der gespeicherten Zahlungsmethode des Kunden, bevor Odoo das Ereignis verarbeitet hat.

Was der Konnektor in Odoo macht

Mit dem Ereignis replaced:

  1. Übernimmt er das neue Mandat aus links.new_mandate.
  2. Überträgt er die gespeicherte Zahlungsmethode des Kunden auf dieses neue Mandat und behandelt sie als gültig. Ist die Methode archiviert, wird sie wieder aktiviert; Odoo 17 erlaubt das nicht, dort erstellt der Konnektor für das neue Mandat eine neue.
  3. Schreibt er dies in den Kundendatensatz: «The GoCardless mandate is usable again (replaced).».

Diesen Vermerk schreibt der Konnektor beim Verarbeiten 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: «The GoCardless mandate is usable again (replaced).».

Bei mandate_replaced in einer Zahlung unternimmt der Konnektor nichts Besonderes: Beim Anlegen einer Zahlung behandelt er gesondert nur mandate_is_inactive. Die Transaktion geht in den Status «Fehler» mit «GoCardless rejected the request.» und darunter der Meldung von GoCardless mit mandate_replaced und der request_id in eckigen Klammern. Das neue Mandat entnimmt er dem Ereignis, nicht dem Fehler. Der Konnektor ist nicht ins Deutsche übersetzt: Diese Meldung erscheint immer auf Englisch, auch in einem deutschen Odoo, egal ob ein Benutzer oder eine geplante Aktion die Zahlung auslöst: «GoCardless rejected the request.».

Schema: was GoCardless bei replaced sendet und was Odoo mit dem Konnektor tut
Schema auf Grundlage des Konnektorcodes (17.0, 18.0, 19.0 und 20.0) und der GoCardless-Dokumentation; das Durchgestrichene ist das, was nicht nötig ist.

Was zu tun ist

  1. Bleibt eine Zahlung mit mandate_replaced im Fehler stehen, öffnen Sie die Transaktion über die Rechnung, mit der Schaltfläche «Zahlungstransaktion» oben; das Menü der Transaktionen erscheint nur im Entwicklermodus und existiert in Odoo 20 nicht.
  2. Prüfen Sie im Kundendatensatz, ob der Vermerk steht, dass das Mandat wieder verwendbar ist (replaced). Wenn ja, zeigt die Zahlungsmethode bereits auf das neue Mandat.
  3. Wenn nicht, ist das Ereignis noch nicht angekommen. Die stündliche Aufgabe, die verlorene Ereignisse nachholt, bringt es mit; dauert das länger, prüfen Sie, ob die Webhooks von GoCardless bei Odoo ankommen.
  4. Ist die Zahlungsmethode aktuell, kassieren Sie die Rechnung erneut.

Muss der Kunde erneut unterschreiben?

Nein, um mit dem Konnektor weiter einzuziehen: Das neue Mandat legt GoCardless an, und der Konnektor überträgt die gespeicherte Zahlungsmethode darauf.

Wie ist es in Odoo 17?

Gleich, mit einem Unterschied: War die alte Zahlungsmethode archiviert, lässt Odoo 17 sie nicht reaktivieren, daher erstellt der Konnektor eine neue für das neue Mandat. In 18, 19 und 20 wird die vorhandene reaktiviert.

Mit unserem Konnektor

In Odoo 17, 18, 19 und 20 folgt der Konnektor dem neuen Mandat, sobald GoCardless die Ersetzung meldet: Der Kunde behält seine Zahlungsmethode, und die nächste Rechnung wird mit dem Mandat eingezogen, das GoCardless an dessen Stelle gesetzt hat.

Weiterlesen

GoCardless-Fehler mandate_is_inactive beim Anlegen einer Zahlung aus OdooGoCardless meldet mandate_is_inactive bei Zahlungen mit gekündigtem, fehlgeschlagenem oder abgelaufenem Mandat. Ursache und Lösung im Odoo-Konnektor.GoCardless bank_account_transferred: AMEND, das Mandat wechselt das KontoGoCardless meldet transferred mit dem Code AMEND, wenn das Mandat auf ein anderes Konto übertragen wurde. Was Odoo dabei tut und was zu tun ist.GoCardless mandate_expired: das Mandat ist wegen Nichtnutzung abgelaufenGoCardless markiert ein Mandat als expired, wenn im gesamten Inaktivitätszeitraum kein Einzug damit versucht wurde. Was Odoo tut und wie Sie weiter einziehen.
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/events/mandate
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_token.py, Zeile 72 in 17.0 (d203ee6), Zeile 72 in 18.0 (e2ab18b), Zeile 72 in 19.0 (ce7f5a3) und Zeile 71 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 150 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: const.py, Zeile 158 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 77 in 17.0 (d203ee6), Zeile 77 in 18.0 (e2ab18b), Zeile 77 in 19.0 (ce7f5a3) und Zeile 76 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_token.py, Zeile 96 in 17.0 (d203ee6), Zeile 96 in 18.0 (e2ab18b), Zeile 96 in 19.0 (ce7f5a3) und Zeile 95 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, Zeile 1157 in 17.0 (d203ee6), Zeile 1157 in 18.0 (e2ab18b), Zeile 1157 in 19.0 (ce7f5a3) und Zeile 1164 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 278 in 17.0 (d203ee6), Zeile 278 in 18.0 (e2ab18b), Zeile 278 in 19.0 (ce7f5a3) und Zeile 289 in 20.0 (688d86b)
  • Quellcode des Moduls: flexigo_payment_gocardless: models/payment_transaction.py, Zeile 281 in 17.0 (d203ee6), Zeile 281 in 18.0 (e2ab18b), Zeile 281 in 19.0 (ce7f5a3) und Zeile 292 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: const.py, Zeile 117 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 247 in 17.0 (d203ee6), Zeile 247 in 18.0 (e2ab18b), Zeile 247 in 19.0 (ce7f5a3) und Zeile 258 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
  • Quellcode des Moduls: flexigo_payment_gocardless: __manifest__.py, Zeile 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) und 20.0 (688d86b)