Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erro ao tentar assinar nota #4

Open
williandias360 opened this issue Jun 13, 2014 · 30 comments
Open

Erro ao tentar assinar nota #4

williandias360 opened this issue Jun 13, 2014 · 30 comments

Comments

@williandias360
Copy link

Quando estou tentando assinar uma nota, a partir do seu exemplo, ele gera essa excesão:
Um contexto XmlDocument é necessario para a transformação de envelopadas.
O que seria isso?
O erro acontece nessa linha: signedXml.ComputeSignature();
Dentro da classe Assinatura.cs

@leonardiwagner
Copy link
Owner

  1. Chegou a ser apresentado alguma janela para selecionar o certificado digital?
  2. Você possui um certificado digital A1 ou A3 valido e instalado corretamente na máquina?

@williandias360
Copy link
Author

Apareceu sim, testei em uma maquina que já tem o certificado A3 instalado e e já emite notas por outro software

@gercenio
Copy link

Ola amigo

bom dia

Em primeiro lugar gostaria de parabenizar por disponibilizar um plugin, muito útil e super importante para nos desenvolvedores, e também gostaria de colaborar no futuro com o desenvolvimento do mesmo.

Estou com um problema parecido com o do colega ele apresenta erro no momento da assinatura, minha pergunta e eu acredito que esteja faltando algum lugar ou propriedade onde devemos informa a senha do certificado, existe alguma coisa nesse sentido?

Att,

Gercenio

@leonardiwagner
Copy link
Owner

Oi @gercenio , na classe NFeContexto, tem a linha this.Certificado = gerenciadorDeCertificado.SelecionarPorWindows(); ,isso deveria abrir a janela e perguntar qual certificado que voce deseja usar (e pergunta pela senha), isso esta acontencendo?

Ah, e clica em Star aqui em cima dessa pagina para dar uma estrelinha no projeto, isso ajuda a sinalizar para outras pessoas tambem poderem ajudar

@gercenio
Copy link

Sim esta ocorrendo sim, abre a caixa que contem os certificados eu seleciono um e apos isso mostra a seguinte mensagem "Erro ao Assinar Nota um context XmlDocument e necessário para transforma uma envelopada", eu acredito que isso ocorreu no momento da assinatura, você consegue verificar esse problema?

@leonardiwagner
Copy link
Owner

@gercenio Esse erro que voces estao tendo esta no metodo AssinaturaDeXml.Assinar que recebe o objeto Nota e o Certificado, provavelmente tem algo na nota que esta impossibilitando a assinatura

A nota tem a propriedade nota.CaminhoFisico que mostra o caminho do arquivo XML, poste aqui esse XML da nota para eu dar uma olhada por favor, que ai eu ja aviso o que esta de errado e melhoro o erro da mensagem

@gercenio
Copy link

@leonardiwagner Tubem ?,tranquilo segue o mesmo abaixo para sua analise:
"



35


Descrição da natureza
0
55
1
3231


1
1
3550308
1
1
0
2
1
3
1


07293766000150
Carlos Montoya

R. da bavária
123
Santa Claus
3550308
São Paulo
SP
30720360
1058
BRASIL
1331231231

117013148112
1


73696773204
Renan Do Vidigal

R. Logradouro Teste
123
Bairro da Luz
3550308
São Paulo
SP
30720360
1058
BRASIL
1129148627

9


teste@teste.com



123
7896090701049
Produto de teste
22071090
5401
CX
1.0000
1.00000000
1.00
7896090701049
CX
1.0000
1.00000000
1




0
102




01
0
0
0




01
0
0
0






0.00
0.00
0.00
0.00
0.00
1.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
1.00
0.00



1


"

@leonardiwagner
Copy link
Owner

@gercenio então, isso é só um exemplo, e só da pra fazer o envio se o CPF/CNPJ for o mesmo do certificado! Cria uma nota "de verdade", e não esqueça de confirmar que o CNPJ é o mesmo do certificado que está sendo usado

@gercenio
Copy link

gercenio commented Nov 5, 2015

@leonardiwagner Boa tarde

Consegui resolver alguns problemas existentes, na geração do arquivo, porem agora estou com um problema no método de envio que mostra a seguinte mensagem : ERRO 239 conforme tabela da SEFAZ, neste caso estou suspeitando que o Webservice esta na versão 2 isso e possível?

@leonardiwagner
Copy link
Owner

@gercenio sim, por padrao esta na versao 2 mesmo. Pra mudar para a 3, muda ali no NFeContexto e tambem os endpoints dos servicos!

@gercenio
Copy link

gercenio commented Nov 5, 2015

@leonardiwagner , eu fiz as alterações no padrão para a versão 3.0, e o erro apenas esta ocorrendo no momento do envio acredito que de alguma forma o endpoint que esta sendo passando e para a versão 2.0, bom vou fazer mais algumas alterações aqui e depois posto o resultado aqui para ajudar outros colegas, muito obrigado pelo força.

