Aller au contenu principal
GoCardless API · invalid_state · reinstate

GoCardless mandate_not_inactive : le mandat ne peut pas être réactivé

Réactiver un mandat (reinstate), c'est soumettre de nouveau aux banques un mandat annulé ou expiré. GoCardless le refuse avec mandate_not_inactive si le mandat est déjà actif ou en cours de soumission. Avec le connecteur, la demande n'est possible que hors production, car GoCardless restreint cette fonction en production.

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
4 min

Ce que dit GoCardless

ReasonTypeTexte de GoCardless
mandate_not_inactiveinvalid_state« Mandate could not be reinstated » et « it is already active or being submitted. »

GoCardless sépare les deux parties du texte par un tiret. La référence de l'API le précise : « This will fail with a mandate_not_inactive error if the mandate is already being submitted, or is active. ». C'est une erreur invalid_state, et pour ces cas GoCardless demande d'informer l'utilisateur et de ne pas réessayer (« invalid_state → inform the end user, do not allow retry. »).

Carte de l'erreur mandate_not_inactive de GoCardless
Le reason, son type invalid_state, l'action de réactivation (actions/reinstate) et le texte de GoCardless.

Quels mandats peuvent être réactivés

La réactivation a davantage de conditions que le seul statut :

  • C'est une fonction restreinte : « Restricted this endpoint requires approved custom payment pages ».
  • Elle ne vaut que pour un mandat annulé depuis le Dashboard ou l'API : « A mandate can only be reinstated if it has been cancelled through the dashboard or the API. ». Un mandat annulé par la banque ne peut pas l'être : « Any mandate that has been cancelled by the bank cannot be reinstated. ».
  • Elle sert pour les mandats annulés ou expirés (« Reinstates a cancelled or expired mandate to the banks. »), et un mandat peut être soumis de nouveau jusqu'à 10 fois (« Mandates can be resubmitted up to 10 times. »).

Après la demande, le processus est celui d'une création : arrive resubmission_requested, puis, comme l'indique GoCardless, « so you will receive a submitted webhook, followed by a reinstated or failed webhook up to two working days later. ».

Ce que fait Odoo avec le connecteur

Sur la fiche du mode de paiement du client, le connecteur affiche le bouton « Reinstate mandate (sandbox) ». Il n'apparaît que si le mandat est GoCardless, si le fournisseur n'est pas en production (dans Odoo 17, 18 et 19, l'état du fournisseur ; dans Odoo 20, la case production) et si « Mandate Status » vaut cancelled, failed ou expired.

Au clic :

  1. Le connecteur demande à GoCardless la réactivation de ce mandat.
  2. Si GoCardless l'accepte, l'état passe à reinstate_requested et la fiche du client affiche « Reinstatement of the GoCardless mandate requested. It stays unusable until the bank confirms it. ». Le mode de paiement reste archivé.
  3. Quand arrive reinstated, le connecteur le considère de nouveau valide : il le réactive et écrit « The GoCardless mandate is usable again (reinstated). ».

Si GoCardless répond mandate_not_inactive, le connecteur ne l'intercepte pas : Odoo affiche « GoCardless rejected the request. » avec le message de GoCardless, le reason et le request_id, et le mandat reste dans son état. Cela arrive quand Odoo considère le mandat comme mort alors que, chez GoCardless, il est déjà actif ou en cours de soumission, parce que ses événements ne sont pas encore arrivés dans Odoo. Après une demande acceptée, le bouton disparaît, puisque l'état passe à reinstate_requested.

La note indiquant que le mandat est de nouveau utilisable est écrite par le connecteur lors de l'application de l'événement, sans personne devant l'écran. 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 : « The GoCardless mandate is usable again (reinstated). ».

Schéma : ce que renvoie GoCardless avec mandate_not_inactive 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. Si mandate_not_inactive apparaît, cherchez le mandat dans le Dashboard de GoCardless. S'il est actif ou en cours de soumission, il n'y a rien à réactiver : attendez l'arrivée de ses événements. La tâche qui récupère chaque heure les événements manqués les rapatrie.
  2. Si le mandat a été annulé par la banque, n'essayez pas : GoCardless ne réactive pas ces mandats. Demandez au client un nouveau mandat.
  3. En production, le connecteur ne propose pas la réactivation : la voie est un nouveau mandat signé par le client.
  4. Pour tester, utilisez le sandbox de GoCardless avec le fournisseur en test.

Pourquoi le bouton n'apparaît-il que hors production ?

Parce que GoCardless restreint la réactivation à ceux qui disposent de pages de paiement personnalisées approuvées, et que le connecteur ne la propose que hors production.

Combien de temps faut-il pour que le mandat redevienne valide ?

Le temps que prennent les banques : selon GoCardless, il signale d'abord que la réactivation a été demandée, puis que le mandat a été soumis et, jusqu'à deux jours ouvrés plus tard, s'il a été réactivé ou s'il a échoué. D'ici là, le connecteur ne l'utilise pas.

Avec notre connecteur

Dans Odoo 17, 18, 19 et 20, le connecteur ne propose de réactiver un mandat annulé, échoué ou expiré que hors production, et ne l'utilise de nouveau qu'une fois que GoCardless a confirmé la réactivation par son événement.

À lire aussi

GoCardless mandate_expired : le mandat a expiré faute d'utilisationGoCardless marque un mandat comme expired après une période sans prélèvement. Ce que fait Odoo et comment continuer à encaisser.GoCardless MD01 : mandate_cancelled et authorisation_disputed sur un prélèvement SEPALe code SEPA MD01 arrive dans GoCardless sous mandate_cancelled ou authorisation_disputed, sur un prélèvement échoué, rejeté ou annulé. Ce que fait Odoo.Erreur mandate_is_inactive de GoCardless lors de la création d'un encaissement depuis OdooGoCardless répond mandate_is_inactive quand un paiement est créé avec un mandat annulé, échoué ou expiré. Pourquoi et comment le connecteur le gère.
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/api-reference/mandate
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Code du module : flexigo_payment_gocardless: const.py, ligne 134 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: views/payment_token_views.xml, ligne 23 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: views/payment_token_views.xml, ligne 22 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 998 en 17.0 (d203ee6), ligne 998 en 18.0 (e2ab18b), ligne 998 en 19.0 (ce7f5a3) et ligne 1013 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 176 en 17.0 (d203ee6), ligne 176 en 18.0 (e2ab18b), ligne 176 en 19.0 (ce7f5a3) et ligne 175 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 173 en 17.0 (d203ee6), ligne 173 en 18.0 (e2ab18b), ligne 173 en 19.0 (ce7f5a3) et ligne 172 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1004 en 17.0 (d203ee6), ligne 1004 en 18.0 (e2ab18b), ligne 1004 en 19.0 (ce7f5a3) et ligne 1019 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 170 en 17.0 (d203ee6), ligne 170 en 18.0 (e2ab18b), ligne 170 en 19.0 (ce7f5a3) et ligne 169 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: const.py, ligne 158 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 77 en 17.0 (d203ee6), ligne 77 en 18.0 (e2ab18b), ligne 77 en 19.0 (ce7f5a3) et ligne 76 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1157 en 17.0 (d203ee6), ligne 1157 en 18.0 (e2ab18b), ligne 1157 en 19.0 (ce7f5a3) et ligne 1164 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: views/payment_token_views.xml, ligne 15 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 785 en 17.0 (d203ee6), ligne 785 en 18.0 (e2ab18b), ligne 785 en 19.0 (ce7f5a3) et ligne 800 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: const.py, ligne 117 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • 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)