Integração

Exemplo de código em 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.
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-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

# 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

# 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

# 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

Faça parte você também

Junte-se à comunidade de desenvolvedores que deu adeus à burocracia das notas fiscais.

Fale Conosco
Entre em contato conosco!

Deseja automatizar a gestão de notas em seu sistema? A Focus NFe é a melhor solução!

Quer saber mais? Entre em contato conosco.