Fala Dev! Neste post quero apresentar para você nosso pacote do NuGet Microsoft para NFe em C#!
Para facilitar a integração e auxiliar no desenvolvimento, disponibilizamos um pacote de código para a versão .NET CORE que realiza a comunicação com a API de NFe aqui da NS Tecnologia.
Com ele, você já pode contar com métodos para emissão, eventos, e também para acessar os métodos utilitários da nossa solução API de NFe.
Primeiro, vamos seguir um passo a passo de como instalar ela (a biblioteca) no seu projeto.
Para implementar esta biblioteca em seu projeto, você pode:
- Realizar a instalação do pacote através do Microsoft NuGet no Visual Studio

- Realizar o download da biblioteca pelo GitHub e adicionar a pasta “src” em seu projeto no C# (.NET Core )
Após instalação através do gerenciador de pacotes NuGet, faça referência dela em seu projeto:
using ns_nfe_core;
Para que a comunicação com a API possa ser feita, é necessário informar o seu Token no cabeçalho das requisições.
Com este pacote, você pode fazê-lo assim como no exemplo:
configParceiro.token = "4dec0a34f460169dd6fb2ef9193003e0"
Como você pode ver no nosso exemplo acima, para que a comunicação com a API possa ser feita, é necessário informar o seu Token no cabeçalho das requisições e por isso, vamos informar nesta classe, para que a biblioteca tenha acesso e posso construir os cabeçalhos das requisições para a API.
Agora, já podemos comunicar com a API de NFe de forma segura,e podemos iniciar o uso dos métodos disponíveis.
Para realizarmos a emissão de uma NFe, vamos utilizar os seguintes métodos. Tenhamos como exemplo:
using ns_nfe_core.src.emissao;
static async Task emitirNFe() // Emitir NFe
{
var NFeXML = layoutNFe.gerarNFeXML();
var retorno = await EmissaoSincrona.sendPostRequest(NFeXML, "XP", true, @"NFe/Documentos/");
}
Primeiramente, construímos um objeto da NFe, e um método ( exemplo ) que retorna este objeto:
using ns_nfe_core.src.emissao;
namespace ns_nfe_core
{
class layoutNFe
{
public static TNFe gerarNFeXML()
{
TNFe NFe = new TNFe
{
infNFe = new TNFeInfNFe
{
versao = "4.00",
ide = new TNFeInfNFeIde{...}
emit = new TNFeInfNFeEmit{...}
dest = new TNFeInfNFeDest{...}
det = new TNFeInfNFeDet[1]
{
new TNFeInfNFeDet
{
nItem = "1",
prod = new TNFeInfNFeDetProd{...},
imposto = new TNFeInfNFeDetImposto{...},
}
},
total = new TNFeInfNFeTotal{...},
transp = new TNFeInfNFeTransp{...},
pag = new TNFeInfNFePag{...},
infAdic = new TNFeInfNFeInfAdic{...},
}
};
return NFe;
}
}
}
Apos isso, vamo utilizar o método **sendPostRequest** da classe *EmissaoSincrona* para realizar o envio deste documento NFe para a API.
Este método realiza a emissão, a consulta de status de processamento e o download de forma sequencial.
Os parâmetros deste método são:
var retorno = await EmissaoSincrona.sendPostRequest(NFeXML, "XP", true, @"NFe/Documentos/");
+ *NFeXML* = objeto NFe que será serializado para envio;
+ *”XP”* = tpDown = tipo de download, indicando quais os tipos de arquivos serão obtidos no Download;
+ *true* = exibeNaTela = parâmetro boolean que indica se será exibido na tela, ou não, o DANFE obtido no download;
+ *@”NFe/Documentos/”* = diretório onde serão salvos os documentos obtidos no download;
Podemos acessarmos os dados de retorno e aplicarmos validações da seguinte forma. Tenhamos como exemplo:
// Verifica se houve sucesso na emissão
if (retorno.statusEnvio == "200" || retorno.statusEnvio == "-6" || retorno.statusEnvio == "-7")
{
string statusEnvio = retorno.statusEnvio;
string nsNRec = retorno.nsNRec;
// Verifica se houve sucesso na consulta
if (retorno.statusConsulta == "200")
{
string statusConsulta = retorno.statusConsulta;
string motivo = retorno.motivo;
string xMotivo = retorno.xMotivo;
// Verifica se a nota foi autorizada
if (retorno.cStat == "100" || retorno.cStat == "150")
{
// Documento autorizado com sucesso
string cStat = retorno.cStat;
string chNFe = retorno.chNFe;
string nProt = retorno.nProt;
string statusDownload = retorno.statusDownload;
if (retorno.statusDownload == "200")
{
// Verifica de houve sucesso ao realizar o downlaod da NFe
string xml = retorno.xml;
string json = retorno.json;
string pdf = retorno.pdf;
}
else {
// Aqui você pode realizar um tratamento em caso de erro no download
statusDownload = retorno.statusDownload;
dynamic erros = retorno.erros;
}
}
else
{
// NFe não foi autorizada com sucesso ou retorno diferente de 100 / 150
motivo = retorno.motivo;
xMotivo = retorno.xMotivo;
dynamic erros = retorno.erros;
}
}
else
{
// Consulta não foi realizada com sucesso ou com retorno diferente de 200
string motivo = retorno.motivo;
string xMotivo = retorno.xMotivo;
dynamic erros = retorno.erros;
}
}
else
{
// NFe não foi enviada com sucesso
string statusEnvio = retorno.statusEnvio;
string motivo = retorno.motivo;
string xMotivo = retorno.xMotivo;
dynamic erros = retorno.erros;
}
Caso você tenha ficado interessado e queira mais informações sobre essa biblioteca, você pode:
- Conferir nosso repositório e documentação no github;
- Assistir a apresentação dessa mesma biblioteca em nosso canal do youtube.
Além disso, para mais informações sobre a API da NFe, temos uma documentação disponível aqui
E, se você DEV ainda não é nosso parceiro, entre em contato conosco e agende uma demonstração sem compromisso!
Possuimos uma série de vídeos sobre NFe em csharp, só clicar aqui.
Atenção essa série está passando por atualização logo lançaremos uma nova série de NFe em Csharp mostrando as facilidades da nova versão
Gostou do Post? Caso você não conheça nossa API entre em contato conosco!