Ir para conteúdo
  • Cadastre-se

dev botao

Validar DigestValue


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

Recommended Posts

  • 3 semanas depois ...

Olá de novo,

eu não sei se vocês tiveram o mesmo problema, mas as assinaturas de algumas notas que apresentavam acentos não estavam sendo validadas corretamente.

Para resolver essa questão, em relação à última postagem fiz a seguinte alteração em azul:

2. A function LoadFromFile da Unit ACBrNFeNotasFiscais ficou assim:

function TNotasFiscais.LoadFromFile(CaminhoArquivo: string): boolean;

var

LocNFeR : TNFeR;

ArquivoXML: TStringList;

XML : AnsiString;

XMLInalterado : AnsiString;

begin

try

ArquivoXML := TStringList.Create;

ArquivoXML.LoadFromFile(CaminhoArquivo, TEncoding.UTF8);

XMLInalterado := ArquivoXML.Text;

Result := True;

while pos('',ArquivoXML.Text) > 0 do

begin

if pos('',ArquivoXML.Text) > 0 then

begin

XML := copy(ArquivoXML.Text,1,pos('',ArquivoXML.Text)+5);

ArquivoXML.Text := Trim(copy(ArquivoXML.Text,pos('',ArquivoXML.Text)+10,length(ArquivoXML.Text)));

end

else

begin

XML := copy(ArquivoXML.Text,1,pos('',ArquivoXML.Text)+5);

ArquivoXML.Text := Trim(copy(ArquivoXML.Text,pos('',ArquivoXML.Text)+6,length(ArquivoXML.Text)));

end;

LocNFeR := TNFeR.Create(Self.Add.NFe);

try

LocNFeR.Leitor.Arquivo := XML;

LocNFeR.LerXml;

Items[self.Count-1].XML := LocNFeR.Leitor.Arquivo;

Items[self.Count-1].XMLInalterado := XMLInalterado;

Items[self.Count-1].NomeArq := CaminhoArquivo;

GerarNFe;

finally

LocNFeR.Free;

end;

end;

ArquivoXML.Free;

except

raise;

Result := False;

end;

end;

Grato

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...

Galera, ainda hoje não consigo validar xml de fornecedores, alguém tem alguma posição a respeito disso?

 

quando valido o xml através do validador da RS ocorre tudo ok, mas, pelo ACBr não consigo realizar esta validação.

 

Ainda recebo a mensagem:

 

 
 

 

Erro ao verificar assinatura do arquivo: The digest value computed does not match with the provided one for Reference uri '#NFe00000000000000000000000000000059411000058202'

 

 

Percebi que em arquivos que contenham quebra de linhas na tag "X509Certificate" não é possível fazer a validação. talvez o problema esteja alí

Editado por markapollo

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O código de validação do Schema é feito pela Capicom ou pela XMLSec (OpenSSL)...

 

é quase impossível encontrar o problema em bibliotecas complexas como esta...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
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

  • 2 meses depois ...

Galera, finalmente consegui, mas, acho que foi meio que no "POG":

 

Fiz uma DLL em C# com o código validador e chamo a função pelo delphi, agora valido tanto o NFe quanto o CTe!

 

Cara, por favor, tem como me passar essa DLL que você fez em C# ?

 

Estou tendo o mesmo problema... as notas que tem quebra de linha na tag X509Certificate não valida a assinatura... mas pelo validador do RS valida normal!

Link para o comentário
Compartilhar em outros sites

Cara, por favor, tem como me passar essa DLL que você fez em C# ?

 

Estou tendo o mesmo problema... as notas que tem quebra de linha na tag X509Certificate não valida a assinatura... mas pelo validador do RS valida normal!

 

Segue em anexo a dll, para funcionar, o arquivo pas deverá ser adicionado ao projeto e, na unit da validação, adicionar "DllCampo_TLB" no uses.

 

 
procedure TProcessaNFe.ValidarXML(Cd_Empresa, Cd_XML: Integer);
var
  Msg, NomeArquivo : String;
  ResultadoAssinatura,
  ResultadoDigest: Boolean;
  CampoDll: ICampo;
 
  XMLNota: TStrings;
