1. Home
  2. Exemplos de Comunicação c...
  3. Linguagens sem suporte HT...
  4. NS MDFe.exe

NS MDFe.exe

Introdução

Esta página apresenta trechos de códigos de uma aplicação em VB.NET que foi desenvolvida para consumir as funcionalidades da NS MDF-e API. Você pode realizar o download do exemplo clicando no link abaixo:

Funcionamento da estrutura

Para que você possa utilizar o projeto de exemplo, você deve compilá-lo para gerar o executável, pois ele será utilizado para comunicar com a API. Através de sua aplicação, você irá “rodar” o executável passando o nome da função que deseja executar e o restante dos parâmetros necessários. A aplicação possui as classes MDFeAPI.vb e Principal.vb; confira o objetivo de cada uma:

MDFeAPI.vb: contém todas as funções de comunicação com a API.

Principal.vb: é responsável por ler os parâmetros passados junto com a chamada do executável e realizar a chamada da função desejada (exemplo: emitirMDFe, cancelarMDFe, etc).

Integrando ao sistema

Para gerar o executável e comunicar com a API, você precisa realizar os seguintes passos:

  1. Instale o Visual Studio Community (é gratuito) clicando aqui: Visual Studio;
  2. Extraia o conteúdo da pasta que você baixou anteriormente e abra o projeto no Visual Studio (duplo clique sobre o arquivo MDFeAPI.sln);
  3. Compile o código apertando F5 (ou clicando no botão Run da IDE).
  4. Acesse a pasta MDFeAPI > bin > Debug e copie os seguintes arquivos:
    1. MDFeAPI.exe;
    2. Newtonsoft.dll;
    3. Newtonsoft.xml.
  5. Cole os arquivos na pasta de sua aplicação (de preferência, na mesma pasta do executável de sua aplicação.

Pronto! Agora, você já pode consumir a NS MDF-e API através do seu sistema. Confira abaixo sobre realizar uma emissão completa.

Realizando uma emissão

Para realizar uma emissão completa, você poderá utilizar a função emitirMDFeSincrono. Veja abaixo sobre os parâmetros necessários, e um exemplo de chamada do método.

Parâmetros
ParâmetroDescrição
ComandoemitirMDFeSincrono
TokenSeu token de acesso a API
ConteudoCaminho do arquivo com os dados de emissão.
tpConteudoTipo de conteúdo que está sendo enviado. Valores possíveis: json, xml, txt
CNPJCNPJ do emitente do documento.
tpDownTipo de arquivos a serem baixados. Valores possíveis: X - XML, J - JSON, P - PDF, XP - XML e PDF, JP - JSON e PDF
tpAmbAmbiente onde foi autorizado o documento. Valores possíveis: 1 - produção, 2 - homologação
caminhoSalvarCaminho onde devem ser salvos os documentos baixados.
exibeNaTelaSe for baixado, exibir o PDF na tela após a autorização. Valores possíveis: True - será exibido, False - não será exibido
IdUm identificador para ser adicionado ao final do nome do arquivo de retorno. Pode ser o número do manifesto, por exemplo. Exemplos.: 920, n1, env_2.
Exemplo de chamada

Após ter todos os parâmetros listados acima, você deverá fazer a chamada do executável. Veja o código de exemplo abaixo: Exemplo de chamada emitirNFeSincrono

ShellExecute(0, "Open", "MDFeAPI.exe", "emitirMDFeSincrono SEU_TOKEN C:/manifesto_001.txt txt 07364617000135 XP 2 C:/manifestos true 001", 0, 1)

Acima foi utilizado o comando ShellExecute mas você pode utilizar outro comando de sua preferência.

 
A função emitirMDFeSincrono fará o envio, a consulta e download do documento, utilizando as funções emitirMDFe, consultarStatusProcessamento e downloadMDFeAndSave, presentes na classe MDFeAPI.vb. Por isso, o retorno será um JSON com os principais campos retornados pelos métodos citados anteriormente.

O retorno da chamada acima ficaria assim: ./respostas/emitirMDFeSincrono_001.json

No exemplo abaixo, veja como tratar o retorno da função emitirMDFeSincrono:

Exemplo de tratamento do retorno

O JSON retornado pelo método terá os seguintes campos: statusEnviostatusConsultastatusDownloadcStatchMDFenProtmotivonsNRecerros. Veja o exemplo abaixo:Retorno emitirNFeSincrono

{"statusEnvio": "200","statusConsulta": "200","statusDownload": "200","cStat": "100","chMDFe": "43181007364617000135550000000119741004621864","nProt": "143180007036833","motivo": "Autorizado o uso do MDF-e","nsNRec": "313022","erros": ""}

Confira a lógica para tratamento do retorno, e aplique-a na sua linguagem:Código de exemplo de tratamento do retorno

'Primeiramente, você deve ler os campos do json de retorno, através do seu sistema.'Agora que você já leu os dados, é aconselhável que faça o salvamento de todos'eles no seu banco de dados antes de prosseguir para o teste abaixo. 'Testa se houve sucesso na emissãoSe (statusEnvio = 200) Ou (statusEnvio = -6) Então'Testa se houve sucesso na consultaSe (statusConsulta = 200) Então'Testa se a nota foi autorizadaSe (cStat = 100) Ou (cStat = 150) Então'Aqui dentro você pode realizar procedimentos como desabilitar o botão de emitir, etcMostrarMensagem (motivo) 'Testa se o download teve problemasSe (statusDownload != 200) EntãoMostrarMensagem (motivo)Fim SeSenão'Aqui você pode mostrar alguma solução para o parceiro ou exibir opção de editar a notaMostrarMensagem (motivo)Fim Se'Caso tenha dado erro na consultaSenão'Aqui você pode mostrar uma mensagem ao usuárioMostrarMensagem (motivo + Chr(13) + erros)Fim SeSenão'Aqui você pode exibir para o usuário o erro que ocorreu no envioMostrarMensagem (motivo + Chr(13) + erros)Fim Se
Demais funcionalidades

No módulo MDFeAPI, você pode encontrar também as seguintes funcionalidades:

NomeFinalidadeDocumentação da API
enviaConteudoParaAPIFunção genérica que envia um conteúdo para API. Requisições do tipo POST.
emitirMDFeEnvia uma MDF-e para processamento.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/emissao/
consultarStatusProcessamentoConsulta o status de processamento de uma MDF-e.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/status-de-processamento/
downloadMDFeBaixa documentos de emissão de uma MDF-e autorizada.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/download/
downloadMDFeESalvarBaixa documentos de emissão de uma MDF-e autorizada e salva-os em um diretório.Por utilizar o método downloadMDFe, a documentação é a mesma.
downloadEventoMDFeBaixa documentos de evento de uma MDF-e autorizada.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/download-de-eventos-de-mdfe/
downloadEventoMDFeESalvarBaixa documentos de evento de uma MDF-e autorizada e salva-os em um diretório.Por utilizar o método downloadEventoMDFe, a documentação é a mesma.
cancelarMDFeESalvarRealiza o cancelamento de uma MDF-e e salva em um diretóriohttps://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/cancelamento-de-mdfe/
encerrarMDFeESalvarEncerra um MDF-e e o salva em um diretóriohttps://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/encerramento-de-mdfe/
consultarSituacaoConsulta a situação de uma MDF-e na Sefaz.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/funcoes-utilitarias-de-mdfe/consulta-situacao-de-mdfe/
incluirCondutorESalvarInclui um condutor ao MDF-e e salva o documento de inclusão em um diretóriohttps://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/inclusao-de-condutor-de-mdfe/
consultaNaoEncerradosFaz uma consulta para ver todos os MDF-es que não foram encerradoshttps://documentacao.nstecnologia.com.br/docs/ns-mdfe/funcoes-utilitarias-de-mdfe/consulta-de-mdf-es-nao-encerrados/
listarNSNRecsLista os nsNRec vinculados a uma MDF-e.https://documentacao.nstecnologia.com.br/docs/ns-mdfe/funcoes-utilitarias-de-mdfe/lista-de-nsnrecs-vinculados-a-um-mdfe/
NomeParâmetros
enviaConteudoParaAPI token = seu token de acesso;caminho = caminho do arquivo com o conteúdo a ser enviado;url = URL para onde deve ser enviado o conteúdo;tpConteudo = tipo de conteúdo (xml, txt, json);id = identificador para adicionar ao final do nome do arquivo de retorno. 
emitirMDFetoken = seu token de acesso;
caminho = caminho do arquivo com o conteúdo a ser enviado;tpConteudo = tipo de conteúdo (xml, txt, json);id = identificador para adicionar ao final do nome do arquivo de retorno.
consultarStatusProcessamentotoken = seu token de acesso;CNPJ = CNPJ do emitente do manifesto;nsNRec = número de recibo do manifesto;tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);id = identificador para adicionar ao final do nome do arquivo de retorno.
downloadMDFetoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpDown = tipo de download (X, P, J, XP ou JP);tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);id = identificador para adicionar ao final do nome do arquivo de retorno.
downloadMDFeESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpDown = tipo de download (X, P, J, XP ou JP);tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);caminhoSalvar = caminho onde devem ser salvos os arquivos baixados;exibeNaTela = exibir o PDF ou não, caso baixado (true ou false);id = identificador para adicionar ao final do nome do arquivo de retorno.
downloadMDFeESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpDown = tipo de download (X, P, J, XP ou JP);tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);tpEvento = tipo de evento (canc = cancelamento, enc = encerramento, inccond = inclusão de condutor);nSeqEvento = número sequencial do evento;id = identificador para adicionar ao final do nome do arquivo de retorno.
downloadEventoMDFeESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpDown = tipo de download (X, P, J, XP ou JP);tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);tpEvento = tipo de evento (canc = cancelamento, enc = encerramento, inccond = inclusão de condutor);nSeqEvento = número sequencial do evento;caminhoSalvar = caminho onde devem ser salvos os arquivos baixados;exibeNaTela = exibir o PDF ou não, caso baixado (true ou false);id = identificador para adicionar ao final do nome do arquivo de retorno.
cancelarMDFeESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);dhEvento = data-hora do evento;nProt = número do protocolo;xJust = justificativa do cancelamento;tpDown = tipo de download (X, P, J, XP ou JP);caminhoSalvar = caminho onde devem ser salvos os arquivos baixados;exibeNaTela = exibir o PDF ou não, caso baixado (true ou false);id = identificador para adicionar ao final do nome do arquivo de retorno.
encerrarMDFeESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;nProt = número do protocolo;tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);tpDown = tipo de download (X, P, J, XP ou JP);dhEvento = data-hora do evento;dtEnc = data do evento;cUF = código UF de encerramentocMun = código município de encerramentocaminhoSalvar = caminho onde devem ser salvos os arquivos baixados;exibeNaTela = exibir o PDF ou não, caso baixado (true ou false);id = identificador para adicionar ao final do nome do arquivo de retorno.
incluirCondutorESalvartoken = seu token de acesso;chMDFe = chave de acesso do manifesto;tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);tpDown = tipo de download (X, P, J, XP ou JP);dhEvento = data-hora do evento;xNome = nome do condutor;CPF = CPF do condutor;caminhoSalvar = caminho onde devem ser salvos os arquivos baixados;exibeNaTela = exibir o PDF ou não, caso baixado (true ou false);nSeqEvento = numero de sequencia de evento(default = "1").id = identificador para adicionar ao final do nome do arquivo de retorno.
consultarSituacaotoken = seu token de acesso;licencaCNPJ = CNPJ da licença do contribuinte;chMDFe = chave de acesso do manifesto;tpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);id = identificador para adicionar ao final do nome do arquivo de retorno.
consultarNaoEncerradostoken = seu token de acesso;CNPJ = CNPJ do emitente do manifesto;cUF = código UF de autorização do MDFetpAmb = tipo de ambiente onde foi emitida a nota (1 ou 2);id = identificador para adicionar ao final do nome do arquivo de retorno.
listarNSNRecstoken = seu token de acesso;chMDFe = chave de acesso do manifesto;id = identificador para adicionar ao final do nome do arquivo de retorno.

How can we help?