Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

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.

Editado por acciarolimatteo
Postado

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
Postado

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

Postado

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.

  • Curtir 1
Postado

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.

×
×
  • 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...