@leonardiwagner
Copy link
Owner

@gercenio os endpoints sao aqueles da pasta WebReferences, por precaucao pode apagar todos e adicionar de novo

Esses que estao ai sao por padrao 2.0 e de SP, a galera de outros estados ja tem esse costume de apagar todos e adicionar de outros estados, qualquer coisa estamos ai :)

@gercenio
Copy link

gercenio commented Nov 9, 2015

@leonardiwagner bom dia, fiz as alterações nos endpoint, e consegui transmitir com sucesso as notas, porem me ocorreu o seguinte problema apos completar todo o processo e receber da consulta da nota percebi que não tinha o numero da chave de acesso para que seja possível baixar o XML e assim criar a impressão da DANFE, existe alguma rotina que passando o numero do protocolo seja possível obter esse XML, pois percebi que em nenhum momento temos a chave da nota sendo assim e impossível criar um processo total de integração?, lembrando também amigo que ao final da minha jornada pretendo disponibilizar meu caso alem dos fontes para melhorar o projeto acredito que ele e muito bom e pode apoiar diversos outros colegas no futuro, muito obrigado novamente.

@gercenio
Copy link

gercenio commented Jan 7, 2016

@leonardiwagner Ola tudo bem amigo, bom fiz todos os ajustes já estou conseguindo emitir normalmente a nota utilizando esses fontes, porem agora eu estou com um pequeno problema que acho que você poderia ajudar para melhorar ainda mais o projeto, que e o retorno final com a atualização do XML da nota eu pois o mesmo não esta contemplando as tag´s finais de você tem alguma dica nesse sentido ?

@leonardiwagner
Copy link
Owner

Oi @gercenio confesso que nao sei do que se trata essas tags finais, faz bastante tempo que eu nao trabalho com NFe

Sem pensar muito, acho que e' melhor armazenar essas tags em memoria, e quando receber o XML concatenar manualmente, a noite vou dar uma olhadinha nisso para relembrar, se eu pensar em alguma solucao aviso aqui

@guilhermefmbatista
Copy link

@leonardiwagner bom dia!
Também percebi que ao gerar o XML, as tags finais contendo a chave do certificado não aparecem.
Alguma previsão para implementar isso?
@gercenio você chegou a implementar isso? Poderia disponibilizar?
Abraço

@gercenio
Copy link

gercenio commented Feb 2, 2016

@guilhermefmbatista Bom dia!, Sim fiz diversas alterações neste ótimo projeto de base para um projeto mais robusto, estou na fase de implementar novos webservices com os demais estados para emissão de NF-e, uma solução que apliquei foi a cada passo que o arquivo e gerado adiciono as tags de processamento, também fiz a implementação de log´s de erro em cada estagio do envio e validações a SEFAZ, assim ganhamos um log completo de tudo, em breve vou disponibilizar uma versão bem consistente deste projeto, infelizmente hoje estou um pouco enrolado, mais posso ajuda-lo no suporte para uma solução rápida, verifique a possibilidade da inclusão das tags de de chave nfe conforme layout, isso já vai ajuda-lo, o calculo já esta sendo realizado corretamente ok

@guilhermefmbatista
Copy link

@gercenio Bacana demais. Estou analisando a documentação e o layout da NFe para inclusão das tags. Quando terminar, postarei aqui.
Também ficarei aguardando a disponibilização da nova versão do projeto.
Abraços.

@gercenio
Copy link

gercenio commented Feb 2, 2016

@guilhermefmbatista assim que eu termina vou fazer o possível para disponibilizar, acredito que você vai resolver de forma bem simples, uma dica e comparar um arquivo assinado pelo emissor gratuito com o arquivo gerado utilizando o plugin, você vai perceber de cara as tags que faltam, uma outra dica e verificar o retorno do envio como aqui esta implementado de forma mais consistente a versão 2.0, na versão 3.0 existe algumas particularidades na tratativa do retorno do webservice esta devem ser implementadas, pois estão faltando

@guilhermefmbatista
Copy link

Blz @gercenio.
Já arrumei um arquivo, estou comparando as tags e implementando os itens que faltam.
Quando chegar na parte do retorno do arquivo, se tiver algumas dúvidas postarei aqui.
Obrigado pelas dicas.
Abraço

@leonardiwagner
Copy link
Owner

@guilhermefmbatista Nao planejo, porque a ideia de disponibilizar o projeto com codigo aberto eh para justamente as pessoas irem fazendo e nao apenas eu fazer tudo.

Voces poderiam forkear esse projeto e colocar as coisas que estao fazendo no fork, ou enviar PRs para esse mesmo que eu incluo.

