Cosa dice GoCardless
| Dove | Reason o causa | Testo di GoCardless |
|---|---|---|
API, alla creazione di un addebito (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. |
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.»).

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:
- Prende il mandato nuovo da
links.new_mandate. - 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.
- 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.».

Cosa fare
- 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. - 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.
- 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.
- 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
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)
