Download da Nota Fiscal Eletrônica (NFe)
========================================Atualização em 21/08/2017:
Graças à contribuição dos colegas Thiago Motta e André Scudeler temos agora uma versão funcional do código para a nova versão do download da NFe, o NFeDistribuicaoDFe. Segundo os amigos os passos são os mesmos, a manifestação é igual, e no passo 3 do tutorial deve ser adicionado o NFeDistribuicaoDFe no lugar do NFeDownloadNF. Utilize para isso a nova url: https://www1.nfe.fazenda.gov.br/NFeDistribuicaoDFe/NFeDistribuicaoDFe.asmx
Segue o novo código do procedimento de download:
private void DownloadXML(object sender, EventArgs e)
{
//Download da NFe, Para Download da xml por chave é necessario que a versão seja 1.01
var texto = @"<distDFeInt xmlns=""http://www.portalfiscal.inf.br/nfe"" versao = ""1.01"">
<tpAmb>1</tpAmb>
<cUFAutor>35</cUFAutor>
<CNPJ>CNPJ DA EMPRESA</CNPJ>
<consChNFe>
<chNFe>CHAVE NOTA FISCAL</chNFe>
</consChNFe>
</distDFeInt>";
var xml = ConverterStringToXml(texto);
BaixarXml(xml);
}
private void BaixarXml(XmlDocument xml)
{
var NFe_Sc = new Distribuicao.NFeDistribuicaoDFeSoapClient();
NFe_Sc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySerialNumber, "NÚMERO SERIAL DO SEU CERTIFICADO");
XElement x = XElement.Parse(xml.InnerXml);
var arquivo = NFe_Sc.nfeDistDFeInteresse(x).ToString();
var xmlNota = ConverterStringToXml(arquivo);
var conteuZip = xmlNota.GetElementsByTagName("docZip")[0].InnerText;
byte[] dados = Convert.FromBase64String(conteuZip);
//TODO: fazer uso dos dados da variável retorno
var xmlRetorno = descompactar(dados);
}
private XmlDocument ConverterStringToXml(string texto)
{
var xml = new XmlDocument();
xml.LoadXml(texto);
return xml;
}
public string descompactar(byte[] conteudo)
{using (var memory = new MemoryStream(conteudo))
using (var compression = new GZipStream(memory, CompressionMode.Decompress))
using (var reader = new StreamReader(compression))
{
return reader.ReadToEnd();
}
}
Amigos, muito obrigado! Compartilhar é agradável e muito comum no estrangeiro. Nós brasileiros devemos nos unir a esta causa!
========================================
(adaptação de A Saga do Download da Nota Fiscal Eletrônica (NFe), previamente publicado neste blog, mas já retirado)
Pré requisitos da receita para fazer o download da NFe via Web Service:
1- Certificado digital: Se sua empresa não tem esse certificado, é preciso adquirir com uma das entidades certificadoras, e deve estar válido. (Sobre como instalar o certificado, inclusive para rodar no IIS, veja o meu outro post em:
http://pmarco777.blogspot.com.br/2015/01/download-da-nota-fiscal-eletronica-nfe_10.html)
2- Até 30 dias da emissão: Se a nota foi emitida há mais de 30 dias só será possível o download "manual", nota por nota, digitando o captcha, no site: http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=
3- Registrar um evento de "ciência da operação": É preciso se "manifestar" em relação a nota para depois poder baixá-la. Exigência da receita.
O manual da receita é a Nota Técnica 2012.002 que pode ser baixada em:
http://www.nfe.fazenda.gov.br/
Este tutorial utiliza .NET C# 4.0, projeto windows form com 1 form e 2 botões. 1 botão "manifesta" e o outro faz o download.
1- Abra o Visual Studio e crie um novo projeto através do menu file/new project:
e coloque dois botões no form:
2- Adicione a referência a dll System.Security.dll, do .NET. Ela permitirá o acesso ao Namespace System.Security.Cryptography.Xml, necessário para assinar digitalmente o xml de manifestação. Para isso clique com o botão direito do mouse em referências do projeto, add reference:
Selecione a dll e adicione ao projeto.
3- Agora adicione a referência aos 2 web services da receita:
Namespace NfeRecepcao: https://www.nfe.fazenda.gov.
Namespace NfeDownload: https://www.nfe.fazenda.gov.
também usando o botão direito do mouse em references, só que o item é "add service reference".
Coloque a url do web service e clique no botão Go. Se neste momento vc não tiver o certificado instalado na sua máquina de desenvolvimento, não vai conseguir avançar, conforme foi avisado no início do artigo:
Coloque os namespaces corretos e adicione as referências com o botão ok.
4- No app.config (quando utilizar um projeto web será web.config) mude as linhas:
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
Para:
<security mode="Transport">
<transport clientCredentialType=" Certificate" proxyCredentialType="None"
5- Segue agora o código do form1.cs que deverá ser adaptado as suas necessidades, lembrando que o código do botão 1 faz a manifestação e o código do botão 2 faz o download. Onde se lê:
"Ponha o CNPJ da sua empresa"
"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
"Nome do certificado da sua empresa"
Deve ser alterado para os valores corretos.
using System;
using System.Net;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;
using System.Text;
using System.Windows.Forms;
using Recepcao = WindowsFormsApplication1.NfeRecepcao;
using Download = WindowsFormsApplication1.NfeDownload;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//
//Ciencia da Operacao
//
var NFe_Rec = new Recepcao.RecepcaoEventoSoapClient();
NFe_Rec.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Nome do certificado da sua empresa");
var notas = new string[] {
"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
,"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
}; // este array não deve passar de 20 elementos, máximo permitido por lote de manifestação
var sbXml = new StringBuilder();
sbXml.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<envEvento xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<idLote>1</idLote>
");
foreach (var nota in notas)
{
sbXml.Append(@"
<evento xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<infEvento Id=""ID210210" + nota + @"01"">
<cOrgao>91</cOrgao>
<tpAmb>1</tpAmb>
<CNPJ>Ponha o CNPJ da sua empresa</CNPJ>
"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
,"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
}; // este array não deve passar de 20 elementos, máximo permitido por lote de manifestação
var sbXml = new StringBuilder();
sbXml.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<envEvento xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<idLote>1</idLote>
");
foreach (var nota in notas)
{
sbXml.Append(@"
<evento xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<infEvento Id=""ID210210" + nota + @"01"">
<cOrgao>91</cOrgao>
<tpAmb>1</tpAmb>
<CNPJ>Ponha o CNPJ da sua empresa</CNPJ>
<chNFe>" + nota + @"</chNFe>
<dhEvento>" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss") + @"-03:00</dhEvento>
<tpEvento>210210</tpEvento>
<nSeqEvento>1</nSeqEvento>
<verEvento>1.00</verEvento>
<detEvento versao=""1.00"">
<descEvento>Ciencia da Operacao</descEvento>
</detEvento>
</infEvento>
</evento>
");
}
sbXml.Append("</envEvento>");
var xml = new XmlDocument();
xml.LoadXml(sbXml.ToString());
var i = 0;
foreach (var nota in notas)
{
var docXML = new SignedXml(xml);
docXML.SigningKey = NFe_Rec.ClientCredentials.ClientCertificate.Certificate.PrivateKey;
var refer = new Reference();
refer.Uri = "#ID210210" + nota + "01";
refer.AddTransform(new XmlDsigEnvelopedSignatureTransform());
refer.AddTransform(new XmlDsigC14NTransform());
docXML.AddReference(refer);
var ki = new KeyInfo();
ki.AddClause(new KeyInfoX509Data(NFe_Rec.ClientCredentials.ClientCertificate.Certificate));
docXML.KeyInfo = ki;
docXML.ComputeSignature();
i++;
xml.ChildNodes[1].ChildNodes[i].AppendChild(xml.ImportNode(docXML.GetXml(), true));
}
var NFe_Cab = new Recepcao.nfeCabecMsg();
NFe_Cab.cUF = "33"; //RJ => De acordo com a Tabela de Código de UF do IBGE
NFe_Cab.versaoDados = "1.00";
var resp = NFe_Rec.nfeRecepcaoEvento(NFe_Cab, xml);
var fileResp = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempResp.xml";
var fileReq = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempRequ.xml";
File.WriteAllText(fileReq, xml.OuterXml);
File.WriteAllText(fileResp, resp.OuterXml);
System.Diagnostics.Process.Start(fileReq);
System.Diagnostics.Process.Start(fileResp);
}
private void button2_Click(object sender, EventArgs e)
{
//
//Download da NFe
//
var notas = new string[] {
"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
,"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
}; // este array não deve passar de 10 elementos, máximo permitido por lote de download da NFe
<dhEvento>" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ss") + @"-03:00</dhEvento>
<tpEvento>210210</tpEvento>
<nSeqEvento>1</nSeqEvento>
<verEvento>1.00</verEvento>
<detEvento versao=""1.00"">
<descEvento>Ciencia da Operacao</descEvento>
</detEvento>
</infEvento>
</evento>
");
}
sbXml.Append("</envEvento>");
var xml = new XmlDocument();
xml.LoadXml(sbXml.ToString());
var i = 0;
foreach (var nota in notas)
{
var docXML = new SignedXml(xml);
docXML.SigningKey = NFe_Rec.ClientCredentials.ClientCertificate.Certificate.PrivateKey;
var refer = new Reference();
refer.Uri = "#ID210210" + nota + "01";
refer.AddTransform(new XmlDsigEnvelopedSignatureTransform());
refer.AddTransform(new XmlDsigC14NTransform());
docXML.AddReference(refer);
var ki = new KeyInfo();
ki.AddClause(new KeyInfoX509Data(NFe_Rec.ClientCredentials.ClientCertificate.Certificate));
docXML.KeyInfo = ki;
docXML.ComputeSignature();
i++;
xml.ChildNodes[1].ChildNodes[i].AppendChild(xml.ImportNode(docXML.GetXml(), true));
}
var NFe_Cab = new Recepcao.nfeCabecMsg();
NFe_Cab.cUF = "33"; //RJ => De acordo com a Tabela de Código de UF do IBGE
NFe_Cab.versaoDados = "1.00";
var resp = NFe_Rec.nfeRecepcaoEvento(NFe_Cab, xml);
var fileResp = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempResp.xml";
var fileReq = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempRequ.xml";
File.WriteAllText(fileReq, xml.OuterXml);
File.WriteAllText(fileResp, resp.OuterXml);
System.Diagnostics.Process.Start(fileReq);
System.Diagnostics.Process.Start(fileResp);
}
private void button2_Click(object sender, EventArgs e)
{
//
//Download da NFe
//
var notas = new string[] {
"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
,"Ponha a chave de 44 dígitos da NFe recebida pela sua empresa"
}; // este array não deve passar de 10 elementos, máximo permitido por lote de download da NFe
var sbXml = new StringBuilder();
sbXml.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<downloadNFe xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<tpAmb>1</tpAmb>
<xServ>DOWNLOAD NFE</xServ>
<CNPJ>Ponha o CNPJ da sua empresa</CNPJ>
");
foreach (var nota in notas)
{
sbXml.Append("<chNFe>" + nota +"</chNFe>");
}
sbXml.Append("</downloadNFe>");
var xml = new XmlDocument();
xml.LoadXml(sbXml.ToString());
var NFe_Cab = new NfeDownload.nfeCabecMsg();
NFe_Cab.cUF = "33"; //RJ => De acordo com a Tabela de Código de UF do IBGE
sbXml.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<downloadNFe xmlns=""http://www.portalfiscal.inf.br/nfe"" versao=""1.00"">
<tpAmb>1</tpAmb>
<xServ>DOWNLOAD NFE</xServ>
<CNPJ>Ponha o CNPJ da sua empresa</CNPJ>
");
foreach (var nota in notas)
{
sbXml.Append("<chNFe>" + nota +"</chNFe>");
}
sbXml.Append("</downloadNFe>");
var xml = new XmlDocument();
xml.LoadXml(sbXml.ToString());
var NFe_Cab = new NfeDownload.nfeCabecMsg();
NFe_Cab.cUF = "33"; //RJ => De acordo com a Tabela de Código de UF do IBGE
NFe_Cab.versaoDados = "1.00";
var NFe_Sc = new NfeDownload.NfeDownloadNFSoapClient();
NFe_Sc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Nome do certificado da sua empresa");
var resp = NFe_Sc.nfeDownloadNF(NFe_Cab, xml);
var fileResp = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempResp.xml";
var fileReq = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempRequ.xml";
File.WriteAllText(fileReq, xml.OuterXml);
File.WriteAllText(fileResp, resp.OuterXml);
System.Diagnostics.Process.Start(fileReq);
System.Diagnostics.Process.Start(fileResp);
}
}
}
var NFe_Sc = new NfeDownload.NfeDownloadNFSoapClient();
NFe_Sc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Nome do certificado da sua empresa");
var resp = NFe_Sc.nfeDownloadNF(NFe_Cab, xml);
var fileResp = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempResp.xml";
var fileReq = "c:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-tempRequ.xml";
File.WriteAllText(fileReq, xml.OuterXml);
File.WriteAllText(fileResp, resp.OuterXml);
System.Diagnostics.Process.Start(fileReq);
System.Diagnostics.Process.Start(fileResp);
}
}
}
Bom dia Marco, essa classe baixa apenas as NFes que estão ligadas ao certificado informado?
ResponderExcluirSim, o certificado está vinculado a uma empresa e só as notas dessa empresa podem ser baixadas.
ExcluirBoa tarde Marcos, vc tem alguma solução para download de NFe com emissão maior que 30 dias?
ResponderExcluirNesse caso o jeito é baixar no site da fazenda:
Excluirhttp://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=
Uma solução paliativa é adotada pelo Nasajon. Ele comunica com o site da fazenda e pede o captcha p/ o usuário. Eu não construí uma solução semelhante mais a ideia é interessante. O processo é automatizado de forma parcial: o usuário apenas digita o captcha, sem precisar entrar no site da fazenda, baixar manualmente e depois fazer o upload manualmente para dentro do sistema.
Se você precisa baixar 1 nota atrasada com certa frequencia, pode tentar imitar a ideia do Nasajon, mas se precisa baixar centenas de notas antigas, vai precisar de um captcha para cada nota. Se é raro chegar uma nota com tanto atraso na sua empresa (meu caso), usa o próprio browser e deixa o usuário ter um trabalho que será bem menor do que programar uma solução como a do Nasajon.
Abraço,
Marquinho
Amigo no meu caso tenho 4 certificados A1 , tem como eu deixar a escolha do certificado dinâmico , o usuário vai escolher de qual certificado vai baixar o xml e depois vai digitar a chave da nfe ?
ResponderExcluirSim, no caso este trecho do código:
Excluirvar NFe_Rec = new Recepcao.RecepcaoEventoSoapClient();
NFe_Rec.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "Nome do certificado da sua empresa");
Deve ser alterado para que a string "Nome do certificado da sua empresa" corresponda ao certificado desejado.
Olá,
ResponderExcluirPor favor passe um Skype, WhatsApp ou email para contato?
pmarco777@gmail.com - (21) 9950-63590
ExcluirBoa tarde Marquinhos, preciso implementar numa aplicação a consulta de NFe's por CNPJ de várias empresas cadastradas, tem alguma ideia de como posso fazer isso?
ResponderExcluirSó é possível o download automatizado da NF-e pelo web service da sefaz dentro de 1 mês da emissão da nota. Se o que você precisa é de uma consulta aleatória, automatizar não é possível, mas é possível o acesso não automatizado pelo site: http://www.nfe.fazenda.gov.br/portal/principal.aspx
ExcluirEspero ter ajudado,
Marquinho Peli
Muito interessante! sabe se funciona usando o ambiente de homologação ("https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx
ResponderExcluir") ? A string do certificado consome também modelos A3? Pode me enviar no e-mail este projeto? desde já muito obrigado e parabéns pela iniciativa
Angué, não testei no ambiente de homologação, porque tinha apenas que fazer o download, uma operação sem efeito colateral, e seria totalmente diferente se tivesse que gerar uma NFe. Também não testei o modelo A3 (mas creio que funcione da mesma forma) e já não tenho o projeto, mas o código está aqui no blog. Desculpe não estar ajudando em nada com a resposta, mas melhor responder com sinceridade do que com o silêncio, né?
ExcluirAbraço e te cuida,
Marquinho Peli
Sem dúvidas agradeço sua atenção, sem problemas por não ter mais o projeto, mas já me passou um grande caminho... hoje em dia faço o XML da nfe e emito a mesma pelo framework UniNFe, mas preciso ampliar meu retaguarda (coisa básica, mas me ajuda muito na empresa)... realmente não ha efeito colateral, sei que quando emite para o modo de homologação, la o CNPJ é alterado para 99999999 por exemplo, contudo não se faz o cancelamento da mesma no ambiente de homologação por conta disso... acredito que não tem como também usar o download mas irei implementar amanha com calma pois hoje já to cansado de códigos rsrs.. mais uma vez muito obrigado.. sucesso! abraço
ResponderExcluirBom dia, consegui consumir os dois serviços
ResponderExcluirmas usei a busca do certificado pelo número serial que no caso a maioria dos sistemas usam por ser mais fácil e único caso o cliente tenha dois certificado no repositório do windows (um vencido e um mais novo)
...ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySerialNumber, "Coloque o Número de Série sem espaços aqui");
Mais uma vez obrigado.
Gostaria de acrescentar que neste caso toda vez que for atualizar o certificado (a cada ano ou 3 anos), vai precisar recompilar a aplicação, e que a busca pelo nome, uma vez que desinstale o antigo e instale o novo, é uma solução que dispensa a recompilação ou a alteração de um arquivo config.
ExcluirVerdade, não tinha pensado dessa maneira... obrigado pelo conselho, sem dúvidas é muito bem aceito!
ExcluirOla Marcos ótimo este exemplo,
ResponderExcluirqueria saber como baixar as notas de um determinado período pelo cnpj da empresa eo estado.vc sabe?
Heitor, essa dúvida é comum e por isso eu escrevi no início do post que só é possível o download da NFe:
Excluir2- Até 30 dias da emissão: Se a nota foi emitida há mais de 30 dias só será possível o download "manual", nota por nota, digitando o captcha, no site: http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=
Marquinho tipo este programa
Excluirhttp://www.espiaonfe.com.br/realizacompra.aspx
Amigo, não sei se eu confiaria num programa chamado "Espião" para um assunto tão sério e formal que é a nota fiscal eletrônica. O mundo está cheio de golpistas. Leia a documentação OFICIAL, provida pela SEFAZ. Não acredite na informação sem ter uma forma de confirmá-la.
ExcluirAbraço.
Olá Marcos, obrigado pelo exemplo.
ResponderExcluirÉ possível baixar todas as notas dentro deste período de 30 dias sem eu ter que informar chave de acesso, somente o CNPJ de destino?
Obrigado!
Não amigo, a Sefaz realmente se preocupou em não permitir a sobrecarga de seus servidores, e um método como esse, baixando todas as notas de uma empresa, ainda que só dos últimos 30 dias, poderia ser executado no brasil todo por todas as empresas, e imagine... Realmente é necessário informar a chave específica da nota. Mas você pode confirmar por si mesmo no manual da sefaz, que indiquei no início do post:
ExcluirO manual da receita é a Nota Técnica 2012.002 que pode ser baixada em:
http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=tW+YMyk/50s=
Não consegui nem adicionar a referencia aparece um erro:
ResponderExcluirTenho certificado A1 e A3.
Se alguém souber, fico agradecido.
Erro ao baixar 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx'.
A solicitação foi anulada: Não foi possível criar um canal seguro para SSL/TLS.
O metadados contém uma referência que não pode ser resolvida: 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx'.
A solicitação HTTP está proibida com o esquema de autenticação de cliente 'Anonymous'.
O servidor remoto retornou um erro: (403) Proibido.
If the service is defined in the current solution, try building the solution and adding the service reference again.
Me parece que faltou seguir o passo 4 deste post. De qualquer modo este post já tem mais de 1 ano e pode ser que precise ser atualizado. Tem certeza que o passo 4 foi feito corretamente?
Excluirtalvez tenha mudado mesmo,
Excluirmas o passo 4 não fiz ainda, pois o erro deu no passo 3
e outra, o passo 4 é só para aplicação web diz ali
Já passei por isso. O passo 3 falha quando o pré-requisito 1 não foi satisfeito. É preciso ter o certificado corretamente instalado na máquina.
ExcluirO passo 4 é feito tanto na aplicação windows quanto web. Programar é uma tarefa difícil que exige a leitura de vários livros e manuais, e muitas vezes em outros idiomas. Leia com atenção e acompanhe as instruções pacientemente, é o único jeito. Ou mude de profissão! rss.
Excluiragora deu certo.. removi todos os certificado e deixei só 1...
Excluirpaciência sempre ajuda nessas horas...
obrigado.
Bom dia,
ResponderExcluirQuando eu tento adicionar a referência dos wev services ao meu projeto, está retornando o seguinte erro:
There was an error downloading 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx?op=nfeRecepcaoEvento/_vti_bin/ListData.svc/$metadata'.
The request failed with HTTP status 403: Forbidden.
Pode me ajudar?
Esse erro costuma ser de problema com o certificado. O primeiro passo é tentar baixar uma nota fiscal direto na sefaz. Se não tiver o certificado instalado corretamente não rola. Se consegue baixar do site deles, então é possível tb criar a conexão com o webservice deles
ExcluirConsegui. Tive que apagar todos os certificados e deixar só o que eu queria. Muito obrigado
ExcluirMarquinho,
ResponderExcluirEu preciso fazer o download do XML para meu cliente, porém ele não é o destinatário da NF-e, ele é o transportador.
Você sabe se é possível fazer o download nesta situação?
O download é possível para o emissor e para o destinatário. Mas o emissor via de regra é o gerador da nota. Se ele gerou a NFe, teoricamente não precisaria baixar, pois foi ele quem a enviou à Sefaz.
ExcluirEntendi. No caso o meu cliente é o transportador, o CNPJ dele é mencionado no XML, mas ele não é o destinatário e nem o emissor. Sabe se existe uma maneira de fazer o download neste caso?
ExcluirNovas informações surgiram desde a sua pergunta, creio que (graças à colaboração de Jonatan), a nota técnica 2014/002 http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=tW+YMyk/50s= pode te ajudar.
ExcluirOi Marco... Vc pode me ajudar?
ResponderExcluirAo executar, o debug pára na seguinte linha:
Download.NfeDownloadNFSoapClient NFe_Sc = new Download.NfeDownloadNFSoapClient();
A mensagem de erro é:
========================================
An unhandled exception of type 'System.InvalidOperationException' occurred in System.ServiceModel.dll
Additional information: Não foi possível localizar o elemento de ponto de extremidade padrão que referencia o contrato 'NfeDownload.NfeDownloadNFSoap' na seção de configuração do ServiceModel cliente. Isso pode ter ocorrido devido à falta de um arquivo de configuração para o seu aplicativo ou porque nenhum elemento de ponto de extremidade correspondendo a este contrato pôde ser encontrado no elemento cliente.
========================================
Já verifiquei os passos várias vezes e não achei o erro. Pode me ajudar?
Tem skype? Podemos fazer uma chamada rápida, meu skype: marco.pellicciotta.osf
ExcluirO problema do Pablo era o fato de usar este projeto como uma dll, e ai os dados do app.config que valem são os que estiverem no projeto da interface (windows ou web).
ExcluirBoa sorte a todos.
É possível inserir mais 1 argumento na seleção do certificado? Por exemplo data de expiração? pois o certificado vale pra 1 ano, será sempre o mesmo nome e se tiver 2 certificado com o mesmo nome da erro,se tivesse mais uma condição dava pra fazer,pois sao muitos usuarios que usariam e entrar 1 por 1 e desabilitar o certificado antigo é mais dificil.
ResponderExcluirÉ possível selecionar o certificado pelo número serial:
ExcluirClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySerialNumber, "Coloque o Número de Série sem espaços aqui");
Nesse caso coloque o serial num arquivo config. Quando instalar o certificado novo, altere para o serial novo.
ola Marcos,esta empresa oferece um serviço que não encontramos no sefaz http://www.keeptrue.com/ProdutosServicos/GerenciamentoNFe
ResponderExcluircom sua experiencia como ela faz?
Heitor, dei uma olhada no link, vi vários serviços, mas não sei exatamente qual deles você se refere. Poderia ser um pouco mais específico?
Excluireles oferecem um serviço de salvar todas as notas fiscais na nuvem ,mas como eles conseguem pegar pelo sefaz somente pelo cnpj, ainda não vi uma web service que faz isso,vc tem noção ?
ExcluirObrigado,
Heitor,
ExcluirTentei acessar o mesmo linke que você me postou ontem:
http://www.keeptrue.com/ProdutosServicos/GerenciamentoNFe
E hoje ele já não existe mais, apenas um redirecionamento.
Há também um tal de espião nfe:
http://www.espiaonfe.com.br/
Mas eu não confio em nada disso. Programas oficiais como o Nasajon não conseguem baixar a NFe sem certificado, e a documentação da Sefaz é clara.
Será que pode existir uma "porta dos fundos" para que certas empresas tenham acesso privilegiado aos dados da Sefaz e assim oferecer serviços que nenhuma outra tenha? Sim, é possível, mas não sou eu o cara que vai estar por dentro desse tipo de informação...
Abraço ai,
Marquinho
Heitor,
ExcluirDê uma olhada na Nota Técnica 2014/002, mas de qualquer forma não é só pelo CNPJ, sempre precisa ter o certificado da empresa.
Abraços!
Ótimo post, parabéns!
ResponderExcluirJonatan, é um prazer compartilhar!
ExcluirSenhores, o Alexandre Hogler, da MHTEC (www.mhtec.com.br) perguntou:
ResponderExcluirGostaria de saber se existe a possibilidade do sistema avisar a empresa, quando uma NF-e for emitida contra ela, já baixando o XML. Sem precisar o usuário ficar consultando no site a todo momento.
Conforme a colaboração de Jonatan acima, a nota técnica 2014/002 http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=tW+YMyk/50s=
Mostra como acessar as notas referentes à empresa, ao destinatário e ao transportador (amplo escopo de acesso a notas), no período de até 3 meses da emissão.
Seguindo a NT 2014/002 eu consegui fazer a solicitação, porém não consigo ler o retorno enviado pela Sefaz. Segundo eu entendi este retorno ira conter até 50 chaves de NFs e, a partir deste ponto é que poderiamos em outra requisição fazer o download. Ou seja, só teriamos acessos as chaves.
ExcluirWesley, li que o formato de retorno da NFe no webservice NFeDistribuicaoDFe é zip, para economia de espaço. Talvez por isso a dificuldade em ler o conteúdo.
ExcluirWesley, tente o novo código fornecido pelos amigos Thiago Motta e André Scudeler no início do post.
ExcluirBoar tarde,
ResponderExcluirEstava lendo a Nota Técnica 2014.002 - v1.02 e vi que o evento NfeDownloadNF e o evento NfeConsultaDest serão descontinuados e substituídos pelo evento NFeDistribuicaoDFe.
É isso mesmo ou eu entendi errado?
http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=VcEhGZODuo4=
Hamatulla observou bem, os dias de validade deste post estão contados! A data de desativação dos Web Service NFeDownloadNF é 02/05/2017. Até é possível utilizar o serviço, mas logo NFeDownloadNF será passado. O novo webservice NFeDistribuicaoDFe irá englobar o download da NF-e num formato zip para economia de espaço. Pessoal, estou sem trabalhar com a NFe já a algum tempo, e por isso não sei como será o acesso por esse novo serviço. Este post ficará sendo um guia apenas para a parte de certificado...
ExcluirMarquinho, é serio que não vai funcionar mais? Demorei tanto pra achar um codigo que desse certo e agora nao vai dar mais? hehe, me dei mal. Você tem ao menos uma base de algum codigo ai com o NFeDistribuicao ? Pelo manual que a Sefaz disponibiliza nao da pra entender nada(pelo menos eu nao entendi)
ExcluirRealmente não tenho, seria uma boa, mas não tenho trabalhando com NFe há algum tempo e codificar os acessos aos web services não é tarefa fácil. Se fosse fácil qq um seria programador né? Eu adoro pegar o código prontinho, copiar e colar, e por isso quando posso proporciono essa facilidade aos colegas tb. Se souber de alguma novidade deixa um link aqui nos comentários. Abraço ai!
ExcluirBom dia e parabéns pelo blog, eu posso utilizar este código para teste? ou seja para homologação?
ResponderExcluirFica à vontade. Mas saiba que breve esse serviço (NFeDownloadNF) será descontinuado, e vc precisará implementar o NFeDistribuicaoDFe, de acordo com a Nota Técnica 2014.002.
ExcluirBom dia Marco. Você chegou a implementar ou conhece alguma implementação, também em C#, utilizando o novo webservice NFeDistribuicaoDFe??? Quero implementar essa função na minha aplicação.
ResponderExcluirAinda não tenho nenhum exemplo da nova implementação Rafael.
ExcluirObrigado! E parabéns pela iniciativa.
ExcluirVeja a nova atualização no início do blog.
ExcluirBom dia pessoal ,como esse post me ajudou a alguns anos atras volto aqui pra dar mais um folego pra ele, perdi uma bela tarde de sol realizando estas alterações para o novo webservice ,obviamente este é apenas um complemento do codigo acima so precisa fazer uns pequenos ajustes vou postar os ajustes , pois agora o retorno da nfe vem em base64 e zipado : segue exemplos :
ResponderExcluirvar NFe_Sc = new NfeDownload.NFeDistribuicaoDFeSoapClient();
NFe_Sc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, certificado);
XElement x = XElement.Parse(xml.InnerXml);
var arquivo = NFe_Sc.nfeDistDFeInteresse(x).ToString();
int inicio = arquivo.IndexOf("v3.10.xsd") + 11;
int fim = arquivo.IndexOf("") - 1;
arquivo = arquivo.Substring(inicio , fim - inicio);
byte[] dados = Convert.FromBase64String(arquivo);
var xmlRetorno = descompactar(dados);
OK , AGORA VOU POSTAR O METODO descompactar.
public string descompactar(byte[] conteudo)
{
GZipStream compressionStream = new GZipStream(new MemoryStream(conteudo), CompressionMode.Decompress);
StreamReader reader = new StreamReader(compressionStream);
string xml = "";
foreach (var line in reader.ReadLine())
{
xml += line.ToString();
}
return xml;
}
BOA SORTE A TODOS E ATÉ MAIS !
Reginaldo, baseado no seu exemplo, ainda que incompleto, os amigos Thiago Motta e André Scudeler conseguiram uma implementação funcional que está no início do post.
ExcluirMuito obrigado!
Que bom , espero ter ajudado a todos !
ExcluirOlá amigos. boa noite!
ExcluirParabéns pelo post. muito bom.
Obrigado por compartilhar informações importantes.
gostaria de saber como pegar o nome do certificado selecionado pelo usuário e jogar na variavel "nome do certificado" sou iniciante em c#.
var NFe_Sc = new NfeDownload.NFeDistribuicaoDFeSoapClient();
NFe_Sc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, certificado);
Nesta parte do código.
Abraço a todos.
deu erro no passo "conteuZip = xmlNota.GetElementsByTagName("docZip")(0).InnerText"
ExcluirErro:Additional information: Referência de objeto não definida para uma instância de um objeto.
Percebi que a mensagem da variavel "arquivo" é uma resposta da sefaz , esta "Status137: Nenhum documento localizado".
Porém existe o XML pois eu consigo baixar normalmente no site da receita. (mesmo erro para outros XMLS)
A parte da ciencia da operação esta funcionando normalmente.
Agradeço desde ja pela ajuda, desenvolvo em VB.NET que é muito semelhante ao C# - se alguem puder
Pessoal, consegui resolver este problema. Aparece "Nenhum documento Localizado" pois meu certificado é raiz, contendo varias filiais. Na hora de pesquisar estava colocando o CNPJ do certificado e nao da filial(destinatário) , por isso o erro.
ExcluirOlá
ResponderExcluirestou com esse erro :
An unhandled exception of type 'System.ServiceModel.Security.MessageSecurityException' occurred in mscorlib.dll
Additional information: A solicitação HTTP está proibida com o esquema de autenticação de cliente 'Anonymous'.
pode me ajudar ?
É a mesma pergunta do Bispo, logo acima. Dá uma olhada: "BISPO ss3 de junho de 2016 06:53"
ExcluirOlá, tendo essa nota fiscal prévia em mãos, como consigo pegar a xml completa da SEFAZ sem passar por aquela tela do captcha?
ResponderExcluirImplementando o serviço, como descrito aqui no blog.
ExcluirNo manual da SEFAZ diz que eu preciso gerar um evento de manifestação do tipo ciência da operação pra obter a nota completa, em que trecho do código ele realiza essa operação?
ExcluirNo trecho com o comentário:
Excluir//Ciencia da Operacao
Leia o blog primeiro com calma Gabriel, esgote seus próprios recursos, depois pergunte se ficar alguma dúvida. Se for impaciente não poderá ser programador...
Já localizei aqui, desculpe é que foi uma demanda urgente e com muita pressão e eu tinha zero conhecimento sobre NFE. Só uma duvida, quando for montar o cabeçalho do evento de recepção, a UF pode ser utilizada a 91 (AN) ou deve ser a UF do destinatário da Nota? pois minha empresa é multi estado e o sistema é integrado , ou seja, terei notas emitidas para a Bahia, para o paraná e afins...
ExcluirNo mais obrigado seu blog foi muito útil para mim
Aproveitando este código, alguem tem algum exemplo do schema para solicitar a SEFAZ todas as notas emitidas contra meu CNPJ, e nap só pela chave de acesso mas sim todas?
ResponderExcluirWesley, você conseguiu? também preciso fazer a consulta por CNPJ
Excluirvocê teria esse modelo para download ?
ResponderExcluir"esse modelo", modelo de que? O código do projeto? Uma NFe?
ExcluirVocê tem o código do projeto para download?
ResponderExcluirNão Rafael, mas vc pode copiar/colar diretamente aqui do blog.
ExcluirOk. Obrigado! Vou realizar o teste. ;D
ExcluirOlá, estou tentando utilizar o seu exemplo em uma aplicação web, e na linha "var resp = NFe_Rec.nfeRecepcaoEvento(NFe_Cab, xml);" está ocorrendo o seguinte erro:
ResponderExcluir"Additional information: A solicitação HTTP está proibida com o esquema de autenticação de cliente 'Anonymous'." Vi outra resposta sua de outro membro que aconteceu o mesmo erro e você falou que o problema estaria no passo 4. Com relação a este passo, estou com dúvida, porque no seu exemplo foi para uma app windows e fiz um ajuste no meu web.config, tentando seguir o seu exemplo e ficou da seguinte forma:
Não consigo ver o código do teu web.config, talvez vc queira me mandar por email, mas eu recomendo que você cheque meu outro post sobre a comunicação via aplicação web: https://pmarco777.blogspot.com.br/2015/01/download-da-nota-fiscal-eletronica-nfe_10.html
ExcluirThere was an error downloading 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx/$metadata'.
ResponderExcluirThe request failed with HTTP status 403: Forbidden.
There was an error downloading 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx/$metadata'.
ResponderExcluirThe request failed with HTTP status 403: Forbidden.
Metadata contains a reference that cannot be resolved: 'https://www.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx'.
The HTTP request was forbidden with client authentication scheme 'Anonymous'.
The remote server returned an error: (403) Forbidden.
If the service is defined in the current solution, try building the solution and adding the service reference again.
Oi Marcos, estive lendo a pouco sobre métodos de fazer consultar por CNPJ e não por chave de nota, será que você já possui algum exemplo?
ResponderExcluirOlá pessoal tudo bem ? Alguém conseguiu adaptar para a versão 4.0 ?
ResponderExcluirTambém estou com essa dificuldade
Excluirola Boa noite para mim só funcionou o botão 1 , o botão 2 esta dando muito erro...
ResponderExcluiralguem tem o projeto ou o codigo para compartilhar ?
não exite mas a variavel nfeCabecMsg da classe NFeDistribuicaoDFe
Excluirconsegui baixar as notas pelo webservice ... porem algumas notas vem um xml resumido apenda o nome da empresas e o valor da nota ... e não vem os produtos ... e outras vem completas saberia me responder o por que?
ResponderExcluirconsegui baixar as notas pelo webservice ... porem algumas notas vem um xml resumido apenda o nome da empresas e o valor da nota ... e não vem os produtos ... e outras vem completas saberia me responder o por que?
ResponderExcluirIsso ocorre porque nao manifestou as notas, somente as notas que foram tomada ciência da operação que estarao disponíveis para download.
ExcluirConsegui adapatar para versao 4.0 e ja ja consigo listar os xmls pelo nsu, trazer as notas resumidas, manifesta-las e efetuar o download dos xmls completos.
ResponderExcluirPorem, se deixar em loop por muito tempo, comeco a receber rejeição da sefaz, coloquei algumas pausas no codigo afim de minimizar esses bloqueios de consumo, porem ainda ocorrem, alguem sabe me dizer o intervalo correto de tempo entre as solicitações?
Jeferoz, poderia dar uma dica de como fez isso, pois aqui quando tento fazer pelo CNPJ, me retorna um erro.
ExcluirBoa noite a todos, parabéns pelos posts acima, muito instrutivos para quem esta iniciando agora, assim como eu, gostara de sabe se alguem tem um projeto que possa me enviar por email para que inicie meus testes com a consulta das NFE, grato gláucio. email: glau.mend@gmail.com
ResponderExcluirConsigo consultar um danfe pelo código da chave utilizando esse exemplo?
ResponderExcluirOla amigos, quando finalizo a operação nfeDistDFeInteresse, para onde o arquivo zip ou xml vai?
ResponderExcluirBom dia Amigos.
ResponderExcluirPrimeiramente parabéns pelo post, muito didático e objetivo.
Estou tentando adicionar a referência para download da nota e está apresentando o seguinte erro. Poderiam me ajudar, sou iniciante em C#.
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
Source File: D:\sitios\p_34719_spednfe\iis_web\8\nfedownloadnf\web.config Line: 37
Este comentário foi removido pelo autor.
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirPessoal estou com problema para adicionar a preferência. Por favor vejam minha postagem no último comentário do link abaixo:
ResponderExcluirhttps://pt.stackoverflow.com/questions/322924/sefaz-nfedistribuicaodfe-c-console-application
alguem conseguiu adptar para a versão recepção 4.0?
ResponderExcluir