Skip to content

Instantly share code, notes, and snippets.

@acras
Created September 6, 2016 01:59
Show Gist options
  • Save acras/c4ee98f141b08fc2539adc341c7dc648 to your computer and use it in GitHub Desktop.
Save acras/c4ee98f141b08fc2539adc341c7dc648 to your computer and use it in GitHub Desktop.
Exemplo de envio de NFSe utilizando a API do Focus Lojas em Ruby
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment