Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Bom dia amigos

Estou tentando enviar uma NFSe para o provedor GINFES mas estou recebendo a seguinte mensagem 

Falha ao localizar o nó Raiz.

Estou usando Lazarus 1.4, FPC 2.6 em Linux 32 bits e usando o próprio exemplo Demo_ACBrNFSe

Atualizei o ACBr para revisão 12473

Alguém poderia me dar uma ajuda com isso ! :-)

Abraços,

André Medeiros

Postado

Para complementar as informações acima

Estou gerando o XML conforme segue

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [<!ATTLIST ns3:LoteRps Id ID #IMPLIED>]><ns3:EnviarLoteRpsEnvio xmlns:ns3="http://www.ginfes.com.br/servico_enviar_lote_rps_envio_v03.xsd" xmlns:ns4="http://www.ginfes.com.br/tipos_v03.xsd"><ns3:LoteRps Id="1"><ns4:NumeroLote>1</ns4:NumeroLote>

Quando debugo a função _XmlSecLookUpNode 

O ParentNode = LoteRps

Quando entro a primeira vez no while vejam os valores abaixo

ChildNode = NumeroLote
NextNode = Signature

Parece que ele já passou pelo nó depois disse ele varre todo o xml me retornando nil no FoundNode

Espero que estas informações ajudem

Abraços,

 

André Medeiros

Postado

Olá Wellington!

Fico feliz por não ser o único com problema, mas tenho uma restrição referente ao uso da capicom, pois o ambiente de produção é Linux, neste caso preciso usar a OpenSSL

Mesmo assim obrigado pela dica. 

Talvez uma informação interessante é que a emissão da NFe e NFSe para a cidade de São Paulo são emitidas normalmente neste ambiente. Por issa acredito que não seja algo relacionado ao uso da DLL diretamente.

Abraços,

André Medeiros

Postado

Olá Amigos

Fiz mais alguns testes usando Windows 10 com Dephi XE2. Quando uso Capicom para efetuar a assinatura consigo transmitir a NF com sucesso mas quado uso OpenSSL o erro

"Falha ao localizar o nó Raiz"

Continua persistindo.

Alguém tem alguma ideia do que possa ser ?

Grato,

 

André Medeiros

Postado

Bom dia Italo,

Me desculpe. É isso mesmo que eu quis dizer, a NFS-e é transmitida com sucesso quando usamos Capicom. Só não localiza o nó raiz quando é OpenSSL.

Se precisar de qualquer outra informação, estou a disposição

[]s

André Medeiros

Postado

Olá Italo, 

Atualizei para revisão 12483, na compilação dos pacotes deu um erro no ACBrDevice.pas Linha 1569

Printer.Write(AString);

Eu comentei essa linha e pude recompilar todos os pacotes.

Porém o erro "Falha ao localizar o nó Raiz" ainda continua. 

Só lembrando que estou estou usando FPC com OpenSSL

[]s

André Medeiros

Postado

Olá Italo e amigos !

Consegui resolver o problema mas não sei como corrigir. Segue abaixo minhas considerações

No método XmlSecFindSignatureNode da ACBrDFeOpenSSL.pas temos as seguintes linhas

if (InfElement <> '') then
  begin
    { Procura InfElement em todos os nós, filhos de Raiz, usando XMLSec }
    infNode := XmlSecLookUpNode(rootNode, InfElement );             
.
.
.

A variável  InfElement sempre possui o valor 'ns3:LoteRps', neste caso sempre retornando infNode como Nil e causando a exceção de que o nó não foi encontrado.

Eu fiz a seguinte alteração para testes

  { Se tem InfElement, procura pelo mesmo. Isso permitirá acharmos o nó de
    assinatura, relacionado a ele (mesmo pai) }
  InfElement:='LoteRps';
  if (InfElement <> '') then
  begin
    { Procura InfElement em todos os nós, filhos de Raiz, usando XMLSec }
    infNode := XmlSecLookUpNode(rootNode, InfElement );
.
.
.
.

Vejam que adicionei esta linha abaixo de forma grotesca apenas para efetuar os testes substituindo o valor de ns3:LoteRps para apenas LoteRps

InfElement:='LoteRps';

Com isso o nó é encontrado, a assinatura e a transmissão da NFSe são feitas com sucesso.

Acredito que isso seleciona o problema, porém não sei como fazer para corrigir dentro do pacote que prevê vários provedores de NFSes

Alguém pode ajudar ? 

[]s

André Medeiros

  • Consultores
Postado

Boa noite André,

Pelo que entendi o componente compara o valor de rootNode com infElement.

O infElement é passado para a rotina como sendo "ns3:LoteRps" mas o valor de rootNote retornado pela função xmlDocGetRootElement é "LoteRps".

Sendo que no XML existe o prefixo ns3: na tag LoteRps.

O problema é que somente uns 2 ou 3 provedores existem o prefixo, um deles é o Ginfes.

Talvez a solução seria:

(...)

if Pos(':', infElement) > 0 then 

 infElement := Copy(infElement, Pos(':', infElement) +1, Length(infElement));

  { Se tem InfElement, procura pelo mesmo. Isso permitirá acharmos o nó de
    assinatura, relacionado a ele (mesmo pai) }
  if (InfElement <> '') then
  begin
(...)

Com isso removemos o prefixo do infElement caso ele exista.

Tente essa solução.

  • Curtir 1
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia Italo,

Funcionou perfeitamente, sem afetar o envio para outros provedores. Você vai disponibilizar no SVN !?

Obrigado,

André Medeiros

  • 1 mês depois ...
Postado
Em 14/10/2016 at 12:15, almp1 disse:

Olá Italo, 

Atualizei para revisão 12483, na compilação dos pacotes deu um erro no ACBrDevice.pas Linha 1569

Printer.Write(AString);

Eu comentei essa linha e pude recompilar todos os pacotes.

Porém o erro "Falha ao localizar o nó Raiz" ainda continua. 

Só lembrando que estou estou usando FPC com OpenSSL

[]s

Também tive este erro, mas será que está correto comentar uma linha Printer.Write num componente que deve IMPRIMIR alguma coisa?

Alexsander da Rosa

Rednaxel Informática

http://rednaxel.com

  • 2 semanas depois ...
  • Este tópico foi criado há 2907 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.