Aller au contenu principal
GoCardless · SEPA Core · mandat annulé ou contesté

GoCardless MD01 : mandate_cancelled et authorisation_disputed sur un prélèvement SEPA

MD01 arrive quand le client a annulé le mandat auprès de sa banque ou affirme n'avoir jamais autorisé le prélèvement. Dans GoCardless, il apparaît sur trois événements de paiement différents, selon le moment, et dans tous les cas le résultat pour la suite est le même : avec ce mandat, on ne peut plus rien prélever.

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

Trois événements et quatre lignes, le même code

ÉvénementCauseTexte de GoCardless
payments · failedmandate_cancelledThe customer cancelled their mandate at their bank.
payments · charged_backmandate_cancelledThis payment was charged back by the customer's bank, because the customer disputed authorising the transaction.
payments · cancelledauthorisation_disputedThis payment has been cancelled because the payer disputes authorising its mandate.
payments · cancelledmandate_cancelledThis payment has been cancelled because the payer disputes authorising its mandate.

Les quatre lignes proviennent du tableau SEPA Core de la documentation de GoCardless et portent le code MD01 ; le paiement annulé apparaît avec deux causes et le même texte. Le mandat est aussi annulé, et GoCardless le signale par son propre événement : « 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. ».

Carte de la cause mandate_cancelled de GoCardless
La cause, le code SEPA Core MD01 et le texte de GoCardless pour le paiement échoué.

Ce qui change selon le moment

Si le client annule le mandat avant que le prélèvement soit présenté, le paiement échoue : l'argent n'est jamais arrivé. S'il conteste après encaissement, c'est un rejet : l'argent est arrivé et repart. Et si des paiements attendaient d'être présentés, GoCardless les annule avant de les envoyer. Le connecteur note dans son code qu'il a vu la cause authorisation_disputed avec MD01 sur un paiement de test du sandbox, comme rejet d'un paiement déjà réglé.

Ce que fait Odoo avec le connecteur

La transaction s'ouvre depuis la facture, avec le bouton « Transaction de paiement » en haut ; le menu des transactions n'apparaît qu'en mode développeur, et il n'existe pas dans Odoo 20. Dans les trois cas, la transaction passe à « Erreur » avec la cause visible. Le message dépend de l'événement : « GoCardless could not collect this payment (mandate_cancelled). » pour un échec, et « GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout. » pour un rejet. Si Odoo avait déjà marqué la facture comme payée avec ce prélèvement, le connecteur annule le paiement et la facture redevient due.

Le point important, c'est le mandat. mandate_cancelled et authorisation_disputed font partie des quatre causes pour lesquelles le connecteur le considère comme mort, donc :

  • il archive le mode de paiement du client, qui n'est plus proposé pour un encaissement ;
  • il écrit sur sa fiche « 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. » ;
  • il crée une activité « GoCardless mandate lost ».

Plusieurs événements apportent la même nouvelle, celui du paiement et celui du mandat, mais l'alerte n'est émise qu'une fois : le second trouve le mandat déjà archivé.

Tous ces textes sont écrits par le connecteur au moment d'appliquer l'événement, sans intervention humaine. Le connecteur n'est pas traduit en français : ces messages apparaissent toujours en anglais, même dans un Odoo en français, et ils sont donc tous en anglais : « 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. » et « GoCardless mandate lost ».

Que faire

Avant de demander un nouveau mandat, comprenez pourquoi il a été annulé. Un client qui a cessé de vouloir le service a besoin d'une résiliation, pas d'une nouvelle signature. Si c'était une erreur de sa part ou un changement de sa banque, demandez-lui de signer à nouveau et encaissez avec le nouveau mandat les factures restées ouvertes. S'il affirme n'avoir jamais autorisé le prélèvement, vérifiez comment le mandat a été signé avant de continuer à l'encaisser.

Peut-on relancer un paiement avec MD01 ?

Non. Le mandat n'existe plus pour sa banque, et avec le mandat archivé le bouton « Retry collection » n'apparaît pas sur la transaction. Il faut un nouveau mandat signé par le client.

Schéma : ce que GoCardless envoie avec MD01 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.

Avec notre connecteur

Sur Odoo 17, 18, 19 et 20, le connecteur distingue l'échec du rejet, rouvre la facture si nécessaire, retire le mandat et vous laisse la tâche de contacter le client sur sa fiche. Ce qu'il ne fait pas, c'est demander le nouveau mandat à votre place : cette discussion vous revient.

À lire aussi

GoCardless MD06 : le client demande à sa banque de rembourser un encaissementLe client demande à sa banque de rembourser un prélèvement GoCardless : charged_back, refund_requested et MD06. Effets dans Odoo sur la facture et le mandat.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.GoCardless bank_account_closed : AC04 et MD07, le compte n'existe plusGoCardless bank_account_closed avec AC04 (compte clôturé) ou MD07 (titulaire décédé) : le mandat est annulé. Ce que fait Odoo avec la facture et le client.
Vérifié dans le code du connecteur (version 17.0, 18.0, 19.0 et 20.0) et dans les sources citées

Sources

  • Code du module : flexigo_payment_gocardless: const.py, ligne 15 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 442 en 17.0 (d203ee6), ligne 442 en 18.0 (e2ab18b), ligne 441 en 19.0 (ce7f5a3) et ligne 456 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: const.py, ligne 76 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: const.py, ligne 71 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 725 en 17.0 (d203ee6), ligne 725 en 18.0 (e2ab18b), ligne 724 en 19.0 (ce7f5a3) et ligne 748 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 713 en 17.0 (d203ee6), ligne 713 en 18.0 (e2ab18b), ligne 712 en 19.0 (ce7f5a3) et ligne 736 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 754 en 17.0 (d203ee6), ligne 754 en 18.0 (e2ab18b), ligne 753 en 19.0 (ce7f5a3) et ligne 777 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 131 en 17.0 (d203ee6), ligne 131 en 18.0 (e2ab18b), ligne 131 en 19.0 (ce7f5a3) et ligne 130 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 83 en 17.0 (d203ee6), ligne 83 en 18.0 (e2ab18b), ligne 83 en 19.0 (ce7f5a3) et ligne 82 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 436 en 17.0 (d203ee6), ligne 436 en 18.0 (e2ab18b), ligne 436 en 19.0 (ce7f5a3) et ligne 438 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 529 en 17.0 (d203ee6), ligne 529 en 18.0 (e2ab18b), ligne 529 en 19.0 (ce7f5a3) et ligne 531 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1148 en 17.0 (d203ee6), ligne 1148 en 18.0 (e2ab18b), ligne 1148 en 19.0 (ce7f5a3) et ligne 1155 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 495 en 17.0 (d203ee6), ligne 495 en 18.0 (e2ab18b), ligne 495 en 19.0 (ce7f5a3) et ligne 497 en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Code du module : flexigo_payment_gocardless: __manifest__.py, ligne 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/payment
  • Code du module : flexigo_payment_gocardless: views/payment_transaction_views.xml, ligne 13 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 63 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 418 en 17.0 (d203ee6), ligne 418 en 18.0 (e2ab18b), ligne 417 en 19.0 (ce7f5a3) et ligne 432 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1016 en 17.0 (d203ee6), ligne 1016 en 18.0 (e2ab18b), ligne 1016 en 19.0 (ce7f5a3) et ligne 1031 en 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/fr.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