Boa tarde pessoal !
Hoje fiz vários testes no componente do WS para Caixa Federal, me deparei com alguns problemas na unit ACBrBoletoW_Caixa, fiz uma correção e estou anexando a unit, especificando aqui:
O campo NossoNumero é formatado com 17 dígitos, sempre iniciando por '14', para resolver coloquei assim: '14' + ACBrUtil.PadLeft(NossoNumero, 15, '0') em todos os lugares onde aparece io
Na função GerarAutenticacao, não estava gerando o HASH corretamente por 3 motivos:
Nosso número, corrigido com a solução anterior
O valor estava sem formatação, ocasionado divergencia no hash também, exemplo, boleto de R$ 10,00 estava passando para montagem do hash como 10, correto seria 1000, resolvido assim: FormatFloat('#0.00', Valor)
No Result também estava gerando o HASH errado
antes: Result := AsciiToHex(SHA1(sAutenticacao))
Depois: Result := TNetEncoding.Base64.EncodeBytesToString(GetStrHashSHA256(trim(sAutenticacao)));
Adicionando também a função GetStrHashSHA256 para geração do HASH e depois convertendo para BASE64
função a seguir adicionada:
function TBoletoW_Caixa.GetStrHashSHA256(Str: String): TBytes;
var
HashSHA: THashSHA2;
begin
HashSHA := THashSHA2.Create;
result := HashSHA.GetHashBytes(Str,SHA256);
end;
Somente após as alterações consegui gerar boleto em produção, fiz vários testes e gerei 20 boletos e todos registrados.
Espero ter colaborado, em aenxo unit para análise.
ACBrBoletoW_Caixa.pas