Vai al contenuto principale
GoCardless · mandati · replaced

GoCardless mandate_replaced: il mandato ha un sostituto

A volte GoCardless annulla un mandato e lo sostituisce con uno nuovo, per esempio quando il creditore cambia identificativo di schema. Lo comunica con l'evento replaced, che porta l'id del nuovo mandato, e il connettore passa a lui il metodo di pagamento del cliente. Se Odoo prova ad addebitare con quello vecchio prima di saperlo, l'API risponde mandate_replaced.

FlexigoTech · Responsabile: Víctor Gómez · Aggiornato il 6 novembre 2026

In breve

Versioni
Odoo 17, 18, 19 e 20
Verificato
nel codice del connettore, versione 17.0, 18.0, 19.0 e 20.0 · nelle fonti collegate in fondo
Lettura
4 min

Cosa dice GoCardless

DoveReason o causaTesto di GoCardless
API, alla creazione di un addebito (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.

La documentazione degli eventi lo spiega così: «The mandate has been cancelled and replaced by a new mandate (for example, because the creditor has moved to a new Service User Number).». E quello che porta l'evento: «The event will include links[new_mandate] with the ID of the new mandate.».

mandate_replaced è un errore invalid_state: l'azione non è valida nello stato attuale della risorsa. Per questi errori GoCardless chiede di avvisare l'utente e non riprovare («invalid_state → inform the end user, do not allow retry.»).

Scheda dell'errore mandate_replaced di GoCardless
Il reason, il suo tipo invalid_state, il campo links.new_mandate e la causa scheme_identifier_changed dell'evento.

Quando compare

La modifica non è provocata dal cliente né dalla sua banca: l'evento replaced ha origine gocardless, e la causa documentata è che il creditore, cioè l'account con cui incassi in GoCardless, è passato a un altro identificativo di schema. GoCardless annulla il mandato vecchio e ne crea uno nuovo al suo posto.

mandate_replaced compare solo se Odoo prova ad addebitare con il mandato vecchio: l'addebito di un abbonamento che si rinnova, o un pagamento registrato con il metodo di pagamento salvato del cliente, prima che Odoo abbia applicato l'evento.

Cosa fa Odoo con il connettore

Con l'evento replaced:

  1. Prende il mandato nuovo da links.new_mandate.
  2. Passa a quel mandato il metodo di pagamento salvato del cliente e lo considera valido, invece di darlo per perso. Se il metodo era archiviato, lo riattiva; Odoo 17 non permette di ripristinare un metodo di pagamento, e lì il connettore ne crea uno nuovo per il mandato nuovo.
  3. Lo scrive nella scheda del cliente: «The GoCardless mandate is usable again (replaced).».

Questa nota la scrive il connettore nell'applicare l'evento, senza che nessuno intervenga. In un database creato in italiano compare così; in uno creato in inglese e poi passato all'italiano, in inglese: «The GoCardless mandate is usable again (replaced).».

Con mandate_replaced in un addebito, il connettore non fa nulla di speciale: alla creazione di un addebito tratta a parte solo mandate_is_inactive. La transazione passa a «Errore» con «GoCardless rejected the request.» e, sotto, il messaggio di GoCardless con mandate_replaced e il request_id tra parentesi quadre. Il mandato nuovo lo prende dall'evento, non dall'errore. Questo messaggio esce nella lingua di chi lancia l'addebito; se lo lancia un'azione pianificata, in un database creato in inglese e poi passato all'italiano esce in inglese: «GoCardless rejected the request.».

Schema: cosa invia GoCardless con replaced e cosa fa Odoo con il connettore
Schema realizzato a partire dal codice del connettore (17.0, 18.0, 19.0 e 20.0) e dalla documentazione di GoCardless; ciò che è barrato non serve.

Cosa fare

  1. Se un addebito resta in errore con mandate_replaced, apri la transazione dalla fattura, con il pulsante «Transazione di pagamento» in alto; il menu delle transazioni compare solo in modalità sviluppatore, e in Odoo 20 non esiste.
  2. Controlla nella scheda del cliente se c'è la nota che il mandato può essere riutilizzato (replaced). Se c'è, il metodo di pagamento punta già al mandato nuovo.
  3. Se non c'è, l'evento non è ancora arrivato. L'azione pianificata che ogni ora recupera gli eventi persi lo porta; se ci mette più di così, verifica che i webhook di GoCardless arrivino a Odoo.
  4. Con il metodo di pagamento aggiornato, riprova ad addebitare la fattura.

Bisogna chiedere al cliente di firmare di nuovo?

No, per continuare a incassare con il connettore: il mandato nuovo lo crea GoCardless e il connettore passa a lui il metodo di pagamento salvato.

Cosa succede in Odoo 17?

Lo stesso, con una differenza: se il vecchio metodo di pagamento era archiviato, Odoo 17 non permette di riattivarlo, quindi il connettore ne crea uno nuovo per il mandato nuovo. In 18, 19 e 20 riattiva quello che c'era.

Con il nostro connettore

In Odoo 17, 18, 19 e 20 il connettore segue il mandato nuovo appena GoCardless segnala la sostituzione: il cliente conserva il suo metodo di pagamento e la fattura successiva si incassa con il mandato che GoCardless ha lasciato al suo posto.

Continua a leggere

Errore mandate_is_inactive di GoCardless alla creazione di un incasso da OdooGoCardless risponde mandate_is_inactive se crei un pagamento con un mandato annullato, fallito o scaduto. Perché succede e come lo gestisce il connettore.GoCardless bank_account_transferred: AMEND, il mandato passa a un altro contoGoCardless avvisa con transferred e il codice AMEND che il mandato è passato a un altro conto del cliente. Cosa fa Odoo con il connettore e cosa non serve fare.GoCardless mandate_expired: il mandato è scaduto per inutilizzoGoCardless segna un mandato come expired quando per tutto il periodo di inattività non si è tentato alcun addebito. Cosa fa Odoo e come continuare a incassare.
Verificato nel codice del connettore (versione 17.0, 18.0, 19.0 e 20.0) e nelle fonti collegate

Fonti

  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 72 in 17.0 (d203ee6), riga 72 in 18.0 (e2ab18b), riga 72 in 19.0 (ce7f5a3) e riga 71 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 150 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 158 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 77 in 17.0 (d203ee6), riga 77 in 18.0 (e2ab18b), riga 77 in 19.0 (ce7f5a3) e riga 76 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 96 in 17.0 (d203ee6), riga 96 in 18.0 (e2ab18b), riga 96 in 19.0 (ce7f5a3) e riga 95 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1157 in 17.0 (d203ee6), riga 1157 in 18.0 (e2ab18b), riga 1157 in 19.0 (ce7f5a3) e riga 1164 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 278 in 17.0 (d203ee6), riga 278 in 18.0 (e2ab18b), riga 278 in 19.0 (ce7f5a3) e riga 289 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 281 in 17.0 (d203ee6), riga 281 in 18.0 (e2ab18b), riga 281 in 19.0 (ce7f5a3) e riga 292 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 397 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 462 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 521 in 17.0 (d203ee6), riga 521 in 18.0 (e2ab18b), riga 521 in 19.0 (ce7f5a3) e riga 523 in 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: const.py, riga 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 247 in 17.0 (d203ee6), riga 247 in 18.0 (e2ab18b), riga 247 in 19.0 (ce7f5a3) e riga 258 in 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/it.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
  • Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)