Jump to content

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

Recommended Posts

Posted (edited)

Olá, estou tentando gerar uma nota fiscal para provedor Betha.

 

O componente chega a assinar o RPS, adicionar a tag <signature> do lote. porém ele não consegue assinar:

ele chama a função xmlSecDSigCtxSign e cai na excepção "raise Exception.Create('Error: signature failed');".

Já atualizei o repositório à ultima revisão, mas o problema continua.

Tentei compilando o demo em deplhi e lazarus, os mesmos caem na mesma excepção.

Percebi que isso está acontecendo também para outros provedores, por exemplo GINFES. 

 

O que posso fazer para solucionar o problema? Estou usando ACBRNFSe com OpenSSL.

 

Grato,

Matteo.

PS: Como precisamos rodar o componente em uma máquina linux, a utilização do CAPICOM não é viável.

Edited by acciarolimatteo
Posted

Consegui gerar a nfe (RPS e Lote assinados) pelo componente ACBrNFSe mudando a criptografia dele de 2048 para 1024 mas somente usando CAPICOM.

Pelo OpenSSL ele da erro na hora de assinar o Lote. Há solução para isso? Eu procurei no forum, tem outros usuários com mesmo problema porem ninguém parece ter conseguido resolver o problema.

  • Consultores
Posted

Bom dia Matteo,

 

Se não me falha a memória já devo ter respondido esse questionamento em outro tópico, mas vamos lá.

 

Se tratando de OpenSSL é preciso incluir no XML o DTD antes de realizar a assinatura. O componente faz isso automaticamente, mas como não existe uma padronização, alguns provedores colocam o ID como sendo "Id" outros são "id" e outros não tem o identificador.

 

A função do DTD é fazer com que o xmlsec encontre o ID no momento que vai realizar a assinatura.

 

Como o Capicom não requer o DTD para realizar a assinatura, pouco importa se tem ou não tem o ID. É por isso que funciona, ou seja a assinatura é realizada.

 

O DTD definido prevê a presença do ID no grupo <LoteRps> (quando vai assinar o lote) e <InfRps> (quando vai assinar o RPS).

 

Se não me falha a memória o provedor em questão não possui ID. Isso pode ser a origem do problema ou tem mais alguma coisa faltando.

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

Posted

Eu estudei como o componente ACBrNFSe realiza a assinatura e vim fazendo a depuração da rotina de assinatura do módulo de vocês.

 

O problema ocorre somente na hora de assinar o Lote, os RPS são assinados sem problema nenhum.

 

Verifiquei que ele adiciona o DTD no começo do XML e depois disso coloca a tag <ns3:EnviarLoteRpsEnvio xmlns:ns3="..."> e o resto do conteúdo;

Depois disso, o componente chama a função para assinar o Lote e a mesma retorna um erro e não consegue assinar.

 

Eu realizei um script em LUA para conseguir assinar o XML que usa o binário xmlsec1 (que usa a mesma libraria do módulo ACBrOpenSSL) e,

inicialmente, ele também estava encontrando problemas na hora de assinar o Lote, dai fiz alguns experimentos e teve a ideia de substituir a tag raiz:

alterei de <ns3:EnviarLoteRpsEnvio xmlns:ns3="..."> ... </ns3:EnviarLoteRpsEnvio> para  <RootNode> ... </RootNode>, mandei assinar e o problema sumiu.

Após assinar, coloquei de volta a tag original, mandei validar pelo site da betha e o mesmo validou minha nota com sucesso.

 

Já que a tag raiz está fora do contexto da assinatura, ela não influência a validação da mesma, então poderia ser uma tentativa tentar reproduzir isso no módulo de vocês,

quem sabe que o problema seja resolvido para todos.

  • Like 1
Posted

Eu não programo muito em delphi, por isso não vou tentar fazer alterações ao componente, mas gostaria que alguém da equipe tentasse essa solução para ver se o problema pode ser resolvido desta forma.

Caso der certo ficarei feliz de ter ajudado.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...