Exemplo de código em Javascript

Sobre o Javascript

JavaScript é atualmente a principal linguagem para programação client-side em navegadores web e a lingagem mais utilizada no mundo. Começa também a ser bastante utilizada do lado do servidor através de ambientes como o node.js.

A emissão de NFe, NFSe ou NFCe utilizando JS pode ser feita de forma direta através da comunicação sem intermediários com as receitas estaduais ou prefeituras, porém existem inúmeras vantagens em utilizar uma API de terceiros para esta emissão.

O Focus NFe possui uma API simples e completa para emissão destes documentos fiscais, abaixo você irá encontrar exemplos funcionais de código-fonte em JavaScript utilizando a nossa API.

Envio de uma NFe

				
					var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

var token = "Token_obtido_no_cadastro_da_empresa";

// Substituir pela sua identificação interna da nota.
var ref = "12345";

/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/
var url = "https://homologacao.focusnfe.com.br/v2/nfe?ref=" + ref;

/*
Use o valor 'false', como terceiro parametro para que a requisicao aguarde a resposta da API
Passamos o token como quarto parametro deste metodo, como autenticador do HTTP Basic Authentication.
*/
request.open('POST', url, false, token);

var nfe = {
"natureza_operacao": "Remessa",
"data_emissao": "2018-03-21T11:00:00",
"data_entrada_saida": "2018-03-21T11:00:00",
"tipo_documento": "1",
"finalidade_emissao": "1",
"cnpj_emitente": "51916585000125",
"nome_emitente": "ACME LTDA",
"nome_fantasia_emitente": "ACME LTDA",
"logradouro_emitente": "R. Padre Natal Pigato",
"numero_emitente": "100",
"bairro_emitente": "Santa Felicidade",
"municipio_emitente": "Curitiba",
"uf_emitente": "PR",
"cep_emitente": "82320030",
"inscricao_estadual_emitente": "1234567",
"nome_destinatario": "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",
"cpf_destinatario": "51966818092",
"telefone_destinatario": "1196185555",
"logradouro_destinatario": "Rua S\u00e3o Janu\u00e1rio",
"numero_destinatario": "99",
"bairro_destinatario": "Crespo",
"municipio_destinatario": "Manaus",
"uf_destinatario": "AM",
"pais_destinatario": "Brasil",
"cep_destinatario": "69073178",
"valor_frete": "0.0",
"valor_seguro": "0",
"valor_total": "47.23",
"valor_produtos": "47.23",
"modalidade_frete": "0",
"items": [
    {
      "numero_item": "1",
      "codigo_produto": "1232",
      "descricao": "Cartu00f5es de Visita",
      "cfop": "6923",
      "unidade_comercial": "un",
      "quantidade_comercial": "100",
      "valor_unitario_comercial": "0.4723",
      "valor_unitario_tributavel": "0.4723",
      "unidade_tributavel": "un",
      "codigo_ncm": "49111090",
      "quantidade_tributavel": "100",
      "valor_bruto": "47.23",
      "icms_situacao_tributaria": "400",
      "icms_origem": "0",
      "pis_situacao_tributaria": "07",
      "cofins_situacao_tributaria": "07"
    }
  ]
};

// Aqui fazermos a serializacao do JSON com os dados da nota e enviamos atraves do metodo usado.
request.send(JSON.stringify(nfe));

// Sua aplicacao tera que ser capaz de tratar as respostas da API.
console.log("HTTP code: " + request.status);
console.log("Corpo: " + request.responseText);

Para enviar uma NFe utilize a URL abaixo, alterando o ambiente de produção para homologação, caso esteja emitindo notas de teste.

Envia uma NFe para autorização:

https://api.focusnfe.com.br/v2/nfe?ref=REFERENCIA

Utilize o comando HTTP POST para enviar a sua nota para nossa API. Envie como corpo do POST os dados em formato JSON da nota fiscal.

