Cosa dice GoCardless
| Reason | Tipo | Testo di GoCardless |
|---|---|---|
access_token_revoked | invalid_api_usage | Token has been revoked by the user. |
access_token_not_active | invalid_api_usage | Token has been disabled. |
unauthorized | invalid_api_usage | Credentials not recognised. |
Per Odoo i tre significano la stessa cosa: la credenziale con cui chiede le cose non è più valida. Nella sua tabella dei codici HTTP, GoCardless riserva il 401 a questo caso: «Missing or invalid Authorization header, or the user has been disabled.». Sono errori invalid_api_usage, quelli che dipendono da come viene fatta la richiesta, e per questi GoCardless chiede di avvisare il team tecnico («alert your dev team»).

Quando il token smette di funzionare
Il connettore si collega a GoCardless in due modi, e il token termina in modo diverso in ciascuno:
- «Connect my GoCardless account» è la connessione in due clic, tramite FlexigoTech: un'integrazione di partner. Secondo la guida per i partner di GoCardless, il commerciante può revocare quell'accesso dalla sua Dashboard («they can revoke your access from the GoCardless dashboard») oppure chiudere il proprio account. A quel punto GoCardless invia un ultimo webhook e il token smette di funzionare: «Your access token stops working, so you can't make any more API calls for that user.».
- «Paste an access token (advanced)» è la modalità in cui crei tu il token nella Dashboard di GoCardless e lo incolli in Odoo. Se lo revochi o lo disattivi lì, Odoo se ne accorge alla richiesta successiva, quando GoCardless la rifiuta.
Cosa fa Odoo con il connettore
Con la connessione in due clic, quell'ultimo webhook arriva senza id evento, come organisations · disconnected. Il connettore lo applica così:
- Cancella il token e il segreto del webhook, e la connessione del provider passa a «Disconnected in GoCardless».
- Scrive nel contatto della tua azienda «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.», con la data e la causa comunicate da GoCardless.
- Crea l'attività «GoCardless disconnected», perché qualcuno se ne accorga senza aprire il provider.
Da quel momento il connettore non richiama più GoCardless con quel provider: l'attività pianificata oraria lo salta, e un incasso con il metodo di pagamento salvato di un cliente passa a «Errore» con «This provider is not connected to GoCardless any more: connect it again first.».
Senza quell'avviso, il token resta salvato e GoCardless rifiuta ogni richiesta. In un incasso, la transazione passa a «Errore» con «GoCardless rejected the request.» e, sotto, il messaggio di GoCardless con il reason (access_token_revoked, access_token_not_active o unauthorized) e il request_id tra parentesi quadre. La fattura resta da incassare, e l'attività oraria non ritenta una transazione in errore.
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. L'avviso sul contatto e l'attività li scrive il connettore senza nessuno davanti, all'applicazione del webhook: «GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again.» e «GoCardless disconnected». I messaggi di un incasso seguono la stessa regola; se lo avvia un'azione pianificata, come il rinnovo di un abbonamento: «This provider is not connected to GoCardless any more: connect it again first.» e «GoCardless rejected the request.».

Cosa fare
- 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. Se il messaggio dice che il provider non è più connesso, o cita uno dei tre reason, il problema è la connessione, non il cliente né il suo mandato.
- Con la connessione in due clic, apri il provider di pagamento GoCardless e riconnetti con «Connect my GoCardless account».
- In modalità avanzata, crea un nuovo token nella Dashboard di GoCardless, incollalo in «GoCardless Access Token» e premi «Test connection». Il connettore chiede a GoCardless il creditore del tuo account con quel token: se GoCardless lo rifiuta, vedrai il suo errore in quel momento e non all'incasso successivo.
- Con la connessione di nuovo attiva, incassa di nuovo le fatture rimaste scoperte. Le transazioni in errore non vengono reinviate da sole.
- Se ti serve GoCardless, conserva il
request_iddel messaggio: la sua documentazione chiede di indicarlo quando si contatta il supporto.
Perché il connettore cancella il token invece di continuare a riprovare?
Perché GoCardless dice che quel token non funziona più. Così gli incassi successivi spiegano cosa succede (che il provider non è più connesso) invece di ricevere un rifiuto dopo l'altro, e nel contatto dell'azienda resta scritto quando e perché è stato disconnesso.
Un token del sandbox funziona con l'account di produzione?
No. L'aiuto del campo del token lo dice: i token del sandbox iniziano con sandbox_ e funzionano solo con l'API del sandbox. Per incassare davvero serve un token di produzione.
Con il nostro connettore
In Odoo 17, 18, 19 e 20 il connettore non permette che un token non più valido si trasformi in una catena di incassi falliti senza spiegazioni: se GoCardless segnala la disconnessione, lo dice nell'azienda e in un'attività, e se non la segnala, ogni rifiuto riporta il reason e il request_id di GoCardless.
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/partner-integrations/connect-your-merchants
- docs.gocardless.com/docs/partner-integrations/webhooks-for-partners
- 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: i18n/flexigo_payment_gocardless.pot, riga 143 in 17.0 (d203ee6), riga 143 in 18.0 (e2ab18b), riga 143 in 19.0 (ce7f5a3) e riga 145 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 888 in 17.0 (d203ee6), riga 888 in 18.0 (e2ab18b), riga 888 in 19.0 (ce7f5a3) e riga 903 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 1237 in 17.0 (d203ee6), riga 1237 in 18.0 (e2ab18b), riga 1237 in 19.0 (ce7f5a3) e riga 1234 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 1241 in 17.0 (d203ee6), riga 1241 in 18.0 (e2ab18b), riga 1241 in 19.0 (ce7f5a3) e riga 1238 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 265 in 17.0 (d203ee6), riga 265 in 18.0 (e2ab18b), riga 265 in 19.0 (ce7f5a3) e riga 267 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 545 in 17.0 (d203ee6), riga 545 in 18.0 (e2ab18b), riga 545 in 19.0 (ce7f5a3) e riga 547 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 456 in 17.0 (d203ee6), riga 456 in 18.0 (e2ab18b), riga 456 in 19.0 (ce7f5a3) e riga 458 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 732 in 17.0 (d203ee6), riga 732 in 18.0 (e2ab18b), riga 732 in 19.0 (ce7f5a3) e riga 734 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 336 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 1740 in 17.0 (d203ee6), riga 1740 in 18.0 (e2ab18b), riga 1740 in 19.0 (ce7f5a3) e riga 1745 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: 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_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 623 in 17.0 (d203ee6), riga 623 in 18.0 (e2ab18b), riga 623 in 19.0 (ce7f5a3) e riga 625 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_provider.py, riga 742 in 17.0 (d203ee6), riga 742 in 18.0 (e2ab18b), riga 742 in 19.0 (ce7f5a3) e riga 744 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1100 in 17.0 (d203ee6), riga 1100 in 18.0 (e2ab18b), riga 1100 in 19.0 (ce7f5a3) e riga 1107 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 346 in 17.0 (d203ee6), riga 346 in 18.0 (e2ab18b), riga 346 in 19.0 (ce7f5a3) e riga 348 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1167 in 17.0 (d203ee6), riga 1167 in 18.0 (e2ab18b), riga 1167 in 19.0 (ce7f5a3) e riga 1174 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)
