O Ruby é uma linguagem com um cuidadoso equilíbrio. O seu criador, Yukihiro “Matz” Matsumoto, uniu partes das suas linguagens favoritas (Perl, Smalltalk, Eiffel, Ada e Lisp) para formar uma nova linguagem que equilibra a programação funcional com a programação imperativa.
A emissão de NFe, NFSe ou NFCe utilizando Ruby 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 Ruby utilizando a nossa API.
# encoding: UTF-8require"net/http"require"net/https"require"json"# token enviado pelo suportetoken="codigo_alfanumerico_token"# referência da nota - deve ser única para cada nota enviadaref="id_referencia_nota"# endereço da api que deve ser usado conforme o ambiente: produção ou homologaçãoservidor_producao="https://api.focusnfe.com.br/"servidor_homologacao="https://homologacao.focusnfe.com.br/"# no caso do ambiente de envio ser em produção, utilizar servidor_producaourl_envio=servidor_homologacao+"v2/nfe?ref="+ref# altere os campos conforme a nota que será enviadadados_da_nota={natureza_operacao: "Remessa",data_emissao: "2017-11-30T12:00:00",data_entrada_saida: "2017-11-3012: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: "101942171617",nome_destinatario: "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",cpf_destinatario: "51966818092",telefone_destinatario: "1196185555",logradouro_destinatario: "Rua Sao Januario",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"]}# criamos um objeto uri para envio da notauri=URI(url_envio)# também criamos um objeto da classe HTTP a partir do host da urihttp=Net::HTTP.new(uri.hostname,uri.port)# aqui criamos um objeto da classe Post a partir da uri de requisiçãorequisicao=Net::HTTP::Post.new(uri.request_uri)# adicionando o token à requisiçãorequisicao.basic_auth(token,"")# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisiçãorequisicao.body=dados_da_nota.to_json# no envio de notas em produção, é necessário utilizar o protocolo ssl# para isso, basta retirar o comentário da linha abaixo# http.use_ssl = true# aqui enviamos a requisição ao servidor e obtemos a respostaresposta=http.request(requisicao)# imprimindo o código HTTP da respostaputs"Código retornado pela requisição: "+resposta.code# imprimindo o corpo da respostaputs"Corpo da resposta: "+resposta.body
# encoding: UTF-8require"net/http"require"net/https"require"json"# token enviado pelo suportetoken="codigo_alfanumerico_token"# referência da nota - deve ser única para cada nota enviadaref="id_referencia_nota"# endereço da api que deve ser usado conforme o ambiente: produção ou homologaçãoservidor_producao="https://api.focusnfe.com.br/"servidor_homologacao="https://homologacao.focusnfe.com.br/"# no caso do ambiente de envio ser em produção, utilizar servidor_producaourl_envio=servidor_homologacao+"v2/nfse?ref="+ref# altere os campos conforme a nota que será enviadadados_da_nota={data_emissao: "2017-09-21T22:15:00",prestador: {cnpj: "18765499000199",inscricao_municipal: "12345",codigo_municipio: "3516200"},tomador: {cnpj: "07504505000132",razao_social: "Acras Tecnologia da Informação LTDA",email: "contato@focusnfe.com.br",endereco: {logradouro: "Rua Dias da Rocha Filho",numero: "999",complemento: "Prédio 04 - Sala 34C",bairro: "Alto da XV",codigo_municipio: "4106902",uf: "PR",cep: "80045165"}},servico: {aliquota: 3,discriminacao: "Nota fiscal referente a serviços prestados",iss_retido: "false",item_lista_servico: "0107",codigo_tributario_municipio: "620910000",valor_servicos: 1.0}}# criamos um objeto uri para envio da notauri=URI(url_envio)# também criamos um objeto da classe HTTP a partir do host da urihttp=Net::HTTP.new(uri.hostname,uri.port)# aqui criamos um objeto da classe Post a partir da uri de requisiçãorequisicao=Net::HTTP::Post.new(uri.request_uri)# adicionando o token à requisiçãorequisicao.basic_auth(token,'')# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisiçãorequisicao.body=dados_da_nota.to_json# no envio de notas em produção, é necessário utilizar o protocolo ssl# para isso, basta retirar o comentário da linha abaixo# http.use_ssl = true# aqui enviamos a requisição ao servidor e obtemos a respostaresposta=http.request(requisicao)# imprimindo o código HTTP da respostaputs"Código retornado pela requisição: "+resposta.code# imprimindo o corpo da respostaputs"Corpo da resposta: "+resposta.body
# encoding: UTF-8require"net/http"require"net/https"require"json"# token enviado pelo suportetoken="codigo_alfanumerico_token"# referência da nota - deve ser única para cada nota enviadaref="id_referencia_nota"# endereço da api que deve ser usado conforme o ambiente: produção ou homologaçãoservidor_producao="https://api.focusnfe.com.br/"servidor_homologacao="https://homologacao.focusnfe.com.br/"# no caso do ambiente de envio ser em produção, utilizar servidor_producaourl_envio=servidor_homologacao+"v2/nfce?ref="+ref# altere os campos conforme a nota que será enviadadados_da_nota={cnpj_emitente: "05953016000132",data_emissao: "2017-12-06 14:45:10",indicador_inscricao_estadual_destinatario: "9",modalidade_frete: "9",local_destino: "1",presenca_comprador: "1",natureza_operacao: "VENDA AO CONSUMIDOR",items: [numero_item: "1",codigo_ncm: "62044200",quantidade_comercial: "1.00",quantidade_tributavel: "1.00",cfop: "5102",valor_unitario_tributavel: "79.00",valor_unitario_comercial: "79.00",valor_desconto: "0.00",descricao: "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",codigo_produto: "251887",icms_origem: "0",icms_situacao_tributaria: "102",unidade_comercial: "un",unidade_tributavel: "un",valor_total_tributos: "24.29"],formas_pagamento: [forma_pagamento: "03",valor_pagamento: "79.00",nome_credenciadora: "Cielo",bandeira_operadora: "02",numero_autorizacao: "R07242"]}# criamos um objeto uri para envio da notauri=URI(url_envio)# também criamos um objeto da classe HTTP a partir do host da urihttp=Net::HTTP.new(uri.hostname,uri.port)# aqui criamos um objeto da classe Post a partir da uri de requisiçãorequisicao=Net::HTTP::Post.new(uri.request_uri)# adicionando o token à requisiçãorequisicao.basic_auth(token,'')# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisiçãorequisicao.body=dados_da_nota.to_json# no envio de notas em produção, é necessário utilizar o protocolo ssl# para isso, basta retirar o comentário da linha abaixo# http.use_ssl = true# aqui enviamos a requisição ao servidor e obtemos a respostaresposta=http.request(requisicao)# imprimindo o código HTTP da respostaputs"Código retornado pela requisição: "+resposta.code# imprimindo o corpo da respostaputs"Corpo da resposta: "+resposta.body
# encoding: UTF-8require"net/http"require"net/https"require"json"# token enviado pelo suportetoken="codigo_alfanumerico_token"# referência da nota - deve ser única para cada nota enviadaref="id_referencia_nota"# endereço da api que deve ser usado conforme o ambiente: produção ou homologaçãoservidor_producao="https://api.focusnfe.com.br/"servidor_homologacao="https://homologacao.focusnfe.com.br/"# no caso do ambiente de envio ser em produção, utilizar servidor_producaourl_envio=servidor_homologacao+"v2/cte?ref="+ref# altere os campos conforme a nota que será enviadacte={bairro_emitente: "Sao Cristovao",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 Joao Dalegrave",modal: "02",municipio_emitente: "Salvador",municipio_envio: "Abadia de Goias",municipio_fim: "Abadia dos Dourados",municipio_inicio: "Abadia de Goias",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"}# criamos um objeto uri para envio da notauri=URI(url_envio)# também criamos um objeto da classe HTTP a partir do host da urihttp=Net::HTTP.new(uri.hostname,uri.port)# aqui criamos um objeto da classe Post a partir da uri de requisiçãorequisicao=Net::HTTP::Post.new(uri.request_uri)# adicionando o token à requisiçãorequisicao.basic_auth(token,"")# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisiçãorequisicao.body=cte.to_json# no envio de notas em produção, é necessário utilizar o protocolo ssl# para isso, basta retirar o comentário da linha abaixo# http.use_ssl = true# aqui enviamos a requisição ao servidor e obtemos a respostaresposta=http.request(requisicao)# imprimindo o código HTTP da respostaputs"Código retornado pela requisição: "+resposta.code# imprimindo o corpo da respostaputs"Corpo da resposta: "+resposta.body
Faça parte você também
Junte-se à comunidade de desenvolvedores que deu adeus à burocracia das notas fiscais.