Ir para conteúdo
  • Cadastre-se

dev botao

Ajustes ACBrBoletoW_Itau


BrunoD
  • Este tópico foi criado há 1150 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá,

Estou realizando a homologação com o Banco Itaú via API. E gostaria de compartilhar alguns ajustes que estão sendo necessários.

 

  1. Erro - conta cedente invalida - Segundo o manual a conta do cedente deve possuir 7 dígitos, caso o tamanho do número da conta utilizada for menor que  7 deve completar com zeros a esquerda utilizada a função PadLeft da ACBrUtil. 
  2. A API retorna erros de validação na seção Sacador Avalista mesmo não sendo informado nenhum sacador avalista no componente - a seção sacador avalista do JSON só deve ser gerada caso exista um sacador avalista no componente - segundo o manual esta seção é opcional.
  3. A API retorna erros de validação na seção Debito - Aplicada a mesma correção do item anterior.
  4. Na seção Recebimento Divergente o índice do componente começa com zero e o da API começa com 1. 

Segue em anexo unit ACBrBoletoW_Itau com ajustes realizados.

ACBrBoletoW_Itau.pas

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde, obrigado pela contribuição...

Por aqui realmente não conseguimos realizar o processo completo devido a necessidade de TokenID válido. Se conseguir realizar toda a homologação e puder nos informar nós agradecemos.

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

 

Boa tarde @José M. S. Junior,

Possíveis correções a Unit ACBrBoletoW_Itau.

Referente a procedure GerarMulta.

          if DataMulta > 0 then
          begin
            JsonMulta.Add('data_multa').Value.AsString := FormatDateTime('yyyy-mm-dd', DataMulta);
            if MultaValorFixo then
              JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(ValorMoraJuros * 100), 17)
            else
              JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(ValorMoraJuros * 100000), 12);

          end;

Fiz a seguinte alteração:

          if DataMulta > 0 then
          begin
            JsonMulta.Add('data_multa').Value.AsString := FormatDateTime('yyyy-mm-dd', DataMulta);
            if MultaValorFixo then
              JsonMulta.Add('valor_multa').Value.AsString := IntToStrZero(round(PercentualMulta), 17)
            else
              JsonMulta.Add('percentual_multa').Value.AsString := IntToStrZero(round(PercentualMulta * 100000), 12);

          end;

Fiquei em dúvida se o campo PercentualMulta é o mesmo quando utiliza percentual e valor.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Em 15/01/2021 at 18:11, BrunoD disse:

Fiquei em dúvida se o campo PercentualMulta é o mesmo quando utiliza percentual e valor.

Bom dia, sim é utilizado mesmo...  O que identifica se é em percentual ou valor é a propriedade "MultaValorFixo"

Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Bom dia @José M. S. Junior,

3 horas atrás, José M. S. Junior disse:

Bom dia, sim é utilizado mesmo...  O que identifica se é em percentual ou valor é a propriedade "MultaValorFixo"

Certo, então vou considerar as correções efetuadas como corretas.

Achei outras possíveis correções a Unit ACBrBoletoW_Itau.

Neste trecho  da procedure RequisicaoJson.

Json.Add('nosso_numero').Value.AsString := Copy(NossoNumero, 1, Length(NossoNumero) - 1);
Json.Add('digito_verificador_nosso_numero').Value.AsString := Copy(NossoNumero, Length(NossoNumero) - 1, 1);

Estava retornando erro no dígito verificador do nosso número e o próprio nosso número ia incompleto na requisição. Então realizei a seguinte alteração:

Json.Add('nosso_numero').Value.AsString := NossoNumero;
Json.Add('digito_verificador_nosso_numero').Value.AsString := ACBrBoleto.Banco.CalcularDigitoVerificador(Titulos);

Na unit ACBrBoletoRet_Itau também foram aplicadas mudanças.

Neste trecho da procedure LerRetorno.

if not(SucessResponse) then

O variável SucessResponse é inicializado como false, e nunca é alterada, mesmo a requisição sendo processada corretamente.

A solução básica que encontrei foi verificar se no Json de retorno existe algum código de erro. Caso contrário lê as informações do retorno do JSON.

if (AJson.Values['codigo'].AsString <> '') then
  LerErrosJSON
else
  LerJSONSucesso

Ao aplicar a correção acima ocorreram erros de acess violation na Classe TTituloRet que está dentro de ACBrBoletoRetorno.

Os campos: 

FMensagem: TStrings;
FInformativo: TStrings;
FInstrucoes: TStrings;

Não estavam sendo instanciados no Construtor da Classe:

constructor TTituloRet.Create;
begin
  FSacadoAvalista := TSacadoAvalistaRet.Create;
  FSacado         := TSacadoRet.Create;
end;

Ficou assim: 

constructor TTituloRet.Create;
begin
  FSacadoAvalista := TSacadoAvalistaRet.Create;
  FSacado         := TSacadoRet.Create;
  FMensagem       := TStringList.Create; 
  FInformativo    := TStringList.Create; 
  FInstrucoes     := TStringList.Create;
end;

As mesmas alterações foram também adicionadas ao Destroy da Classe:

destructor TTituloRet.Destroy;
begin
  FSacadoAvalista.Free;
  FSacado.Free;
  FMensagem.Free; 
  FInformativo.Free; 
  FInstrucoes.Free;
  inherited Destroy;
end;

Após essas alterações a leitura de um retorno de sucesso estão sendo lidas corretamente. 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Este tópico foi criado há 1150 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.