Saltar para o conteúdo principal
GoCardless · SEPA Core · pagamento falhado

GoCardless refer_to_payer: MS02, MS03, RR04 e SL01 numa cobrança SEPA

Com refer_to_payer, a GoCardless indica que o problema está do lado do pagador e que é preciso falar com ele. No SEPA Core, a causa chega com um de quatro códigos: MS02 se o cliente recusou a cobrança, MS03 ou RR04 se o banco não explica o motivo e SL01 se a sua conta limita os débitos diretos.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 6 de novembro de 2026

O essencial

Módulo
GoCardless
Versões
Odoo 17, 18, 19 e 20
Verificado
no código do conector, versão 17.0, 18.0, 19.0 e 20.0 · nas fontes indicadas no fim
Leitura
5 min

Uma causa, quatro códigos

Código SEPA CoreTexto da 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.

As três linhas vêm da tabela de falhas de pagamento (payments · failed) da documentação da GoCardless para o SEPA Core. Ao contrário de outras causas, nenhuma indica que o mandato seja cancelado: o cliente continua autorizado a ser cobrado, embora este débito concreto não tenha passado.

Cartão da causa refer_to_payer da GoCardless
A causa, os seus quatro códigos SEPA Core e o texto da GoCardless para MS02.

O que está por detrás de cada código

MS02 é a resposta mais clara: o cliente disse ao seu banco que não pagasse aquele recibo. O conector anota no seu código que é a combinação que viu num pagamento SEPA de teste do sandbox da GoCardless. MS03 e RR04 são o contrário: o pagamento falha e o banco não dá o motivo, normalmente por razões regulamentares, por isso a única forma de saber o que se passa é perguntar ao cliente. SL01 aponta para a conta: o banco limita os débitos diretos que lhe podem ser cobrados, e só o titular o pode alterar junto do seu banco.

Com MS02, RR04 e SL01, voltar a apresentar o débito sem falar antes com o cliente costuma acabar da mesma forma e pode custar outra comissão. MS03 tem uma exceção: segundo o guia do Success+, na Áustria, Bélgica, Alemanha, Luxemburgo e Eslováquia o MS03 conta como falta de fundos, e o Success+ pode tentar novamente. Se for esse o caso, o evento chega com will_attempt_retry a true.

O que faz o Odoo com o conector

A transação abre-se a partir da fatura, com o botão «Transação de Pagamento» no topo; o menu de transações só aparece em modo de programador, e no Odoo 20 não existe. O conector guarda a causa no campo «Causa segundo a GoCardless», não o código SEPA, e mostra «A GoCardless não conseguiu cobrar este pagamento (refer_to_payer).». Depois segue o que disser o evento:

  • Se will_attempt_retry vier a true, a transação fica «Pendente», a caixa «O Success+ vai tentar novamente» é marcada e a mensagem diz: «O Success+ vai tentar novamente de forma automática; não é preciso fazer nada.». O botão de nova tentativa não aparece.
  • Caso contrário, a transação passa a «Erro» e aparece o botão «Tentar cobrar novamente», se ainda houver tentativas. Se o Odoo já tivesse dado a cobrança como feita, o conector anula o seu pagamento e a fatura volta a estar pendente de cobrança.
  • O mandato não é alterado. refer_to_payer não está entre as causas com as quais o conector arquiva um mandato, por isso o método de pagamento do cliente continua disponível para a próxima cobrança.

Este último ponto é deliberado: arquivar o mandato por uma recusa pontual obrigaria o cliente a assinar outro sem motivo.

As duas mensagens são escritas pelo conector ao aplicar o evento, sem ninguém presente. Numa base de dados criada em português aparecem em português; numa criada em inglês e depois passada para português aparecem em inglês: «GoCardless could not collect this payment (refer_to_payer).» e «Success+ will retry it automatically; there is nothing to do.».

O que fazer conforme o código

O Odoo não diz qual dos quatro códigos chegou: o conector só guarda a causa. O código vê-o na GoCardless. Segundo o seu centro de ajuda, o motivo de cada falha aparece na cronologia do pagamento, no Dashboard («You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.»). No modo avançado, o código exato também vem no evento (details.reason_code), e o Dashboard guarda os envios dos últimos 3 meses em Developers > Webhooks, com o seu conteúdo.

CódigoPrimeiro passo
MS02Pergunte ao cliente porque recusou o recibo: montante, data ou desacordo com a fatura.
MS03Veja «O Success+ vai tentar novamente»: na Áustria, Bélgica, Alemanha, Luxemburgo e Eslováquia, o Success+ pode tentar novamente o MS03 como falta de fundos. Se não estiver marcada, peça ao cliente que consulte o seu banco.
RR04Peça ao cliente que consulte o seu banco: a GoCardless não recebe o motivo.
SL01O cliente tem de levantar a limitação de débitos da sua conta, ou dar-lhe outra.

