Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

Bom dia, pessoal!

Estou em processo de homologação de cobrança com o Banco Safra (API REST, carteira eletrônica) e, durante os testes, me deparei com dois problemas no fluxo de envio e consulta de boletos.

O suporte de homologação do Safra confirmou que o conteúdo enviado pelo componente estava divergente do formato esperado por eles. Foi necessário ajustar a unit ACBrBoletoW_Safra.pas em dois pontos para que tanto o registro quanto a consulta funcionem corretamente.

---

## Problema 1 — POST de registro enviava conta sem dígito verificador em homologação

O método RequisicaoJson montava o campo conta de forma diferente entre os ambientes: em produção, ContaDigito era concatenado ao número da conta; em homologação, era omitido.

Trecho original:

LConta := IfThen(Boleto.Configuracoes.WebService.Ambiente = tawsProducao,
  inttostr(StrToIntDef(aTitulo.ACBrBoleto.Cedente.Conta, 0)) + aTitulo.ACBrBoleto.Cedente.ContaDigito,
  inttostr(StrToIntDef(aTitulo.ACBrBoleto.Cedente.Conta, 0)));

O efeito era que, em homologação, o JSON enviado continha o número da conta sem o dígito verificador, e o banco gerava um código de barras inconsistente com o que ele próprio esperava no checklist de validação.

O suporte confirmou que o campo conta deve conter número + DV nos dois ambientes. A correção foi remover o IfThen e sempre concatenar o ContaDigito:

LConta := inttostr(StrToIntDef(aTitulo.ACBrBoleto.Cedente.Conta, 0)) + aTitulo.ACBrBoleto.Cedente.ContaDigito;

Após essa alteração, o POST passou a registrar com sucesso e o banco gerou código de barras e linha digitável corretos.

---

## Problema 2 — GET de consulta não localizava o boleto recém-registrado

Logo após o registro bem-sucedido, o componente faz uma consulta no endpoint GET /boletos para confirmar o estado do título. A função DefinirParametros montava a query string lendo apenas Cedente.Conta, sem o ContaDigito:

LConta := aTitulo.ACBrBoleto.Cedente.Conta;
...
Consulta.Add('conta=' + LConta);

Como o POST registra com conta + DV (após o fix do Problema 1), mas a consulta enviava só o número da conta sem o DV, o banco não encontrava o registro e respondia com 503 Service Unavailable e a mensagem genérica "Ocorreu um erro na requisição".

Foi necessário aplicar a mesma serialização do POST também na consulta:

LConta := IntToStr(StrToIntDef(aTitulo.ACBrBoleto.Cedente.Conta, 0)) + aTitulo.ACBrBoleto.Cedente.ContaDigito;

Com isso, o valor enviado na URL bate exatamente com o que o banco recebeu e armazenou no POST, e a consulta passa a retornar o título normalmente.

---

## Como reproduzir

1. Configure uma conta Safra em homologação com Cedente.Conta e Cedente.ContaDigito separados.
2. Registre um boleto via Boleto.EnviarBoleto.
3. Em seguida, execute ConsultarBoletos.

Segue arquivo com as modificações  incluindo as modificações do post :

ACBrBoletoW_Safra.pas

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...