class FlexCommerce::PaypalExpress::Process::PaypalParams

@class PaypalParams

Constants

DEFAULT_DESCRIPTION

Attributes

allow_shipping_change[RW]
callback_url[RW]
cancel_url[RW]
cart[RW]
description[RW]
ip_address[RW]
shipping_method_model[RW]
success_url[RW]
use_mobile_payments[RW]

Public Class Methods

new(cart:,success_url:, cancel_url:, ip_address:, allow_shipping_change: true, callback_url:, shipping_method_model: FlexCommerce::ShippingMethod, use_mobile_payments: false, description:) click to toggle source

@initialize

@param {FlexCommerce::PaymentProviderSetup} payment_provider_setup @param {FlexCommerce::Cart} cart @param {Paypal Gateway} [gateway_class = ::ActiveMerchant::Billing::PaypalExpressGateway] @param {URL} success_url - Generally Paypal confirmation page @param {URL} cancel_url - Generally new transaction page @param {IP} ip_address - User ip address @param {boolean} [allow_shipping_change = true] - true: display shipping options, false: dont display shipping options @param {URL} callback_url - Generally cart show page @param {FlexCommerce::ShippingMethod} shipping_method_model = FlexCommerce::ShippingMethod @param {boolean} [use_mobile_payments = false] @param {String} [description]

# File lib/paypal_express/process/paypal_params.rb, line 27
def initialize(cart:,success_url:, cancel_url:, ip_address:, allow_shipping_change: true, callback_url:, shipping_method_model: FlexCommerce::ShippingMethod, use_mobile_payments: false, description:)
  self.cart = cart
  self.allow_shipping_change = allow_shipping_change
  self.success_url = success_url
  self.cancel_url = cancel_url
  self.ip_address = ip_address
  self.callback_url = callback_url
  self.shipping_method_model = shipping_method_model
  self.use_mobile_payments = use_mobile_payments
  self.description = description
end

Public Instance Methods

call() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 39
def call
  base_paypal_params
    .merge(paypal_shipping_address_params)
    .merge(paypal_items)
    .merge(ui_callback_params)
    .merge(shipping_options_params)
end

Private Instance Methods

base_paypal_params() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 69
def base_paypal_params
  {
    currency: "GBP",
    description: description || DEFAULT_DESCRIPTION,
    ip: ip_address,
    return_url: success_url,
    cancel_return_url: cancel_url,
    subtotal: summary[:subtotal], # As the cart total wont include any shipping if it has no shipping method
    handling: summary[:handling],
    tax: 0,
    shipping: summary[:shipping]
  }
end
paypal_items() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 83
def paypal_items
  items = summary[:items]
  {items: items}
end
paypal_shipping_address_params() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 51
def paypal_shipping_address_params
  return {} unless cart.shipping_address
  shipping_address = cart.shipping_address
  {
    address_override: true,
    shipping_address: {
      name: "#{shipping_address.first_name} #{shipping_address.middle_names} #{shipping_address.last_name}",
      address1: shipping_address.address_line_1,
      address2: "#{shipping_address.address_line_2} #{shipping_address.address_line_3}",
      city: shipping_address.city,
      state: shipping_address.state,
      country: shipping_address.country,
      zip: shipping_address.postcode

    }
  }
end
shipping_method() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 105
def shipping_method
  cart.shipping_method || shipping_methods.first
end
shipping_methods() click to toggle source

@method shipping_methods

@returns shipping methods with promotions applied

# File lib/paypal_express/process/paypal_params.rb, line 101
def shipping_methods
  @shipping_methods ||= ShippingMethodsForCart.new(cart: cart, shipping_methods: shipping_method_model.all).call.sort_by(&:total)
end
shipping_options_params() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 109
def shipping_options_params
  return { shipping_options: [] } if !allow_shipping_change || shipping_method.nil?
  shipping_method_id = shipping_method.id
  {
      shipping_options: shipping_methods.map {|sm| {name: sm.label, amount: convert_amount(sm.total), default: sm.id == shipping_method_id, label: "#{sm.description}#{sm.id}"}}
  }
end
summary() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 117
def summary
  @summary ||= GenerateSummary.new(cart: cart).call
end
ui_callback_params() click to toggle source
# File lib/paypal_express/process/paypal_params.rb, line 88
def ui_callback_params
  return {} unless allow_shipping_change && shipping_methods.count > 0
  { 
    callback_url: callback_url,
    callback_timeout: 6,
    callback_version: 95,
    max_amount: convert_amount((cart.total * 1.2) + shipping_methods.last.total + shipping_methods.last.tax) 
  }
end