Ce que dit GoCardless
| Événement | Codes | Texte de GoCardless |
|---|---|---|
| payments · failed | AC01, BE06 | The bank account specified does not exist. The mandate will also be cancelled. |
| mandates · failed | AC01 | The bank account specified does not exist. Any subscriptions and pending payments will also be cancelled. |
| mandates · cancelled | AC01, BE06 | The bank account specified does not exist. Any subscriptions and pending payments will also be cancelled. |

Quand cela arrive
Cela dépend du moment où la banque le découvre. Si elle rejette le mandat lors de sa création, GoCardless le marque comme échoué (mandates · failed) et rien n'est jamais prélevé. Si le mandat était déjà actif et que le premier prélèvement est rejeté avec AC01 ou BE06, le paiement échoue et GoCardless annule le mandat (mandates · cancelled), ainsi que les paiements en attente de ce mandat.
Dans les deux cas, la solution est la même : le client doit signer à nouveau avec un compte existant.
Ce que fait Odoo avec le connecteur
Le connecteur réagit séparément à chaque événement, et il est utile de savoir ce que fait chacun :
- Le paiement échoué fait passer la transaction en erreur avec « GoCardless could not collect this payment (invalid_bank_details). ». Si la facture était déjà payée avec ce prélèvement, il annule le paiement et la facture redevient à payer.
- L'événement du mandat, échoué ou annulé, est celui qui le retire : le connecteur considère les mandats dans ces états comme morts, archive le mode de paiement, écrit sur la fiche du client que le mandat ne peut plus être utilisé et crée l'activité « GoCardless mandate lost ».
Ces textes 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 textes sortent toujours en anglais, « GoCardless could not collect this payment (invalid_bank_details). » et « GoCardless mandate lost ».
Le paiement échoué seul n'archive pas le mandat : invalid_bank_details ne fait pas partie des quatre causes pour lesquelles le connecteur le fait à la réception d'un paiement. Ce sont les événements du mandat, que GoCardless envoie toujours dans ce cas, qui l'archivent. Si l'un d'eux se perdait en route, la tâche qui récupère chaque heure les événements manqués s'en chargerait.
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. Tant que le mandat n'est pas archivé dans Odoo, la transaction en erreur affiche le bouton « Retry collection », mais il ne sert à rien. GoCardless ne réessaie un paiement que si son mandat est actif, et avec AC01 ou BE06 il l'annule. Si vous le cliquez et que GoCardless le refuse, le connecteur consulte le mandat et, s'il est mort, l'archive et l'indique dans la transaction : « The customer's GoCardless mandate is …, so it cannot be charged. Ask the customer for a new mandate. ». Une fois le mandat archivé, le bouton n'apparaît plus.
Que faire
- Vérifiez avec le client l'IBAN complet : un seul chiffre modifié suffit pour que le compte n'existe pas.
- Demandez-lui de signer un nouveau mandat avec le bon compte. Ce sera un nouveau mode de paiement dans Odoo.
- Encaissez avec lui les factures restées en attente ; celles que GoCardless a annulées ne se représenteront pas seules.
- Si le client assure que l'IBAN était correct, qu'il vérifie auprès de sa banque : AC01 et BE06 sont la réponse de sa banque, pas de GoCardless. Dans Odoo, vous ne verrez que la cause, car le connecteur ne conserve pas le code SEPA. Selon le centre d'aide de GoCardless, le motif de chaque échec apparaît dans la chronologie du paiement, sur le Dashboard (« You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard. »).

Pourquoi y a-t-il deux codes, AC01 et BE06 ?
GoCardless regroupe les deux sous la même cause et le même texte pour SEPA Core. Pour vous, la conséquence est identique : avec ce compte, aucun prélèvement n'est possible, et une nouvelle signature est nécessaire.
Peut-on corriger l'IBAN du mandat dans Odoo ?
Non. Le mandat est l'autorisation que le client a signée avec ce compte ; le bon compte doit figurer sur un nouveau mandat.
Avec notre connecteur
Dans Odoo 17, 18, 19 et 20, le connecteur ne laisse pas un mandat inutilisable à la vue pour la facture suivante : il le retire lorsque GoCardless le considère comme échoué ou annulé, rouvre ce qui doit l'être et consigne sur la fiche du client ce qui s'est passé.
À lire aussi
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: 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 33 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 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: 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_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 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 117 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: 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 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)
- 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
- docs.gocardless.com/docs/api-reference/events/mandate
- 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)
- docs.gocardless.com/docs/api-reference/payment
- Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 469 en 17.0 (d203ee6), ligne 469 en 18.0 (e2ab18b), ligne 468 en 19.0 (ce7f5a3) et ligne 487 en 20.0 (688d86b)
- Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1233 en 17.0 (d203ee6), ligne 1233 en 18.0 (e2ab18b), ligne 1233 en 19.0 (ce7f5a3) et ligne 1240 en 20.0 (688d86b)
- 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