Nesta etapa, é feita uma primeira validação dos dados da nota. Caso ocorra algum problema, por exemplo, algum campo faltante, formato incorreto ou algum problema com o emitente a nota não será aceita para processamento e será devolvida a mensagem de erro apropriada. Veja a seção erros.

Caso a nota seja validada corretamente, a nota será aceita para processamento. Isto significa que a nota irá para uma fila de processamento onde eventualmente será processada (processamento assíncrono). Com isto, a nota poderá ser autorizada ou ocorrer um erro na autorização, de acordo com a validação da SEFAZ.

Para verificar se a nota já foi autorizada, você terá que efetuar uma consulta ou se utilizar de gatilhos/webhooks.

Reenvio automático em contingência
Caso nossa equipe de monitoramento detecte que o SEFAZ de algum estado esteja fora do ar as requisições são redirecionadas para o ambiente de contingência da SEFAZ do estado. É natural haver uma demora na SEFAZ em disponibilizar esse ambiente (eles realizam este processo manualmente) porém nossa API irá continuar tentando o reenvio até que seja possível, seja pela emissão normal ou em contingência. Isto é feito de forma transparente aos clientes da API.

Porém, pode ocorrer uma situação em que o SEFAZ do estado fique indisponível no meio do processo de emissão de uma NFe. Neste momento nós não temos como saber se a nota foi autorizada ou não, até que a SEFAZ volte a ficar disponível.

Quando isto ocorre nós não esperamos a SEFAZ do estado voltar e reenviamos assim que possível para o ambiente de contingência, autorizando a nota e evitando a espera para o cliente final. Isto tem como efeito colateral que pode ser que a nota original tenha sido autorizada. Nossa API irá automaticamente detectar esta situação e proceder com o cancelamento da tentativa anterior. Por consequência, será natural haver um “pulo” de numeração percebido pelo cliente final.

O sistema cliente da API pode acompanhar este processo de forma transparente, conforme descrito na seção “Consulta” deste manual.

Exemplos de respostas da API por status para a requisição de envio:

autorizado

{
  "cnpj_emitente": "07504505000132",
  "ref": "referencia_000899_nfe",
  "status": "autorizado",
  "status_sefaz": "100",
  "mensagem_sefaz": "Autorizado o uso da NF-e",
  "chave_nfe": "NFe41190607504505000132550010000000221923094166",
  "numero": "22",
  "serie": "1",
  "caminho_xml_nota_fiscal": "/arquivos_development/07504505000132/201906/XMLs/41190607504505000132550010000000221923094166-nfe.xml",
  "caminho_danfe": "/arquivos_development/07504505000132/201906/DANFEs/41190607504505000132550010000000221923094166.pdf"
}
				
			

Envio de uma NFSe

				
					var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

var token = "Token_obtido_no_cadastro_da_empresa";

// Substituir pela sua identificação interna da nota
var ref = "12345";

/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/
var url = "https://homologacao.focusnfe.com.br/v2/nfse?ref=" + ref;

/*
Use o valor 'false', como terceiro parametro para que a requisicao aguarde a resposta da API
Passamos o token como quarto parametro deste metodo, como autenticador do HTTP Basic Authentication.
*/
request.open('POST', url, false, token);

var nfse = {
   "data_emissao":"2018-03-21",
   "prestador":{
      "cnpj":"51916585000125",
      "inscricao_municipal":"12345",
      "codigo_municipio":"3518800"
   },
   "tomador":{
      "cnpj":"07504505000132",
      "razao_social":"Acras Tecnologia da Informacao LTDA",
      "email":"contato@focusnfe.com.br",
      "endereco":{
         "logradouro":"Rua Filho da Rocha Bage",
         "numero":"750",
         "complemento":"Sala 07",
         "bairro":"Alto da Rua XV",
         "codigo_municipio":"4106902",
         "uf":"PR",
         "cep":"80045165"
      }
   },
   "servico":{
      "aliquota":3,
      "discriminacao":"Nota fiscal referente a servicos prestados",
      "iss_retido":"false",
      "item_lista_servico":"1401",
      "codigo_tributario_municipio": "452000100",
      "valor_servicos":1.0
   }
};

