class OffsitePayments::Integrations::PagSeguro::Helper
Public Class Methods
new(order_id, account, options)
click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/pag_seguro.rb, line 49 def initialize(order_id, account, options) super @account = account add_field('itemAmount1', sprintf("%0.02f", options[:amount])) add_field('itemId1', '1') add_field('itemQuantity1', '1') add_field('shippingType', '3') add_field('currency', 'BRL') end
Public Instance Methods
area_code_and_number(phone)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 118 def area_code_and_number(phone) return if phone.nil? phone.gsub!(/[^\d]/, '') ddd = phone.slice(0..1) number = phone.slice(2..12) [ddd, number] end
check_for_errors(response, xml)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 128 def check_for_errors(response, xml) return if response.code == "200" case response.code when "400" raise ActionViewHelperError, humanize_errors(xml) when "401" raise ActionViewHelperError, "Token do PagSeguro inválido." else raise ActiveUtils::ResponseError, response end end
customer(params = {})
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 87 def customer(params = {}) full_name = remove_excessive_whitespace("#{params[:first_name]} #{params[:last_name]}") if phone = area_code_and_number(params[:phone]) add_field("senderAreaCode", phone[0]) add_field("senderPhone", phone[1]) end add_field("senderEmail", params[:email]) add_field('senderName', full_name) end
extract_token(xml)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 141 def extract_token(xml) xml.css("code").text end
fetch_token()
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 99 def fetch_token uri = URI.parse(PagSeguro.invoicing_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.request_uri) request.content_type = "application/x-www-form-urlencoded" request.set_form_data @fields response = http.request(request) xml = Nokogiri::XML.parse(response.body) check_for_errors(response, xml) extract_token(xml) rescue Timeout::Error, Errno::ECONNRESET, Errno::ETIMEDOUT => e raise ActionViewHelperError, "Erro ao conectar-se ao PagSeguro. Por favor, tente novamente." end
form_fields()
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 77 def form_fields invoice_id = fetch_token {"code" => invoice_id} end
humanize_errors(xml)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 145 def humanize_errors(xml) # reference: https://pagseguro.uol.com.br/v2/guia-de-integracao/codigos-de-erro.html xml.css("errors").children.map do |error| case error.css('code').text when "11013" "Código de área inválido" when "11014" "Número de telefone inválido. Formato esperado: (DD) XXXX-XXXX" when "11017" "Código postal (CEP) inválido." else error.css('message').text end end.join(", ") end
remove_excessive_whitespace(text)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 162 def remove_excessive_whitespace(text) text.gsub(/\s{2,}/, ' ').strip end
shipping(value)
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 83 def shipping(value) add_field("shippingCost", sprintf("%0.02f", value)) end
shipping_address(params = {})
click to toggle source
# File lib/offsite_payments/integrations/pag_seguro.rb, line 69 def shipping_address(params = {}) add_field('shippingAddressCity', params[:city].slice(0, 60)) if params[:city] add_field('shippingAddressStreet', params[:address1].slice(0, 80)) if params[:address1] add_field('shippingAddressComplement', params[:address2].slice(0, 40)) if params[:address2] add_field('shippingAddressState', params[:state]) add_field('shippingAddressPostalCode', params[:zip].delete("^0-9").slice(0, 8)) if params[:zip] end