Quando o cliente confirmar que a cobrança vai passar, use «Tentar cobrar novamente» na transação e confirme o aviso da comissão. O conector responde «Nova tentativa pedida. A GoCardless vai confirmar a nova data de débito.» e deixa-a pendente. Lembre-se do limite: um pagamento pode ser repetido no máximo 3 vezes («Payments can be retried up to 3 times.»).

O mandato é cancelado se o cliente recusar uma cobrança?

Não. Nem a documentação da GoCardless o indica para esta causa nem o conector arquiva o mandato com refer_to_payer. Se o cliente quiser deixar de lhe pagar por débito direto, cancelará o mandato no seu banco, e isso chega com outra causa, mandate_cancelled.

Esquema: o que a GoCardless envia com refer_to_payer e o que o Odoo faz com o conector
Esquema feito a partir do código do conector (17.0, 18.0, 19.0 e 20.0) e da documentação da GoCardless; o que está riscado é o que o conector não faz com esta causa.

Com o nosso conector

No Odoo 17, 18, 19 e 20 o conector transforma refer_to_payer numa fatura pendente com a causa à vista e um mandato que continua válido. Não adivinha o código SEPA: o Odoo guarda a causa na transação, e o código consulta-o na GoCardless. A decisão de voltar a cobrar é sua, depois de falar com o cliente.

Continue a ler

GoCardless insufficient_funds (AM04): a conta do cliente não tinha saldoUm débito da GoCardless falha com insufficient_funds e o código SEPA AM04. O que significa, quando o Success+ o volta a tentar e o que o Odoo faz à fatura.GoCardless MD01: mandate_cancelled e authorisation_disputed num débito SEPAO código SEPA MD01 chega na GoCardless como mandate_cancelled ou authorisation_disputed, num débito falhado, devolvido ou cancelado. O que o Odoo faz com ele.Erro retry_failed da GoCardless ao tentar cobrar novamente a partir do OdooA GoCardless responde retry_failed se o pagamento não falhou ou já não admite novas tentativas. Eis quando surge o botão «Tentar cobrar novamente» no Odoo.
Verificado no código do conector (versão 17.0, 18.0, 19.0 e 20.0) e nas fontes indicadas

Fontes

  • docs.gocardless.com/docs/api-reference/events/payment
  • docs.gocardless.com/docs/api-reference/payment
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 15 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 79 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 76 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 71 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 725 em 17.0 (d203ee6), linha 725 em 18.0 (e2ab18b), linha 724 em 19.0 (ce7f5a3) e linha 748 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 729 em 17.0 (d203ee6), linha 729 em 18.0 (e2ab18b), linha 728 em 19.0 (ce7f5a3) e linha 752 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 754 em 17.0 (d203ee6), linha 754 em 18.0 (e2ab18b), linha 753 em 19.0 (ce7f5a3) e linha 777 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 122 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, linha 13 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 462 em 17.0 (d203ee6), linha 462 em 18.0 (e2ab18b), linha 462 em 19.0 (ce7f5a3) e linha 468 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 377 em 17.0 (d203ee6), linha 377 em 18.0 (e2ab18b), linha 377 em 19.0 (ce7f5a3) e linha 383 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1091 em 17.0 (d203ee6), linha 1091 em 18.0 (e2ab18b), linha 1091 em 19.0 (ce7f5a3) e linha 1113 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1097 em 17.0 (d203ee6), linha 1097 em 18.0 (e2ab18b), linha 1097 em 19.0 (ce7f5a3) e linha 1119 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: __manifest__.py, linha 31 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 63 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 418 em 17.0 (d203ee6), linha 418 em 18.0 (e2ab18b), linha 417 em 19.0 (ce7f5a3) e linha 432 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, linha 27 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pt.po
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1164 em 17.0 (d203ee6), linha 1164 em 18.0 (e2ab18b), linha 1164 em 19.0 (ce7f5a3) e linha 1176 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1142 em 17.0 (d203ee6), linha 1142 em 18.0 (e2ab18b), linha 1142 em 19.0 (ce7f5a3) e linha 1154 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 617 em 17.0 (d203ee6), linha 617 em 18.0 (e2ab18b), linha 617 em 19.0 (ce7f5a3) e linha 623 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 461 em 17.0 (d203ee6), linha 461 em 18.0 (e2ab18b), linha 460 em 19.0 (ce7f5a3) e linha 479 em 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
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 66 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml