Aller au contenu principal
API GoCardless · invalid_api_usage · 401

GoCardless access_token_revoked : Odoo ne peut plus communiquer avec votre compte

Le jeton d'accès est la clé avec laquelle Odoo communique avec votre compte GoCardless. S'il est révoqué ou désactivé, GoCardless rejette chaque requête et aucun encaissement n'est possible. Avec la connexion en deux clics, GoCardless le signale et le connecteur l'enregistre ; en mode avancé, vous le découvrez par le rejet de la requête suivante.

FlexigoTech · Responsable : Víctor Gómez · Mis à jour le 6 novembre 2026

L'essentiel

Versions
Odoo 17, 18, 19 et 20
Vérifié
dans le code du connecteur, version 17.0, 18.0, 19.0 et 20.0 · dans les sources citées à la fin
Lecture
5 min

Ce que dit GoCardless

ReasonTypeTexte de GoCardless
access_token_revokedinvalid_api_usageToken has been revoked by the user.
access_token_not_activeinvalid_api_usageToken has been disabled.
unauthorizedinvalid_api_usageCredentials not recognised.

Pour Odoo, les trois signifient la même chose : l'identifiant avec lequel il effectue ses demandes n'est plus valable. Dans son tableau des codes HTTP, GoCardless réserve le 401 à ce cas : « Missing or invalid Authorization header, or the user has been disabled. ». Ce sont des erreurs invalid_api_usage, celles qui proviennent de la manière dont la requête est faite, et pour ces cas GoCardless demande d'alerter l'équipe technique (« alert your dev team »).

Carte de l'erreur access_token_revoked de GoCardless
Les trois reasons d'un jeton qui n'est plus valable, leur type invalid_api_usage et le code HTTP 401.

Quand le jeton cesse de fonctionner

Le connecteur se connecte à GoCardless de deux façons, et le jeton cesse de fonctionner différemment dans chacune :

  • « Connect my GoCardless account » est la connexion en deux clics, via FlexigoTech : une intégration de partenaire. Selon le guide des partenaires de GoCardless, le commerçant peut révoquer cet accès depuis son Dashboard (« they can revoke your access from the GoCardless dashboard ») ou fermer son compte. GoCardless envoie alors un dernier webhook et le jeton cesse de fonctionner : « Your access token stops working, so you can't make any more API calls for that user. ».
  • « Paste an access token (advanced) » est le mode dans lequel vous créez vous-même le jeton dans le Dashboard de GoCardless et le collez dans Odoo. Si vous le révoquez ou le désactivez là-bas, Odoo le découvre à la requête suivante, lorsque GoCardless la rejette.

Ce que fait Odoo avec le connecteur

Avec la connexion en deux clics, ce dernier webhook arrive sans identifiant d'événement, comme organisations · disconnected. Le connecteur l'applique ainsi :

  1. Il supprime le jeton et le secret du webhook, et la connexion du fournisseur passe à « Disconnected in GoCardless ».
  2. Il écrit sur le contact de votre entreprise « GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again. », avec la date et la cause transmises par GoCardless.
  3. Il crée l'activité « GoCardless disconnected », pour que quelqu'un le sache sans ouvrir le fournisseur.

Dès lors, le connecteur n'appelle plus GoCardless avec ce fournisseur : la tâche horaire l'ignore, et un encaissement avec le moyen de paiement enregistré d'un client passe à « Erreur » avec « This provider is not connected to GoCardless any more: connect it again first. ».

Sans cet avis, le jeton reste enregistré et GoCardless rejette chaque requête. Lors d'un encaissement, la transaction passe à « Erreur » avec « GoCardless rejected the request. » et, dessous, le message de GoCardless avec le reason (access_token_revoked, access_token_not_active ou unauthorized) et le request_id entre crochets. La facture reste à encaisser, et la tâche horaire ne renvoie pas une transaction en erreur.

L'avis sur le contact et l'activité sont rédigés par le connecteur sans intervention humaine, lors de l'application du webhook. Le connecteur n'est pas traduit en français : ces textes apparaissent toujours en anglais, même dans un Odoo en français, qu'ils soient déclenchés par un utilisateur ou par une action planifiée : « GoCardless reports that the account was disconnected from Odoo on … (…). No collection can be taken until it is connected again. » et « GoCardless disconnected ». Les messages d'un encaissement s'affichent dans la langue de celui qui le lance ; s'il est lancé par une action planifiée, comme le renouvellement d'un abonnement, ils restent eux aussi en anglais : « This provider is not connected to GoCardless any more: connect it again first. » et « GoCardless rejected the request. ».

Schéma : ce que GoCardless envoie lorsque le jeton cesse de fonctionner et ce que fait Odoo avec le connecteur
Schéma réalisé à partir du code du connecteur (17.0, 18.0, 19.0 et 20.0) et de la documentation de GoCardless.

Que faire

  1. Ouvrez la transaction depuis la facture, avec le bouton « Transaction de paiement » en haut ; le menu des transactions n'apparaît qu'en mode développeur, et n'existe pas dans Odoo 20. Si le message indique que le fournisseur n'est plus connecté, ou cite l'un des trois reasons, le problème vient de la connexion, pas du client ni de son mandat.
  2. Avec la connexion en deux clics, ouvrez le fournisseur de paiement GoCardless et reconnectez-vous avec « Connect my GoCardless account ».
  3. En mode avancé, créez un nouveau jeton dans le Dashboard de GoCardless, collez-le dans « GoCardless Access Token » et cliquez sur « Test connection ». Le connecteur demande à GoCardless le créancier de votre compte avec ce jeton : si GoCardless le rejette, vous verrez son erreur à ce moment-là et non lors du prochain encaissement.
  4. Une fois la connexion rétablie, relancez l'encaissement des factures restées impayées. Les transactions en erreur ne sont pas renvoyées automatiquement.
  5. Si vous contactez GoCardless, conservez le request_id du message : sa documentation demande de le joindre à votre demande auprès de son support.

