Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFe - Rejeição: Assinatura difere do calculado


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

Recommended Posts

  • Consultores

Bom dia Emerson,

Depois do XML ter sido assinado, ele foi alterado e depois enviado?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bom dia Italo.

Não altero o xml apos assinar.

uso na seguinte sequencia:

ACBrNFe1.NotasFiscais.Assinar;

ACBrNFe1.NotasFiscais.Validar;

ACBrNFe1.NotasFiscais.Enviar;

Outro detalhe, tenho esta versão em outro cliente que usa o certificado A3 e funciona perfeitamente.

att.

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

  • Consultores

Emerson,

Será que não é o antivírus que esta alterando o conteúdo do arquivo antes do seu envio?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Olá Italo.

Usando a função verificarassinatura recebi a seguinte mensagem: 'Falha na validação da assinatura da nota: 28046'#$D#$A'Não foi possível carregar ou ler a assinatura.'#$D#$A

Acredito que o componente não esta carregando o certificado A1 usando o capicom, lembrando que se usar o A3 funciona.

Att

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

Boa tarde, aproveitando o topico.

Atualizei o meu acbr para a versão trunk2 e quando vou gerar a nota ele aparece o mesmo erro, no meu caso é A3, voltei a versão que tinha no cliente para uma antes de atualizar o acbr e gerou normalmente.

 

Att

 

João Victor

Link para o comentário
Compartilhar em outros sites

Daniel, debugando vi que ele para no processo abaixo:

 

function TWebServices.Envia(ALote: String; const ASincrono: Boolean): Boolean;
begin
  FEnviar.FLote := ALote;
  FEnviar.FSincrono := ASincrono;

  if not Enviar.Executar then
    Enviar.GerarException( Enviar.Msg );

  if not ASincrono then
  begin
    FRetorno.Recibo := FEnviar.Recibo;
    if not FRetorno.Executar then  >>>>>>>>  Ele para nessa linha
      FRetorno.GerarException( FRetorno.Msg );
  end;

  Result := True;
end;

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Lógico.. essa linha que faz todo o Processo de Envio...

Vamos por partes...

  • Qual é exatamente o erro ?
  • O que é esperado funcionar e o que não funciona ?
  • Como reproduzir o erro usando o Demo do ACBR ?

Sem essas informações fica difícil efetuarmos qualquer analise...

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

  • Fundadores

Não fui capaz de reproduzir o problema... Usando os fontes do Trunk2...  e o WebService de SP, enviando uma NFe

Modifiquei o Demo do ACBr, usando o botão "Criar e Enviar",

Observe no final do bloco abaixo, que usei os mesmos comandos (Assinar e Validar)

Em tempo... "ACBrNFe1.Enviar" já Assina e Valida todas as notas (não precisa chamá-los antes)

procedure TForm1.btnCriarEnviarClick(Sender: TObject);
var
 vAux, vNumLote : String;
begin
  if not(InputQuery('WebServices Enviar', 'Numero da Nota', vAux)) then
    exit;

  if not(InputQuery('WebServices Enviar', 'Numero do Lote', vNumLote)) then
    exit;

  vNumLote := OnlyNumber(vNumLote);

  if Trim(vNumLote) = '' then
   begin
     MessageDlg('Número do Lote inválido.',mtError,[mbok],0);
     exit;
   end;

  ACBrNFe1.NotasFiscais.Clear;

  ACBrNFe1.Configuracoes.Geral.ModeloDF := moNFe;
  ACBrNFe1.Configuracoes.Geral.VersaoDF :=  TpcnVersaoDF(cbVersaoDF.ItemIndex);
  GerarNFe(vAux);

  //ACBrNFe1.NotasFiscais.GerarNFe;

  ACBrNFe1.NotasFiscais.Assinar;
  ACBrNFe1.NotasFiscais.Validar;
  ACBrNFe1.Enviar(vNumLote,True);
.....

 

 

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

  • Fundadores

Pode ser a questão de "String vs AnsiString" que afeta do Delphi...

Eu testei apenas em Lazarus... e não consegui reproduzir o problema...

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

  • Moderadores

boa noite

faça o seguinte, mande salvar todos os arquivos gerados, depois tente usar o delphi e debugar fazendo as paradas necessárias dentro do fonte e assim achar essa diferença

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

Eu já tive esse problema em cliente e realmente era a questão de caracter invalido nas informações complementares. Dependendo da operação eu envio o local de entrega nas informações complementares e caso o cliente envie uma "/" por exemplo em qualquer campo de endereço, esse erro acontece. 

Se não me engano, acento também da problema rs.

 

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

Verifique também se você não está enviando quebras de linhas nas informações complementares, se sim, remova-as e troque por ";" que é o separador de linha do componente, isso antes de assinar, validar, etc.

Olá Regys.

Obrigado pela dica, era isso mesmo, o problema ocorria quando o cliente dava enter no memo de infclp para pular a linha.

agora estou usando o seguinte codigo e esta funcionando corretamente.

InfAdic.InfCpl := UTF8Encode(ReplaceStr(INFORMACAOCOMPLEMENTAR, #13#10, ';'));

uma sugestão: não teria como o componente tratar essa informação?

Abraços

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Acho que o próprio componente ACBrNFe pode tratar a mudança de LineBreak para ';'   vou  tentar implementar...

Também notei que você usa "UTF8Encode"... em teoria isso não deve ser feito nos fontes do Trunk2...

No Trunk2, a ideia é permitir que o programador use o modelo de String nativa de sua IDE (Ansi, UTF8, UTF16)... e o componente fará a conversão para UTF8, momentos antes da Assinatura do XML...

Quando receber a resposta do SEFAZ, o componente converte o XML recebido de UTF8, para a String nativa da IDE, antes de popular as propriedades de TNFe...

Ou seja, no Trunk2, a ideia é que o programador não precise se preocupar com "encoding"

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

  • Moderadores

Fiz um pequeno acerto para esse ajuste de quebra de linha, como o repositório está fora do ar segue o patch, por favor teste.

Basta clicar com o botão direito no repositório, escolher tortoise, aplicar patch, selecione o arquivo e aplique, seus arquivos serão alterados.

ajustequebralinhadfe.patch

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Oi REgys,

Apenas uma sugestão... CR (#13) não é sinônimo de quebra de linha (Carriage Return)

LF (#10) sim... é a quebra de Linha (Line Feed)

No Linux a quebra de linha é apenas LF ou #10

Minha proposta para essa function seria algo mais genérico e que pudesse estar na ACBrUtil

function AjustarQuebrasLinhas(const ATexto: String; NovaQuebraDeLinha: String = ';'): String;
begin
  Result := Trim(ATexto);
  
  if Result <> '' then
  begin
    if sLineBreak <> LF then
      Result := StringReplace(Result, sLineBreak, LF, [rfReplaceAll]);
	  
    Result := StringReplace(Result, LF, NovaQuebraDeLinha, [rfReplaceAll]);
  end
end;

 

  • Curtir 2
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

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