Aller au contenu principal
GoCardless · SEPA Core · paiement échoué

GoCardless refer_to_payer : MS02, MS03, RR04 et SL01 sur un prélèvement SEPA

Avec refer_to_payer, GoCardless indique que le problème vient du côté du payeur et qu'il faut lui en parler. En SEPA Core, la cause arrive avec l'un de quatre codes : MS02 si le client a refusé le prélèvement, MS03 ou RR04 si la banque n'explique pas le motif et SL01 si son compte limite les prélèvements.

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

Une cause, quatre codes

Code SEPA CoreTexte de GoCardless
MS02The customer refused to accept this payment.
MS03, RR04The payment failed but the reason for the failure was not provided, usually for regulatory reasons.
SL01The payment failed due to a restriction on Direct Debit payments from the payer's bank account.

Les trois lignes proviennent du tableau des échecs de paiement (payments · failed) de la documentation GoCardless pour SEPA Core. Contrairement à d'autres causes, aucune ne dit que le mandat est annulé : le client vous autorise toujours à le prélever, même si ce prélèvement précis n'a pas abouti.

Fiche de la cause refer_to_payer de GoCardless
La cause, ses quatre codes SEPA Core et le texte de GoCardless pour MS02.

Ce qui se cache derrière chaque code

MS02 est la réponse la plus claire : le client a demandé à sa banque de ne pas payer cette échéance. Le connecteur indique dans son code qu'il s'agit de la combinaison observée sur un paiement SEPA de test dans le sandbox de GoCardless. MS03 et RR04 sont l'inverse : le paiement échoue et la banque ne donne pas le motif, généralement pour des raisons réglementaires, donc la seule façon de savoir ce qui se passe est de demander au client. SL01 concerne le compte : sa banque limite les prélèvements qui peuvent y être effectués, et seul le titulaire peut modifier cela auprès de sa banque.

Avec MS02, RR04 et SL01, représenter le prélèvement sans avoir d'abord parlé au client aboutit généralement au même échec et peut entraîner des frais supplémentaires. MS03 fait exception : selon le guide de Success+, en Autriche, en Belgique, en Allemagne, au Luxembourg et en Slovaquie, MS03 est considéré comme une insuffisance de provision, et Success+ peut le relancer. Dans ce cas, l'événement arrive avec will_attempt_retry à true.

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. Le connecteur enregistre la cause dans le champ « GoCardless Cause », et non le code SEPA, et affiche « GoCardless could not collect this payment (refer_to_payer). ». Ensuite, la suite dépend de l'événement :

  • Si will_attempt_retry vaut true, la transaction passe à « En attente », la case « Success+ Will Retry » est cochée et le message indique « Success+ will retry it automatically; there is nothing to do. ». Le bouton de relance n'apparaît pas.
  • Sinon, la transaction passe à « Erreur » et le bouton « Retry collection » apparaît, s'il reste des tentatives. Si Odoo considérait déjà le paiement comme encaissé, le connecteur annule son paiement et la facture redevient à encaisser.
  • Le mandat n'est pas modifié. refer_to_payer ne fait pas partie des causes pour lesquelles le connecteur archive un mandat, donc le mode de paiement du client reste disponible pour la prochaine échéance.

Ce dernier point est volontaire : archiver le mandat pour un rejet ponctuel obligerait le client à en signer un nouveau sans raison.

Les deux messages sont écrits par le connecteur lors de l'application de l'événement, sans intervention humaine. Le connecteur n'est pas traduit en français : ces messages apparaissent toujours en anglais, y compris dans une base Odoo en français : « GoCardless could not collect this payment (refer_to_payer). » et « Success+ will retry it automatically; there is nothing to do. ».

Quoi faire selon le code

Odoo ne vous indique pas lequel des quatre codes est arrivé : le connecteur enregistre seulement la cause. Vous voyez le code dans GoCardless. D'après leur centre d'aide, le motif de chaque échec figure dans la chronologie du paiement, sur le tableau de bord (« You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard. »). En mode avancé, le code exact figure aussi dans l'événement (details.reason_code), et le tableau de bord conserve les envois des 3 derniers mois dans Developers > Webhooks, avec leur contenu.