// Aqui fazermos a serializacao do JSON com os dados da nota e enviamos atraves do metodo usado.
request.send(JSON.stringify(nfse));

// Sua aplicacao tera que ser capaz de tratar as respostas da API.
console.log("HTTP code: " + request.status);
console.log("Corpo: " + request.responseText);
				
			

Envio de uma NFCe

				
					var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

var token = "Token_obtido_no_cadastro_da_empresa";

// Substituir pela sua identificação interna da nota
var ref = "12345";

/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/
var url = "https://homologacao.focusnfe.com.br/v2/nfce?ref=" + ref;

/*
Use o valor 'false', como terceiro parametro para que a requisicao aguarde a resposta da API
Passamos o token como quarto parametro deste metodo, como autenticador do HTTP Basic Authentication.
*/
request.open('POST', url, false, token);

var nfce = {
"natureza_operacao":"VENDA AO CONSUMIDOR",
"data_emissao":"2018-03-21T11:52:00-03:00",
"tipo_documento":"1",
"presenca_comprador":"1",
"consumidor_final":"1",
"finalidade_emissao":"1",
"cnpj_emitente":"51916585000125",
"nome_destinatario":"",
"cpf_destinatario":"",
"informacoes_adicionais_contribuinte":"RETIRADA POR CONTA DO DESTINATÁRIO",
"valor_produtos":"1.00",
"valor_desconto":"0.00",
"valor_total":"1.00",
"forma_pagamento":"0",
"icms_valor_total":"0",
"modalidade_frete": "9",
"items":[
    {"numero_item":"1",
     "codigo_ncm":"84713012",
     "codigo_produto":"999",
     "descricao":"NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",
     "quantidade_comercial":"1.00",
     "quantidade_tributavel":"1.00",
     "cfop":"5102",
     "valor_unitario_comercial":"1.00",
     "valor_unitario_tributavel":"1.00",
     "valor_bruto":"1.00",
     "unidade_comercial":"un",
     "unidade_tributavel":"un",
     "icms_origem":"2",
     "icms_situacao_tributaria":"102",
     "icms_aliquota":"0",
     "icms_base_calculo":"0",
     "icms_modalidade_base_calculo":"3"
    }
  ],
    "formas_pagamento":[
        {"forma_pagamento":"1",
         "valor_pagamento":"1.00"
        }
    ]
};

// Aqui fazermos a serializacao do JSON com os dados da nota e enviamos atraves do metodo usado.
request.send(JSON.stringify(nfce));

// Sua aplicacao tera que ser capaz de tratar as respostas da API.
console.log("HTTP code: " + request.status);
console.log("Corpo: " + request.responseText);
				
			

Envio de uma CTe

				
					var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

var token = "Token_obtido_no_cadastro_da_empresa";

// Substituir pela sua identificação interno do CTe.
var ref = "12345";

/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/
var url = "https://homologacao.focusnfe.com.br/v2/cte_os?ref=" + ref;

/*
Use o valor 'false', como terceiro parametro para que a requisicao aguarde a resposta da API.
Passamos o token como quarto parametro deste metodo, como autenticador do HTTP Basic Authentication.
*/
request.open('POST', url, false, token);

