Exemplo de código em Ruby

Sobre o Ruby

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.

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 Ruby utilizando a nossa API.

Envio de uma NFe

				
					# encoding: UTF-8

require "net/http"
require "net/https"
require "json"

# token enviado pelo suporte
token = "codigo_alfanumerico_token"

# referência da nota - deve ser única para cada nota enviada
ref = "id_referencia_nota"

# endereço da api que deve ser usado conforme o ambiente: produção ou homologação
servidor_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_producao
url_envio = servidor_homologacao + "v2/nfe?ref=" + ref

# altere os campos conforme a nota que será enviada
dados_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 nota
uri = URI(url_envio)

# também criamos um objeto da classe HTTP a partir do host da uri
http = Net::HTTP.new(uri.hostname, uri.port)

# aqui criamos um objeto da classe Post a partir da uri de requisição
requisicao = Net::HTTP::Post.new(uri.request_uri)

# adicionando o token à requisição
requisicao.basic_auth(token, "")

# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisição
requisicao.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 resposta
resposta = http.request(requisicao)

# imprimindo o código HTTP da resposta
puts "Código retornado pela requisição: " + resposta.code

# imprimindo o corpo da resposta
puts "Corpo da resposta: " + resposta.body

				
			

Envio de uma NFSe

				
					# encoding: UTF-8

require "net/http"
require "net/https"
require "json"

# token enviado pelo suporte
token = "codigo_alfanumerico_token"

# referência da nota - deve ser única para cada nota enviada
ref = "id_referencia_nota"

# endereço da api que deve ser usado conforme o ambiente: produção ou homologação
servidor_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_producao
url_envio = servidor_homologacao + "v2/nfse?ref=" + ref

# altere os campos conforme a nota que será enviada
dados_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 nota
uri = URI(url_envio)

# também criamos um objeto da classe HTTP a partir do host da uri
http = Net::HTTP.new(uri.hostname, uri.port)

# aqui criamos um objeto da classe Post a partir da uri de requisição
requisicao = Net::HTTP::Post.new(uri.request_uri)

# adicionando o token à requisição
requisicao.basic_auth(token, '')

# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisição
requisicao.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 resposta
resposta = http.request(requisicao)

# imprimindo o código HTTP da resposta
puts "Código retornado pela requisição: " + resposta.code

# imprimindo o corpo da resposta
puts "Corpo da resposta: " + resposta.body
				
			

Envio de uma NFCe

				
					# encoding: UTF-8

require "net/http"
require "net/https"
require "json"

# token enviado pelo suporte
token = "codigo_alfanumerico_token"

# referência da nota - deve ser única para cada nota enviada
ref = "id_referencia_nota"

# endereço da api que deve ser usado conforme o ambiente: produção ou homologação
servidor_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_producao
url_envio = servidor_homologacao + "v2/nfce?ref=" + ref

# altere os campos conforme a nota que será enviada
dados_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 nota
uri = URI(url_envio)

# também criamos um objeto da classe HTTP a partir do host da uri
http = Net::HTTP.new(uri.hostname, uri.port)

# aqui criamos um objeto da classe Post a partir da uri de requisição
requisicao = Net::HTTP::Post.new(uri.request_uri)

# adicionando o token à requisição
requisicao.basic_auth(token, '')

# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisição
requisicao.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 resposta
resposta = http.request(requisicao)

# imprimindo o código HTTP da resposta
puts "Código retornado pela requisição: " + resposta.code

# imprimindo o corpo da resposta
puts "Corpo da resposta: " + resposta.body
				
			

Envio de uma CTe

				
					# encoding: UTF-8

require "net/http"
require "net/https"
require "json"

# token enviado pelo suporte
token = "codigo_alfanumerico_token"

# referência da nota - deve ser única para cada nota enviada
ref = "id_referencia_nota"

# endereço da api que deve ser usado conforme o ambiente: produção ou homologação
servidor_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_producao
url_envio = servidor_homologacao + "v2/cte?ref=" + ref

# altere os campos conforme a nota que será enviada
cte = {
  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 nota
uri = URI(url_envio)

# também criamos um objeto da classe HTTP a partir do host da uri
http = Net::HTTP.new(uri.hostname, uri.port)

# aqui criamos um objeto da classe Post a partir da uri de requisição
requisicao = Net::HTTP::Post.new(uri.request_uri)

# adicionando o token à requisição
requisicao.basic_auth(token, "")

# convertemos os dados da nota para o formato JSON e adicionamos ao corpo da requisição
requisicao.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 resposta
resposta = http.request(requisicao)

# imprimindo o código HTTP da resposta
puts "Código retornado pela requisição: " + resposta.code

# imprimindo o corpo da resposta
puts "Corpo da resposta: " + resposta.body
				
			

Manifesto do Destinatário

				
					# encoding: UTF-8

require "net/http"
require "net/https"
require "json"

# token enviado pelo suporte
token = "codigo_alfanumerico_token"

chave = "chave_de_identificacao_da_NFe"

# endereço da api que deve ser usado conforme o ambiente: produção ou homologação
servidor_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_producao
url_envio = servidor_homologacao + "v2/nfes_recebidas/" + chave + "/manifesto"

# altere os campos conforme a nota que será enviada
tipo_manifestacao = {
  tipo: "nao_realizada",
}

# caso escolha o tipo "nao_realizada", é preciso informar o campo/chave "justificativa"
# justificativa: "Informe aqui a sua justificativa do motivo da não realização da operação."

# criamos um objeto uri para envio da nota
uri = URI(url_envio)

# também criamos um objeto da classe HTTP a partir do host da uri
http = Net::HTTP.new(uri.hostname, uri.port)

# aqui criamos um objeto da classe Post a partir da uri de requisição
requisicao = Net::HTTP::Post.new(uri.request_uri)

# adicionando o token à requisição
requisicao.basic_auth(token, '')

# convertemos a hash de justificativa do cancelamento para o formato JSON e adicionamos ao corpo da requisição
requisicao.body = tipo_manifestacao.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 resposta
resposta = http.request(requisicao)

# imprimindo o código HTTP da resposta
puts "Código retornado pela requisição: " + resposta.code

# imprimindo o corpo da resposta
puts "Corpo da resposta: " + resposta.body
				
			

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.