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.

PayPal Frete Facil

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 =&amp;amp;gt; &amp;amp;quot;04094-050&amp;amp;quot;,
                                              :to_zip =&amp;amp;gt; &amp;amp;quot;90619-900&amp;amp;quot;,
                                              :width =&amp;amp;gt; 15,
                                              :height =&amp;amp;gt; 2,
                                              :length =&amp;amp;gt; 30,
                                              :weight =&amp;amp;gt; 0.3

Com um bloco:

shipping = PayPal::FreteFacil::Shipping.new do |s|
  s.from_zip = &amp;amp;quot;04094-050&amp;amp;quot;
  s.to_zip = &amp;amp;quot;90619-900&amp;amp;quot;
  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

Gem no RubyGems.org

https://rubygems.org/gems/paypal-frete-facil

  1. 19, março, 2014 em 15:46 | #1

    Prezado, gostaria muito de usar em meu site este sistema porque já aceito o pagamento via PayPal e somente esta forma de pagamento, criei uma loja basica e não tem sistema dos correios instalado nela, você poderia me ajudar a incluir no meu site ? ficaria muito agradecido. Iliano

  2. 5, setembro, 2014 em 11:32 | #2

    Gostaria de saber onde instalo os códigos pois em todos os sites que encontro eles os vejo jogados sem um direcionamento certo, por exemplo: “o primeiro no xml acima da tag o segundo na pagina de fechamento de carrinho” estou quase desistindo de calculo de frete por conta dessas faltas de informações… :/ teria como explicar como instalo os códigos? desde já agradeço.

  3. 8, dezembro, 2014 em 00:03 | #3

    @Priscilla
    O que posso lhe ajudar é com a gem em Ruby que eu desenvolvi. A sua aplicação é em Ruby?

  1. 8, maio, 2012 em 00:10 | #1