Ruby é uma linguagem de programação que foi amplamente popularizada pelo seu framework mais popular, o Rails.
Inclusive os nossos sistemas Focus Lojas e Focus NFe foram desenvolvidos em Rails.
A API do Focus NFe pode ser integrada com qualquer linguagem de programação para emitir NFSe para centenas de cidades de forma muito ágil.
É claro que não poderíamos deixar de confeccionar um exemplo de integração com nossa API utilizando Ruby, veja abaixo.
# encoding: utf-8 | |
require 'net/http' | |
require 'yaml' | |
# Você deve definir isso globalmente para sua aplicação | |
host = 'homologacao.acrasnfe.acras.com.br' | |
token = "SEU_TOKEN_DE_ACESSO" | |
nfse = { | |
'data_emissao' => '2013-05-31T12:00:00', | |
'incentivador_cultural' => false, | |
'natureza_operacao' => '1', | |
'optante_simples_nacional' => false, | |
'regime_especial_tributacao' => '1', | |
'status' => '1', | |
'prestador' => { | |
'cnpj' => 'SEU_CNPJ', | |
'inscricao_municipal' => '1234', | |
'codigo_municipio' => '4106902', | |
}, | |
'servico' => { | |
'aliquota' => 0.05, | |
'base_calculo' => 200.0, | |
'discriminacao' => 'SUPORTE TECNICO, MANUTENCAO E OUTROS SERVICOS EM TECNOLOGIA DA INFORMACAO', | |
'iss_retido' => false, | |
'item_lista_servico' => '1.07', | |
'valor_iss' => 10.0, | |
'valor_liquido' => 200.0, | |
'valor_servicos' => 200.0, | |
'valor_deducoes' => 0, | |
'valor_pis' => 0, | |
'valor_cofins' => 0, | |
'valor_inss' => 0, | |
'valor_ir' => 0, | |
'valor_csll' => 0, | |
'valor_iss_retido' => 0, | |
'outras_retencoes' => 0, | |
'desconto_incondicionado' => 0, | |
'desconto_condicionado' => 0, | |
'codigo_tributario_municipio' => '6209100', | |
'codigo_municipio' => '4106902', | |
}, | |
'tomador' => { | |
'cpf' => '03055054911', | |
'razao_social' => 'Egon Hilgenstieler', | |
'endereco' => { | |
'bairro' => 'Centro', | |
'cep' => '80000000', | |
'codigo_municipio' => '4106902', | |
'logradouro' => 'Rua Emiliano Perneta', | |
'numero' => '845', | |
'uf' => 'PR' | |
} | |
} | |
} | |
puts "==> Teste de envio" | |
# A referência é uma string que identifica univocamente uma NFSe e | |
# será usada para consultas posteriores | |
ref = '123' | |
res = Net::HTTP.start(host, 80) do |http| | |
http.post("/nfse?token=#{token}&ref=#{ref}", nfse.to_yaml) | |
end | |
puts res.code, res.body | |
# O processo de envio de NFSe é assíncrono, e pode ser necessário | |
# aguardar até que a nota seja processada | |
sleep 10 | |
puts "==> Teste de consulta" | |
res = Net::HTTP.start(host, 80) do |http| | |
http.get("/nfse/#{ref}?token=#{token}") | |
end | |
puts res.code, res.body | |
puts "==> Teste de cancelamento" | |
res = Net::HTTP.start(host, 80) do |http| | |
http.delete("/nfse/#{ref}?token=#{token}") | |
end | |
puts res.code, res.body | |
# após o cancelamento, devemos fazer uma nova consulta para verificar | |
# se houve sucesso | |
sleep 10 | |
res = Net::HTTP.start(host, 80) do |http| | |
http.get("/nfse/#{ref}?token=#{token}") | |
end | |
puts res.code, res.body |