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:
- Instale o Visual Studio Community (é gratuito) clicando aqui: Visual Studio;
- Extraia o conteúdo da pasta que você baixou anteriormente e abra o projeto no Visual Studio (duplo clique sobre o arquivo MDFeAPI.sln);
- Compile o código apertando F5 (ou clicando no botão Run da IDE).
- Acesse a pasta MDFeAPI > bin > Debug e copie os seguintes arquivos:
- MDFeAPI.exe;
- Newtonsoft.dll;
- Newtonsoft.xml.
- 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âmetro | Descrição |
|---|---|
| Comando | emitirMDFeSincrono |
| Token | Seu token de acesso a API |
| Conteudo | Caminho do arquivo com os dados de emissão. |
| tpConteudo | Tipo de conteúdo que está sendo enviado. Valores possíveis: json, xml, txt |
| CNPJ | CNPJ do emitente do documento. |
| tpDown | Tipo de arquivos a serem baixados. Valores possíveis: X - XML, J - JSON, P - PDF, XP - XML e PDF, JP - JSON e PDF |
| tpAmb | Ambiente onde foi autorizado o documento. Valores possíveis: 1 - produção, 2 - homologação |
| caminhoSalvar | Caminho onde devem ser salvos os documentos baixados. |
| exibeNaTela | Se for baixado, exibir o PDF na tela após a autorização. Valores possíveis: True - será exibido, False - não será exibido |
| Id | Um 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: statusEnvio, statusConsulta, statusDownload, cStat, chMDFe, nProt, motivo, nsNRec, erros. 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:
| Nome | Finalidade | Documentação da API |
|---|---|---|
| enviaConteudoParaAPI | Função genérica que envia um conteúdo para API. Requisições do tipo POST. | |
| emitirMDFe | Envia uma MDF-e para processamento. | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/emissao/ |
| consultarStatusProcessamento | Consulta o status de processamento de uma MDF-e. | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/status-de-processamento/ |
| downloadMDFe | Baixa documentos de emissão de uma MDF-e autorizada. | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/emissao-de-mdfe/download/ |
| downloadMDFeESalvar | Baixa 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. |
| downloadEventoMDFe | Baixa documentos de evento de uma MDF-e autorizada. | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/download-de-eventos-de-mdfe/ |
| downloadEventoMDFeESalvar | Baixa 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. |
| cancelarMDFeESalvar | Realiza o cancelamento de uma MDF-e e salva em um diretório | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/cancelamento-de-mdfe/ |
| encerrarMDFeESalvar | Encerra um MDF-e e o salva em um diretório | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/encerramento-de-mdfe/ |
| consultarSituacao | Consulta 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/ |
| incluirCondutorESalvar | Inclui um condutor ao MDF-e e salva o documento de inclusão em um diretório | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/eventos-de-mdfe/inclusao-de-condutor-de-mdfe/ |
| consultaNaoEncerrados | Faz uma consulta para ver todos os MDF-es que não foram encerrados | https://documentacao.nstecnologia.com.br/docs/ns-mdfe/funcoes-utilitarias-de-mdfe/consulta-de-mdf-es-nao-encerrados/ |
| listarNSNRecs | Lista 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/ |
| Nome | Parâ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. |
| emitirMDFe | token = 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. |
| consultarStatusProcessamento | token = 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. |
| downloadMDFe | token = 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. |
| downloadMDFeESalvar | token = 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. |
| downloadMDFeESalvar | token = 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. |
| downloadEventoMDFeESalvar | token = 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. |
| cancelarMDFeESalvar | token = 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. |
| encerrarMDFeESalvar | token = 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. |
| incluirCondutorESalvar | token = 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. |
| consultarSituacao | token = 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. |
| consultarNaoEncerrados | token = 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. |
| listarNSNRecs | token = seu token de acesso;chMDFe = chave de acesso do manifesto;id = identificador para adicionar ao final do nome do arquivo de retorno. |