var cte = {
   "bairro_emitente":"S\u00e3o Cristov\u00e3o",
   "bairro_tomador":"Bacacheri",
   "cep_emitente":"99880077",
   "cep_tomador":"88991188",
   "cfop":"5353",
   "cnpj_emitente":"51916585000125",
   "cnpj_tomador":"51966818092777",
   "codigo_municipio_emitente":"2927408",
   "codigo_municipio_envio":"5200050",
   "codigo_municipio_fim":"3100104",
   "codigo_municipio_inicio":"5200050",
   "codigo_municipio_tomador":"4106902",
   "codigo_pais_tomador":"1058",
   "complemento_emitente":"Andar 19 - sala 23",
   "data_emissao":"2018-06-18T09:17:00",
   "descricao_servico":"Descricao do seu servico aqui",
   "documentos_referenciados":[
      {
         "data_emissao":"2018-06-10",
         "numero":"1",
         "serie":"1",
         "subserie":"1",
         "valor":"1.00"
      }
   ],
   "funcionario_emissor":"Nome do funcionario que fez a emissao",
   "icms_aliquota":"17.00",
   "icms_base_calculo":"1.00",
   "icms_situacao_tributaria":"00",
   "icms_valor":"0.17",
   "indicador_inscricao_estadual_tomador":"9",
   "inscricao_estadual_emitente":"12345678",
   "logradouro_emitente":"Aeroporto Internacional de Salvador",
   "logradouro_tomador":"Rua Jo\u00e3o Dalegrave",
   "modal":"02",
   "municipio_emitente":"Salvador",
   "municipio_envio":"Abadia de Goi\u00e1s",
   "municipio_fim":"Abadia dos Dourados",
   "municipio_inicio":"Abadia de Goi\u00e1s",
   "municipio_tomador":"Curitiba",
   "natureza_operacao":"PREST. DE SERV. TRANSPORTE A ESTAB. COMERCIAL",
   "nome_emitente":"ACME LTDA",
   "nome_fantasia_emitente":"ACME",
   "nome_fantasia_tomador":"Nome do tomador do servico aqui",
   "nome_tomador":"NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",
   "numero_emitente":"S/N",
   "numero_fatura":"1",
   "numero_tomador":"1",
   "pais_tomador":"BRASIL",
   "quantidade":"1.00",
   "seguros_carga":[
      {
         "nome_seguradora":"Nome da seguradora aqui",
         "numero_apolice":"12345",
         "responsavel_seguro":4
      }
   ],
   "telefone_emitente":"4133336666",
   "tipo_documento":0,
   "tipo_servico":6,
   "uf_emitente":"BA",
   "uf_envio":"GO",
   "uf_fim":"MG",
   "uf_inicio":"GO",
   "uf_tomador":"PR",
   "valor_desconto_fatura":"0.00",
   "valor_inss":"0.10",
   "valor_liquido_fatura":"1.00",
   "valor_original_fatura":"1.00",
   "valor_receber":"1.00",
   "valor_total":"1.00",
   "valor_total_tributos":"0.00"
};

// Aqui fazermos a serializacao do JSON com os dados do CTe e enviamos para API.
request.send(JSON.stringify(cte));

// Sua aplicacao tera que ser capaz de tratar as respostas da API.
console.log("HTTP code: " + request.status);
console.log("Corpo: " + request.responseText);
				
			

Manifesto do Destinatário

				
					var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

var token = "Token_obtido_no_cadastro_da_empresa";

var chave = "chave_da_nota_fiscal";

/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/
var url = "https://homologacao.focusnfe.com.br/v2/nfes_recebidas/" + chave + "/manifesto";

/*
Use o valor 'false', como terceiro parametro para que a requisicao aguarde a resposta da API
Passamos o token como quarto parametro deste metodo, como autenticador do HTTP Basic Authentication.
*/
request.open('POST', url, false, token);

var manifesto = {

  "tipo": "ciencia"
};

// Aqui fazermos a serializacao do JSON com os dados da nota e enviamos atraves do metodo usado.
request.send(JSON.stringify(manifesto));

// Sua aplicacao tera que ser capaz de tratar as respostas da API.
console.log("HTTP code: " + request.status);
console.log("Corpo: " + request.responseText);
				
			

A integração com nossa API é simples e rápida e nossa documentação aberta e objetiva. Tudo isso pensando na sua economia de tempo.

Deseja testar nossa API?

Solicite um contato comercial e teremos prazer em ajudar.