CodePremière étape
MS02Demandez au client pourquoi il a refusé l'échéance : montant, date ou désaccord avec la facture.
MS03Vérifiez « Success+ Will Retry » : en Autriche, en Belgique, en Allemagne, au Luxembourg et en Slovaquie, Success+ peut relancer MS03 comme insuffisance de provision. Si la case n'est pas cochée, demandez au client de contacter sa banque.
RR04Demandez au client de contacter sa banque : GoCardless ne reçoit pas le motif.
SL01Le client doit lever la limitation des prélèvements sur son compte, ou vous en communiquer un autre.

Lorsque le client confirme que le prélèvement pourra passer, utilisez « Retry collection » sur la transaction et confirmez l'avertissement concernant les frais. Le connecteur répond « Retry requested. GoCardless will confirm the new charge date. » et la laisse en attente. N'oubliez pas la limite : un paiement peut être relancé au maximum 3 fois (« Payments can be retried up to 3 times. »).

Le mandat est-il annulé si le client rejette un prélèvement ?

Non. La documentation GoCardless ne le prévoit pas pour cette cause, et le connecteur n'archive pas le mandat avec refer_to_payer. Si le client veut arrêter de vous payer par prélèvement, il annulera le mandat auprès de sa banque, et cela arrive avec une autre cause, mandate_cancelled.

Schéma : ce qu'envoie GoCardless avec refer_to_payer 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 GoCardless ; ce qui est barré est ce que le connecteur ne fait pas avec cette cause.

Avec notre connecteur

Dans Odoo 17, 18, 19 et 20, le connecteur transforme refer_to_payer en facture à encaisser, avec la cause visible et un mandat toujours valable. Il ne devine pas le code SEPA : Odoo enregistre la cause dans la transaction, et vous consultez le code dans GoCardless. La décision de relancer le prélèvement vous appartient, après avoir parlé au client.

À lire aussi

GoCardless insufficient_funds (AM04) : le compte du client ne disposait pas de soldeUn prélèvement GoCardless échoue avec insufficient_funds et le code SEPA AM04. Ce qu'il signifie, quand Success+ le retente et ce que fait Odoo avec la facture.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 retry_failed de GoCardless lors d'une nouvelle tentative de prélèvement depuis OdooGoCardless répond retry_failed si le paiement n'a pas échoué ou n'admet plus de relance. Quand Odoo montre « Retry collection » et ce que fait le connecteur.
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/events/payment
  • docs.gocardless.com/docs/api-reference/payment
  • 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: const.py, ligne 79 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 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 729 en 17.0 (d203ee6), ligne 729 en 18.0 (e2ab18b), ligne 728 en 19.0 (ce7f5a3) et ligne 752 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: const.py, ligne 122 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • 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: 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 356 en 17.0 (d203ee6), ligne 356 en 18.0 (e2ab18b), ligne 356 en 19.0 (ce7f5a3) et ligne 358 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)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1022 en 17.0 (d203ee6), ligne 1022 en 18.0 (e2ab18b), ligne 1022 en 19.0 (ce7f5a3) et ligne 1037 en 20.0 (688d86b)
  • 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/optimise/reduced-failed-payments-with-success-plus
  • 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: views/payment_transaction_views.xml, ligne 27 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/fr.po
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1083 en 17.0 (d203ee6), ligne 1083 en 18.0 (e2ab18b), ligne 1083 en 19.0 (ce7f5a3) et ligne 1090 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1063 en 17.0 (d203ee6), ligne 1063 en 18.0 (e2ab18b), ligne 1063 en 19.0 (ce7f5a3) et ligne 1070 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 567 en 17.0 (d203ee6), ligne 567 en 18.0 (e2ab18b), ligne 567 en 19.0 (ce7f5a3) et ligne 569 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 461 en 17.0 (d203ee6), ligne 461 en 18.0 (e2ab18b), ligne 460 en 19.0 (ce7f5a3) et ligne 479 en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/webhooks
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • support.gocardless.com/hc/en-gb/articles/360001467265
  • Code du module : flexigo_payment_gocardless: const.py, ligne 66 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