@guilhermefmbatista
Copy link

@gercenio bom dia!
Estou enfrentando o mesmo problema que você na hora de assinar a nota.
Quando estou selecionando o certificado a3, não está sendo solicitado a senha do token.
Poderia me falar o que fez para ajustar esse problema?
Grato!

@gercenio
Copy link

@guilhermefmbatista Bom dia
Ainda não encontrei uma solução para este problema, pois pelo que entendi esse tipo de certificado solicita uma senha e usuário no momento do envio (vide emissor gratuito nf-e), sendo assim via C# acredito que seria necessário criar algo no mesmo sentido, bom caso encontre uma solução por favor posta aqui para ajudar a todos, muito obrigado

@guilhermefmbatista
Copy link

@gercenio achei que tivesse conseguido assinar a nota, como mencionou acima.
Se conseguir algo postarei aqui, mas eu ainda não estou conseguindo assinar a nota.
Sempre que ele tenta assinar a nota em signedXml.ComputeSignature(); dá pau, falando que o
elemento de referência está malformado.

@gercenio
Copy link

@guilhermefmbatista Boa tarde

Sim eu consegui assinar a nota porem no meu caso estou fazendo uso de um certificado do tipo A1, com ele funciona perfeitamente, para o certificado do tipo A3, infelizmente tive problemas e como o prazo e apertado neste projeto não conseguir dar foco numa solução e solicitei ao meu cliente a aquisição de um certificado do tipo A1, para o A3 realmente existe essa pendencia

@leonardiwagner
Copy link
Owner

@gercenio e @guilhermefmbatista , eu emiti notas com esse codigo somente com o certificado A3, bom saber que funcionou com o A1 tambem!

Debuguem o metodo SelecionarPorWindows na linha this.Certificado = gerenciadorDeCertificado.SelecionarPorWindows(); do /NFeEletronica/Contexto/NFeContexto.cs

Dentro dele vai ter um metodo chamado ListaCertificado() no arquivo /NFeEletronica/Certificado/GerenciadorDeCertificado.cs eh la que vai ser encontrados os certificados no computador. Tem essa linha var store = new X509Store("MY", StoreLocation.CurrentUser); que confesso que nao sei o que significa esse "MY" , mas sempre funcionou. Essa leitura de certificado X509 eh usada pra varias coisas, se nao esta vindo nada nas colecoes que vem depois dessa linha, dao uma olhadinha se deve ser outra coisa ao inves desse "MY", a "magica" de encontrar o certificado esta toda nessa metodo. Vejam que estou tambem procurando 2 vezes:

  1. collection1 = collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
  2. collection2 = collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);

tentem utilizar outro criterio tbm mais "folgado" . Ah e voces conseguiram usar esse certificado A3 em outros lugares? ele eh meio chatinho de instalar, na hora de instalar ja tive que selecionar varios tipos diferentes ate achar o que fazia funcionar.

Quando funciona, abre uma tela do proprio Windows mesmo para selecionar o certificado , depois ele pergunta pelo PIN. Eu comecei fazer um esquema para salvar o certificado para nao precisar ficar perguntando toda hora que for usar, mas isso eu nao terminei ainda.

@guilhermefmbatista
Copy link

@leonardiwagner boa dia!
Eu esqueci de mencionar que localmente eu consigo selecionar o certificado a3 e assinar.
O problema é quando publico minha aplicação web no servidor. Eu não consigo de jeito nenhum recuperar o token do cliente, mas ainda estou pesquisando. Achando algo, eu posto aqui.

@gercenio sua aplicação é desktop? Se for, posso passar algumas alterações que fiz para identificar o certificado a3.

@gercenio
Copy link

@leonardiwagner Boa tarde Sim minha aplicação e desktop meu amigo se me passar me ajuda muito estou com uma bucha só com esse cliente para emissão de notas também para solucionar problemas de emissão para outros estados alterei esse projeto criando assim uma factory onde ele identifica o estado e stancia a classe conforme o estado ainda não criei o endereçados que traga os webservice por estado vou trabalhar nisso caso isso te ajude posso compartilhar com você mais essa sua alteração para pegar o certificado do tipo A3 me ajuda muito mesmo caso posso passar esse e meu e-mail gercenio@gmail.com

@gercenio
Copy link

Ola boa tarde amigos, alguém conseguiu uma solução para ler e assinar notas utilizando o certificado do tipo A3? @guilhermefmbatista @leonardiwagner @williandias360

@ivanteles
Copy link

ivanteles commented Dec 13, 2016

Uma pergunta. para assinar a NF
new AssinaturaDeXml().AssinarNota(nota, cert, "aqui seria a senha do meu certificado?");

Estou fazendo varias implementações para emissão da NF de serviço pra o DF, fiz um o fork ao terminar vou fazer um comit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants