paypal-frete-facil - Gem para cálculo de frete do PayPal Frete Fácil
O PayPal Frete Fácil é um serviço onde você tem desconto a partir de 30% no valor do frete, em relação ao valor de balcão do SEDEX dos Correios, para vendas feitas pelo PayPal.

Você escolhe a transação de venda feita pelo PayPal, paga o frete pelo site, imprime a etiqueta que deve ser colada no pacote das mercadorias e posta em uma agência dos Correios conveniada.
O PayPal disponibiliza um Web Service para fazer o cálculo do PayPal Frete Fácil nos carrinhos de compra de lojas virtuais. Criei a gem paypal-frete-facil que consome esse Web Service.
Abaixo estão todos os detalhes de como instalar e utilizar a gem paypal-frete-facil.
Instalando
Gemfile:
gem 'paypal-frete-facil'
Instalação direta:
$ gem install paypal-frete-facil
Usando
require 'paypal-frete-facil'
shipping = PayPal::FreteFacil::Shipping.new :from_zip => "04094-050",
:to_zip => "90619-900",
:width => 15,
:height => 2,
:length => 30,
:weight => 0.3
result = shipping.calculate
result.value # => 14.77
Verificação de sucesso e erro:
shipping.height = 200 result = shipping.calculate result.success? # => false result.error? # => true result.error_message # => "Não foi possível calcular o frete." result.value # => 0
Usando a interface pública em português:
frete = PayPal::FreteFacil::Frete.new :cep_origem => "04094-050",
:cep_destino => "90619-900",
:largura => 15,
:altura => 2,
:comprimento => 30,
:peso => 0.3
resultado = frete.calcular
resultado.valor # => 14.77
resultado.sucesso? # => true
resultado.erro? # => false
resultado.mensagem_erro # => ""
Log
Por padrão, cada chamada ao Web Service do PayPal Frete Fácil é logada em STDOUT, com nível de log :info, usando a gem LogMe.
Exemplo de log:
I, [2011-08-29T22:00:52.624430 #2186] INFO — : PayPal-Frete-Facil Request:
POST https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:frete=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><soapenv:Header /><soapenv:Body><frete:getPreco><cepOrigem>04094-050</cepOrigem><cepDestino>90619-900</cepDestino><largura>15</largura><altura>2</altura><profundidade>30</profundidade><peso>0.3</peso></frete:getPreco></soapenv:Body></soapenv:Envelope>
I, [2011-08-29T22:00:53.917895 #2186] INFO — : PayPal-Frete-Facil Response:
HTTP/1.1 200 OK
<?xml version=’1.0′ encoding=’UTF-8′?><S:Envelope xmlns:S=”http://schemas.xmlsoap.org/soap/envelope/”><S:Body><ns2:getPrecoResponse xmlns:ns2=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><return>13.873999999999999</return></ns2:getPrecoResponse></S:Body></S:Envelope>
Se você configurar o nível de log como :debug, serão logados também todos os cabeçalhos HTTP da requisição e da resposta:
D, [2011-08-29T22:00:52.624430 #2186] DEBUG — : PayPal-Frete-Facil Request:
POST https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal
accept: */*
user-agent: Ruby
content-type: text/xml; charset=utf-8
soapaction: https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal/getPreco
<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:frete=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><soapenv:Header /><soapenv:Body><frete:getPreco><cepOrigem>04094-050</cepOrigem><cepDestino>90619-900</cepDestino><largura>15</largura><altura>2</altura><profundidade>30</profundidade><peso>0.3</peso></frete:getPreco></soapenv:Body></soapenv:Envelope>
D, [2011-08-29T22:00:53.917895 #2186] DEBUG — : PayPal-Frete-Facil Response:
HTTP/1.1 200 OK
date: Tue, 30 Aug 2011 01:00:52 GMT
server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_jk/1.2.30
content-length: 271
content-type: text/xml;charset=utf-8
set-cookie: ROUTEID=.2; path=/
connection: close
<?xml version=’1.0′ encoding=’UTF-8′?><S:Envelope xmlns:S=”http://schemas.xmlsoap.org/soap/envelope/”><S:Body><ns2:getPrecoResponse xmlns:ns2=”https://ff.paypal-brasil.com.br/FretesPayPalWS”><return>13.873999999999999</return></ns2:getPrecoResponse></S:Body></S:Envelope>
Para desabilitar o log, mudar o nível do log ou configurar um outro mecanismo de log, use o módulo PayPal::FreteFacil.
PayPal::FreteFacil.configure do |config| config.log_enabled = false # Desabilita o log config.log_level = :debug # Altera o nível do log config.logger = Rails.logger # Usa o logger do Rails end
Informações adicionais
Maneiras de configurar atributos no construtor de PayPal::FreteFacil::Shipping (o mesmo vale para a classe PayPal::FreteFacil::Frete)
Com um hash:
shipping = PayPal::FreteFacil::Shipping.new :from_zip => "04094-050",
:to_zip => "90619-900",
:width => 15,
:height => 2,
:length => 30,
:weight => 0.3
Com um bloco:
shipping = PayPal::FreteFacil::Shipping.new do |s| s.from_zip = "04094-050" s.to_zip = "90619-900" s.width = 15 s.height = 2 s.length = 30 s.weight = 0.3 end
Atributos de PayPal::FreteFacil::Shipping
- String:
from_zip, to_zip - Fixnum:
width, height, length - Float:
weight
Observações da classe PayPal::FreteFacil::Shipping
- Os atributos width, height e length também aceitam valores com casas decimais (float), mas para fazer o cálculo do frete será feito um round de seus valores.
Atributos de PayPal::FreteFacil::Frete
- String:
cep_origem, cep_destino - Fixnum:
largura, altura, comprimento - Float:
peso
Observações da classe PayPal::FreteFacil::Frete
- Os atributos largura, altura e comprimento também aceitam valores com casas decimais (float), mas para fazer o cálculo do frete será feito um round de seus valores.
Código no Github
https://github.com/prodis/paypal-frete-facil



Comentários