begin
  try
    Msg := EmptyStr;
    ResultadoDigest := False;
    XMLNota := TStringList.Create();
   //obtem uma string com o xml da nota
    XMLNota.Append(ObterDadosXML(Cd_Empresa, Cd_XML));
    ACBrNFe.NotasFiscais.LoadFromString(XMLNota.Text)
    //ACBrNFe.
 
    //ResultadoAssinatura := ACBrNFe.NotasFiscais.ValidaAssinatura(Msg);
    NomeArquivo := 'C:\Temp\'+IntToStr(Cd_XML)+'.xml';
    XMLNota.SaveToFile(NomeArquivo);
 
    CampoDll := CoCampoSolucoes.Create();
    ResultadoAssinatura := CampoDll.ValidarAssinaturaDigNFe(NomeArquivo);
 
    if ResultadoAssinatura then
       //validou o digest
 

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

Segue em anexo a dll, para funcionar, o arquivo pas deverá ser adicionado ao projeto e, na unit da validação, adicionar "DllCampo_TLB" no uses.

Markapollo... acho que faltou o anexo...

Gostaria de te fazer uma proposta... se puder me mandar um email... desde já muito obrigado!

Editado por eamarietti
Link para o comentário
Compartilhar em outros sites

Markapollo... acho que faltou o anexo...

 

Gostaria de te fazer uma proposta... se puder me mandar um email... ([email protected]) ... desde já muito obrigado!

Acho que o anexo foi bloqueado, lembro de tê-lo anexado.

 

acho que foi o antivirus que bloqueou, por ter .bat

 

renomeei a extensão, vamos ver se vai

Editado por markapollo

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Conforme solicitado.

Segue arquivo com as modificações.

Ricardo

Peguei o seu arquivo que subiu em anexo e deu erro em outras partes, ajustei somente criando o campo XMLInalteradocomo vc sugeriu ai funcionou, a validação, coloquei também a sugestão do amigo, TEncoding.UTF8);

 

Obs: Segue então o anexo o arquivo que ajustei, o Regys poderia dar uma olhada e colocar no svn se de fato for a melhor sugestão.

ACBrNFeNotasFiscais.pas

Editado por Eliomar0910
  • Curtir 1

Atenciosamente.

Eliomar.

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Boa tarde,

gostaria de saber o motivo de esta alteração ainda não ter sido atualizada no SVN.

O sistema de recebimento que desenvolvi utilizando o ACBr já funciona há mais de 1 ano e seu comportamento é idêntico ao Visualizador de documentos da SEFAZ.

MarkApollo, eu uso os componentes Capicom para validar assinatura e nunca tive problema com relação a haver quebras de linha tanto no campo SignatureValue quanto no campo X509Certificate. Posso garantir que o bug não está nas dlls do capicom.

 

A função de ValidarAssinatura normalmente não é utilizada no desenvolvimento dos softwares de Emissão, então suponho que esta alteração não influenciará no funcionamento dos softwares já implementados com o ACBr.

 

Esse sítio me ajudou muito a entender como funciona a assinatura digital em arquivos xml:

http://www.di-mgt.com.au/xmldsig2.html

 

O arquivo que o Eliomar anexou está modificado exatamente do jeito que eu descrevi.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Favor atualizar o SVN e testar 

At revision: 5488

 

Como temos que manter compatibilidade foi necessário adicionar diretivas de compilação para que ele ficasse compatível com versões anterior do delphi e lazarus

Reporte aqui caso tenha algum problema com a correção

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...
  • Moderadores
Em 6/20/2013 at 17:39, Juliomar Marchetti disse:

Favor atualizar o SVN e testar 

At revision: 5488

 

Como temos que manter compatibilidade foi necessário adicionar diretivas de compilação para que ele ficasse compatível com versões anterior do delphi e lazarus

Reporte aqui caso tenha algum problema com a correção

 

1 hora atrás, suporteagro disse:

Boa tarde a todos.

 

Alguém poderia me informar se o problema deste tópico foi solucionado ?

Acabei de atualizar para a última versão (12969), fiz um teste com uma nota válida e VerificarAssinatura retorna erro na validação.

 

Obrigado.

Gabriel

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2611 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.

The popup will be closed in 10 segundos...