Sha256: f7fc2687032f48c2c6cd903ec254605b6c1a3698776edf9e673581f0e12f9405

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

# encoding: UTF-8
require 'net/http'
require 'uri'

class Correios::Frete::WebService
  URL = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx"
  FORMATS = { :caixa_pacote => 1, :rolo_prisma => 2 }
  CONDITIONS = { true => "S", false => "N" }

  def request(frete, service_types)
    Net::HTTP.get(URI.parse("#{URL}?#{params_for(frete, service_types)}"))
  end

  private

  def params_for(frete, service_types)
    "sCepOrigem=#{frete.cep_origem}&" +
    "sCepDestino=#{frete.cep_destino}&" +
    "nVlPeso=#{frete.peso}&" +
    "nVlComprimento=#{frete.comprimento}&" +
    "nVlAltura=#{frete.altura}&" +
    "nVlLargura=#{frete.largura}&" +
    "nVlDiametro=#{frete.diametro}&" +
    "nCdFormato=#{FORMATS[frete.formato]}&" +
    "sCdMaoPropria=#{CONDITIONS[frete.mao_propria]}&" +
    "sCdAvisoRecebimento=#{CONDITIONS[frete.aviso_recebimento]}&" +
    "nVlValorDeclarado=#{frete.valor_declarado}&" +
    "nCdServico=#{service_codes_for(service_types)}&" +
    "nCdEmpresa=#{frete.codigo_empresa}&" +
    "sDsSenha=#{frete.senha}&" +
    "StrRetorno=xml"
  end

  def service_codes_for(service_types)
    service_types.map { |type| Correios::Frete::Servico.code_from_type(type) }.join(",")
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
correios-frete-0.3.0 lib/correios/frete/web_service.rb
correios-frete-0.2.1 lib/correios/frete/web_service.rb
correios-frete-0.2.0 lib/correios/frete/web_service.rb