Was GoCardless meldet
| Wo | Reason oder Ursache | Text von GoCardless |
|---|---|---|
API, beim Anlegen einer Zahlung (invalid_state) | mandate_replaced | Mandate has been replaced. Check links[new_mandate] in the error or on the mandate itself. |
| mandates · replaced | scheme_identifier_changed | The 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.»).

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:
- Übernimmt er das neue Mandat aus
links.new_mandate. - Ü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.
- 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.».

Was zu tun ist
- Bleibt eine Zahlung mit
mandate_replacedim 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. - 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.
- 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.
- 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
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)
