class PayPal::FreteFacil::WebService

Constants

URL

Public Class Methods

new(shipping) click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 10
def initialize(shipping)
  @uri = URI.parse(URL)
  @shipping = shipping
end

Public Instance Methods

request!() click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 15
def request!
  http = build_http

  request = build_request
  log_request(request)

  response = http.request(request)
  log_response(response)

  response.body
end

Private Instance Methods

build_http() click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 29
def build_http
  http = Net::HTTP.new(@uri.host, @uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http
end
build_request() click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 36
def build_request
  request = Net::HTTP::Post.new(@uri.path)
  request["Content-Type"] = "text/xml; charset=utf-8"
  request["SoapAction"] = "#{URL}/getPreco"
  request.body = request_body
  request
end
format_headers_for(http) click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 84
def format_headers_for(http)
  # I'm using an empty block in each_header method for Ruby 1.8.7 compatibility.
  http.each_header{}.map { |name, values| "#{name}: #{values.first}" }.join("\n")
end
format_message(http) { || ... } click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 78
def format_message(http)
  message = yield
  message << with_line_break { format_headers_for(http) } if PayPal::FreteFacil.log_level == :debug
  message << with_line_break { http.body }
end
log_request(request) click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 60
def log_request(request)
  message = format_message(request) do
    message =  with_line_break { "PayPal-Frete-Facil Request:" }
    message << with_line_break { "POST #{URL}" }
  end

  PayPal::FreteFacil.log(message)
end
log_response(response) click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 69
def log_response(response)
  message = format_message(response) do
    message =  with_line_break { "PayPal-Frete-Facil Response:" }
    message << with_line_break { "HTTP/#{response.http_version} #{response.code} #{response.message}" }
  end

  PayPal::FreteFacil.log(message)
end
request_body() click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 44
def request_body
  "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:shipping=\"https://ff.paypal-brasil.com.br/FretesPayPalWS\">" +
    "<soapenv:Header />" +
    "<soapenv:Body>" +
      "<shipping:getPreco>" +
        "<cepOrigem>#{@shipping.from_zip}</cepOrigem>" +
        "<cepDestino>#{@shipping.to_zip}</cepDestino>" +
        "<largura>#{@shipping.width.round}</largura>" +
        "<altura>#{@shipping.height.round}</altura>" +
        "<profundidade>#{@shipping.length.round}</profundidade>" +
        "<peso>#{@shipping.weight}</peso>" +
      "</shipping:getPreco>" +
    "</soapenv:Body>" +
  "</soapenv:Envelope>"
end
with_line_break() click to toggle source
# File lib/paypal/fretefacil/web_service.rb, line 89
def with_line_break
  "#{yield}\n"
end