leonardiwagner / NFeEletronica.NET

E-invoicing issuer (NFe Eletrônica)
Apache License 2.0
44 stars 11 forks source link

Erro ao tentar assinar nota #4

Open williandias360 opened 10 years ago

williandias360 commented 10 years ago

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 commented 10 years ago
  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 commented 10 years ago

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

gercenio commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

@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 commented 8 years ago

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 commented 7 years ago

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.