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.
A 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.
varXMLHttpRequest=require("xmlhttprequest").XMLHttpRequest;varrequest=newXMLHttpRequest();vartoken="Token_obtido_no_cadastro_da_empresa";// Substituir pela sua identificação interna da nota.varref="12345";/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/varurl="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);varnfe={"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);ParaenviarumaNFeutilizeaURLabaixo,alterandooambientedeproduçãoparahomologação,casoestejaemitindonotasdeteste.EnviaumaNFeparaautorização:https://api.focusnfe.com.br/v2/nfe?ref=REFERENCIAUtilizeocomandoHTTPPOSTparaenviarasuanotaparanossaAPI.EnviecomocorpodoPOSTosdadosemformatoJSONdanotafiscal.Nestaetapa,éfeitaumaprimeiravalidaçãodosdadosdanota.Casoocorraalgumproblema,porexemplo,algumcampofaltante,formatoincorretooualgumproblemacomoemitenteanotanãoseráaceitaparaprocessamentoeserádevolvidaamensagemdeerroapropriada.Vejaaseçãoerros.Casoanotasejavalidadacorretamente,anotaseráaceitaparaprocessamento.Istosignificaqueanotairáparaumafiladeprocessamentoondeeventualmenteseráprocessada (processamentoassíncrono).Comisto,anotapoderáserautorizadaouocorrerumerronaautorização,deacordocomavalidaçãodaSEFAZ.Paraverificarseanotajáfoiautorizada,vocêteráqueefetuarumaconsultaouseutilizardegatilhos/webhooks.ReenvioautomáticoemcontingênciaCasonossaequipedemonitoramentodetectequeoSEFAZdealgumestadoestejaforadoarasrequisiçõessãoredirecionadasparaoambientedecontingênciadaSEFAZdoestado.ÉnaturalhaverumademoranaSEFAZemdisponibilizaresseambiente (elesrealizamesteprocessomanualmente)porémnossaAPIirácontinuartentandooreenvioatéquesejapossível,sejapelaemissãonormalouemcontingência.IstoéfeitodeformatransparenteaosclientesdaAPI.Porém,podeocorrerumasituaçãoemqueoSEFAZdoestadofiqueindisponívelnomeiodoprocessodeemissãodeumaNFe.Nestemomentonósnãotemoscomosaberseanotafoiautorizadaounão,atéqueaSEFAZvolteaficardisponível.QuandoistoocorrenósnãoesperamosaSEFAZdoestadovoltarereenviamosassimquepossívelparaoambientedecontingência,autorizandoanotaeevitandoaesperaparaoclientefinal.Istotemcomoefeitocolateralquepodeserqueanotaoriginaltenhasidoautorizada.NossaAPIiráautomaticamentedetectarestasituaçãoeprocedercomocancelamentodatentativaanterior.Porconsequência,seránaturalhaverum“pulo”denumeraçãopercebidopeloclientefinal.OsistemaclientedaAPIpodeacompanharesteprocessodeformatransparente,conformedescritonaseção“Consulta”destemanual.ExemplosderespostasdaAPIporstatusparaarequisiçãodeenvio: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"}
varXMLHttpRequest=require("xmlhttprequest").XMLHttpRequest;varrequest=newXMLHttpRequest();vartoken="Token_obtido_no_cadastro_da_empresa";// Substituir pela sua identificação interna da notavarref="12345";/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/varurl="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);varnfse={"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);
varXMLHttpRequest=require("xmlhttprequest").XMLHttpRequest;varrequest=newXMLHttpRequest();vartoken="Token_obtido_no_cadastro_da_empresa";// Substituir pela sua identificação interna da notavarref="12345";/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/varurl="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);varnfce={"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);
varXMLHttpRequest=require("xmlhttprequest").XMLHttpRequest;varrequest=newXMLHttpRequest();vartoken="Token_obtido_no_cadastro_da_empresa";// Substituir pela sua identificação interno do CTe.varref="12345";/*
Para ambiente de producao use a URL abaixo:
"https://api.focusnfe.com.br"
*/varurl="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);varcte={"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);
Faça parte você também
Junte-se à comunidade de desenvolvedores que deu adeus à burocracia das notas fiscais.