Pourquoi le connecteur supprime-t-il le jeton au lieu de continuer à réessayer ?

Parce que GoCardless indique que ce jeton ne fonctionne plus. Ainsi, les encaissements suivants expliquent ce qui se passe (le fournisseur n'est plus connecté) au lieu de subir rejet sur rejet, et le contact de l'entreprise conserve la date et la raison de la déconnexion.

Un jeton du sandbox fonctionne-t-il avec le compte de production ?

Non. L'aide du champ du jeton l'indique : les jetons du sandbox commencent par sandbox_ et ne fonctionnent qu'avec l'API du sandbox. Pour encaisser réellement, il faut un jeton de production.

Avec notre connecteur

Dans Odoo 17, 18, 19 et 20, le connecteur ne laisse pas un jeton révoqué se transformer en une suite d'encaissements échoués sans explication : si GoCardless signale la déconnexion, il le indique sur l'entreprise et dans une activité, et s'il ne le signale pas, chaque rejet comporte le reason et le request_id de GoCardless.

À lire aussi

Webhook GoCardless : 498 Token Invalid, 204 et la signature Webhook-SignatureGoCardless arrête les nouvelles tentatives sur 498 comme sur 204. Ce que répond Odoo 17, 18, 19 et 20, et pourquoi c'est un 401 sur Odoo 20.GoCardless internal_server_error et request_timed_out : la panne vient de GoCardlessGoCardless répond 500 internal_server_error ou 504 request_timed_out si la panne vient de lui. Ce que fait le connecteur et comment ne pas prélever deux fois.GoCardless 429 rate_limit_exceeded : trop de requêtes par minuteGoCardless répond 429 rate_limit_exceeded au-delà de 1 600 requêtes par minute. Comment le connecteur attend, réessaie et que faire si l'erreur persiste.
Vérifié dans le code du connecteur (version 17.0, 18.0, 19.0 et 20.0) et dans les sources citées

Sources

  • 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
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 71 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 143 en 17.0 (d203ee6), ligne 143 en 18.0 (e2ab18b), ligne 143 en 19.0 (ce7f5a3) et ligne 145 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 888 en 17.0 (d203ee6), ligne 888 en 18.0 (e2ab18b), ligne 888 en 19.0 (ce7f5a3) et ligne 903 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 1237 en 17.0 (d203ee6), ligne 1237 en 18.0 (e2ab18b), ligne 1237 en 19.0 (ce7f5a3) et ligne 1234 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 1241 en 17.0 (d203ee6), ligne 1241 en 18.0 (e2ab18b), ligne 1241 en 19.0 (ce7f5a3) et ligne 1238 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 265 en 17.0 (d203ee6), ligne 265 en 18.0 (e2ab18b), ligne 265 en 19.0 (ce7f5a3) et ligne 267 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 545 en 17.0 (d203ee6), ligne 545 en 18.0 (e2ab18b), ligne 545 en 19.0 (ce7f5a3) et ligne 547 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 456 en 17.0 (d203ee6), ligne 456 en 18.0 (e2ab18b), ligne 456 en 19.0 (ce7f5a3) et ligne 458 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 732 en 17.0 (d203ee6), ligne 732 en 18.0 (e2ab18b), ligne 732 en 19.0 (ce7f5a3) et ligne 734 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 336 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1740 en 17.0 (d203ee6), ligne 1740 en 18.0 (e2ab18b), ligne 1740 en 19.0 (ce7f5a3) et ligne 1745 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 397 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 462 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 521 en 17.0 (d203ee6), ligne 521 en 18.0 (e2ab18b), ligne 521 en 19.0 (ce7f5a3) et ligne 523 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 281 en 17.0 (d203ee6), ligne 281 en 18.0 (e2ab18b), ligne 281 en 19.0 (ce7f5a3) et ligne 292 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 247 en 17.0 (d203ee6), ligne 247 en 18.0 (e2ab18b), ligne 247 en 19.0 (ce7f5a3) et ligne 258 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 623 en 17.0 (d203ee6), ligne 623 en 18.0 (e2ab18b), ligne 623 en 19.0 (ce7f5a3) et ligne 625 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_provider.py, ligne 742 en 17.0 (d203ee6), ligne 742 en 18.0 (e2ab18b), ligne 742 en 19.0 (ce7f5a3) et ligne 744 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1100 en 17.0 (d203ee6), ligne 1100 en 18.0 (e2ab18b), ligne 1100 en 19.0 (ce7f5a3) et ligne 1107 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 346 en 17.0 (d203ee6), ligne 346 en 18.0 (e2ab18b), ligne 346 en 19.0 (ce7f5a3) et ligne 348 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1167 en 17.0 (d203ee6), ligne 1167 en 18.0 (e2ab18b), ligne 1167 en 19.0 (ce7f5a3) et ligne 1174 en 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/fr.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
  • Code du module : flexigo_payment_gocardless: __manifest__.py, ligne 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)