João Vitor Bogo Postado 4 Maio Postado 4 Maio 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
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora