Che cosa dice GoCardless
| Reason | Tipo | Testo di GoCardless |
|---|---|---|
mandate_is_inactive | invalid_state | «Payment could not be created» e «mandate is cancelled, failed, or expired.» |
GoCardless separa le due parti del testo con un trattino. Gli errori invalid_state significano, secondo GoCardless, che l'azione non è valida nello stato attuale della risorsa. Qui la risorsa è il mandato: annullato, fallito o scaduto, non accetta più incassi.

Come si arriva a questo errore
Di norma Odoo viene a sapere che un mandato è morto da un evento di GoCardless prima di provare a incassare. Questo errore compare quando non è andata così: l'avviso non è arrivato o è arrivato in ritardo, oppure il mandato è stato annullato poco prima dell'incasso. L'incasso può derivare da un abbonamento che si rinnova o da un pagamento registrato con il metodo di pagamento salvato del cliente. Gli avvisi di GoCardless arrivano tramite webhook: con la connessione in due clic, attraverso FlexigoTech Cloud; in modalità avanzata, all'endpoint che hai creato tu nella Dashboard di GoCardless. Se questo percorso fallisce, Odoo non se ne accorge in tempo.
Che cosa fa il connettore
Senza un trattamento specifico, vedresti l'errore così com'è, con il testo dell'API, e il mandato continuerebbe a essere proposto per la fattura successiva. Il connettore fa altro:
- Riconosce il reason
mandate_is_inactivenella risposta. - Interroga GoCardless su quel mandato per confermarne lo stato.
- Se è annullato, fallito, scaduto, consumato o bloccato, lo archivia in Odoo. Se è la prima segnalazione di quel mandato morto, la scrive nella scheda del cliente, con lo stato del mandato tra parentesi («The GoCardless direct debit mandate of … is no longer usable (cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.»), e crea l'attività «GoCardless mandate lost».
- Porta la transazione allo stato «Errore» con un messaggio proprio, al posto dell'errore grezzo: «The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.».
Se il mandato risultasse attivo, il connettore non lo tocca e la transazione mostra l'errore di GoCardless: «GoCardless rejected the request.» seguito dal messaggio dell'API e dal suo request_id. Lo stesso trattamento vale per il pulsante per riprovare un incasso quando GoCardless risponde mandate_is_inactive.
Il connettore non è tradotto in italiano: questi testi compaiono sempre in inglese, anche in un Odoo in italiano, sia che li avvii un utente sia un'azione pianificata, come il rinnovo di un abbonamento: «The GoCardless direct debit mandate of … is no longer usable (cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.», «GoCardless mandate lost», «The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate.» e «GoCardless rejected the request.».
Perché non conviene riprovare
GoCardless lo indica nella descrizione degli errori invalid_state: bisogna informare l'utente e non lasciare che riprovi. Un mandato annullato non torna attivo insistendo; serve una nuova firma del cliente o, in alcuni casi e solo con permessi speciali di GoCardless, una riattivazione.

Che cosa fare
- Controlla il messaggio della transazione e la nota del connettore nella scheda del cliente. La transazione si apre 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. I due testi dicono in che stato si trova il mandato.
- Chiedi al cliente un nuovo mandato e incassa con quello la fattura in sospeso.
- Se succede spesso, verifica che i webhook di GoCardless arrivino al tuo Odoo: sono quelli che avvisano prima che arrivi l'incasso. In ogni caso, il connettore richiede ogni ora gli eventi eventualmente persi.
Perché il connettore interroga il mandato invece di archiviarlo senza altro?
Perché archivia solo ciò che GoCardless conferma morto. Se la verifica dice che il mandato è attivo, archiviarlo costringerebbe il cliente a firmare senza necessità.
Con il nostro connettore
In Odoo 17, 18, 19 e 20 il connettore trasforma un errore dell'API in un'operazione chiara: il mandato morto esce dall'elenco dei metodi di pagamento, il cliente viene avvisato nella sua scheda e la fattura resta in sospeso finché non c'è un mandato funzionante.
Continua a leggere
Verificato nel codice del connettore (versione 17.0, 18.0, 19.0 e 20.0) e nelle fonti collegate
Fonti
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 15 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)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 6 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/mandate
- 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: const.py, riga 33 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 131 in 17.0 (d203ee6), riga 131 in 18.0 (e2ab18b), riga 131 in 19.0 (ce7f5a3) e riga 130 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 134 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 397 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 469 in 17.0 (d203ee6), riga 469 in 18.0 (e2ab18b), riga 468 in 19.0 (ce7f5a3) e riga 487 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: i18n/flexigo_payment_gocardless.pot, riga 1148 in 17.0 (d203ee6), riga 1148 in 18.0 (e2ab18b), riga 1148 in 19.0 (ce7f5a3) e riga 1155 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 495 in 17.0 (d203ee6), riga 495 in 18.0 (e2ab18b), riga 495 in 19.0 (ce7f5a3) e riga 497 in 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)
- docs.gocardless.com/docs/api-reference/events/mandate
- Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/responses-and-errors
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 321 in 17.0 (d203ee6), riga 321 in 18.0 (e2ab18b), riga 321 in 19.0 (ce7f5a3) e riga 332 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1233 in 17.0 (d203ee6), riga 1233 in 18.0 (e2ab18b), riga 1233 in 19.0 (ce7f5a3) e riga 1240 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_token.py, riga 83 in 17.0 (d203ee6), riga 83 in 18.0 (e2ab18b), riga 83 in 19.0 (ce7f5a3) e riga 82 in 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/it.po
- 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)
- 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
