Tre eventi e quattro righe, lo stesso codice
| Evento | Causa | Testo di GoCardless |
|---|---|---|
| payments · failed | mandate_cancelled | The customer cancelled their mandate at their bank. |
| payments · charged_back | mandate_cancelled | This payment was charged back by the customer's bank, because the customer disputed authorising the transaction. |
| payments · cancelled | authorisation_disputed | This payment has been cancelled because the payer disputes authorising its mandate. |
| payments · cancelled | mandate_cancelled | This payment has been cancelled because the payer disputes authorising its mandate. |
Le quattro righe provengono dalla tabella SEPA Core della documentazione di GoCardless e riportano MD01; il pagamento annullato compare con due cause e lo stesso testo. Anche il mandato viene annullato, e GoCardless lo comunica con un evento proprio: «A payment under this mandate failed, indicating that the mandate has been cancelled at the customer's bank. Any subscriptions and pending payments will also be cancelled.».

Cosa cambia a seconda del momento
Se il cliente annulla il mandato prima che l'incasso venga addebitato, il pagamento fallisce: il denaro non è arrivato. Se lo contesta dopo l'addebito, è uno storno: il denaro è arrivato e viene restituito. E se c'erano pagamenti in attesa di essere presentati, GoCardless li annulla prima di inviarli. Il connettore annota nel suo codice di aver visto la causa authorisation_disputed con MD01 in un pagamento di prova della sandbox, come storno di un pagamento già regolato.
Cosa fa Odoo con il connettore
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. In tutti e tre i casi la transazione finisce in «Errore» con la causa in evidenza. Il messaggio dipende dall'evento: «GoCardless could not collect this payment (mandate_cancelled).» per un fallimento, e «GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.» per uno storno. Se Odoo aveva già la fattura pagata con quell'incasso, il connettore annulla il pagamento e la fattura torna da saldare.
L'importante è il mandato. mandate_cancelled e authorisation_disputed sono tra le quattro cause per cui il connettore lo considera non più valido, quindi:
- archivia il metodo di pagamento del cliente, che smette di essere proposto per gli incassi;
- scrive nella sua scheda «The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.»;
- crea un'attività «GoCardless mandate lost».
Arrivano più eventi con la stessa notizia, quello del pagamento e quello del mandato, ma l'avviso compare una sola volta: il secondo trova il mandato già archiviato.
Tutti questi testi li scrive il connettore nell'applicare l'evento, senza nessuno davanti. Sono in inglese, perché il connettore non è tradotto in italiano e questi messaggi escono sempre in inglese, anche in un Odoo in italiano: «GoCardless could not collect this payment (mandate_cancelled).», «GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.», «The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.» e «GoCardless mandate lost».
Cosa fare
Prima di chiedere un mandato nuovo, capisci perché l'ha annullato. Un cliente che ha smesso di voler il servizio ha bisogno di una disdetta, non di un'altra firma. Se è stato un errore suo o un cambiamento nella sua banca, chiedigli di firmare di nuovo e incassa con il mandato nuovo le fatture rimaste aperte. Se dice di non aver mai autorizzato l'addebito, verifica come è stato firmato il mandato prima di continuare a incassare.
Ha senso riprovare un pagamento con MD01?
No. Il mandato non esiste più per la sua banca, e con il mandato archiviato il pulsante «Retry collection» non compare nella transazione. Serve un mandato nuovo firmato dal cliente.

Con il nostro connettore
In Odoo 17, 18, 19 e 20, il connettore distingue il fallimento dallo storno, riapre la fattura se serve, ritira il mandato e ti lascia l'attività di parlare con il cliente nella sua scheda. Quello che non fa è chiedere il mandato nuovo per conto tuo: quella conversazione spetta a te.
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 442 in 17.0 (d203ee6), riga 442 in 18.0 (e2ab18b), riga 441 in 19.0 (ce7f5a3) e riga 456 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 71 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 725 in 17.0 (d203ee6), riga 725 in 18.0 (e2ab18b), riga 724 in 19.0 (ce7f5a3) e riga 748 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 713 in 17.0 (d203ee6), riga 713 in 18.0 (e2ab18b), riga 712 in 19.0 (ce7f5a3) e riga 736 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 754 in 17.0 (d203ee6), riga 754 in 18.0 (e2ab18b), riga 753 in 19.0 (ce7f5a3) e riga 777 in 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: 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)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 436 in 17.0 (d203ee6), riga 436 in 18.0 (e2ab18b), riga 436 in 19.0 (ce7f5a3) e riga 438 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 529 in 17.0 (d203ee6), riga 529 in 18.0 (e2ab18b), riga 529 in 19.0 (ce7f5a3) e riga 531 in 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)
- 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/events/payment
- Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 13 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 63 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 418 in 17.0 (d203ee6), riga 418 in 18.0 (e2ab18b), riga 417 in 19.0 (ce7f5a3) e riga 432 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1016 in 17.0 (d203ee6), riga 1016 in 18.0 (e2ab18b), riga 1016 in 19.0 (ce7f5a3) e riga 1031 in 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/it.po
- 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
