Class: OffsitePayments::Helper

Inherits:
Object
  • Object
show all
Defined in:
lib/offsite_payments/helper.rb

Overview

:nodoc:

Direct Known Subclasses

Integrations::A1agregator::Helper, Integrations::AuthorizeNetSim::Helper, Integrations::BitPay::Helper, Integrations::Bogus::Helper, Integrations::CheckoutFinland::Helper, Integrations::Chronopay::Helper, Integrations::Citrus::Helper, Integrations::Coinbase::Helper, Integrations::DirecPay::Helper, Integrations::Directebanking::Helper, Integrations::Doku::Helper, Integrations::Dotpay::Helper, Integrations::Dwolla::Helper, Integrations::EPaymentPlans::Helper, Integrations::EasyPay::Helper, Integrations::Epay::Helper, Integrations::Gestpay::Helper, Integrations::HiTrust::Helper, Integrations::Ipay88::Helper, Integrations::Klarna::Helper, Integrations::Liqpay::Helper, Integrations::Maksuturva::Helper, Integrations::Mollie::Helper, Integrations::Molpay::Helper, Integrations::Moneybookers::Helper, Integrations::Nochex::Helper, Integrations::PagSeguro::Helper, Integrations::Paxum::Helper, Integrations::PayFast::Helper, Integrations::Paydollar::Helper, Integrations::PayflowLink::Helper, Integrations::Paypal::Helper, Integrations::Paysbuy::Helper, Integrations::Paytm::Helper, Integrations::PayuIn::Helper, Integrations::Platron::Helper, Integrations::Pxpay::Helper, Integrations::Quickpay::Helper, Integrations::QuickpayV10::Helper, Integrations::Rbkmoney::Helper, Integrations::RealexOffsite::Helper, Integrations::Robokassa::Helper, Integrations::SagePayForm::Helper, Integrations::TwoCheckout::Helper, Integrations::Universal::Helper, Integrations::Valitor::Helper, Integrations::Verkkomaksut::Helper, Integrations::WebPay::Helper, Integrations::Webmoney::Helper, Integrations::WirecardCheckoutPage::Helper, Integrations::WorldPay::Helper

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(order, account, options = {}) ⇒ Helper

  • amount

  • currency

  • credential2

  • credential3

  • credential4

  • notify_url

  • return_url

  • redirect_param

Parameters:

  • order (String)

    unique id of this order

  • account (String)

    merchant account id from gateway provider

  • options (Hash) (defaults to: {})

    convenience param to set common attributes including:


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/offsite_payments/helper.rb', line 29

def initialize(order, , options = {})
  options.assert_valid_keys([:amount, :currency, :test, :credential2, :credential3, :credential4, :country, :account_name, :description, :transaction_type, :authcode, :notify_url, :return_url, :redirect_param, :forward_url, :checkout_token])
  @fields             = {}
  @raw_html_fields    = []
  @test               = options[:test]
  self.order          = order
  self.        = 
  self.amount         = options[:amount]
  self.currency       = options[:currency]
  self.credential2    = options[:credential2]
  self.credential3    = options[:credential3]
  self.credential4    = options[:credential4]
  self.notify_url     = options[:notify_url]
  self.return_url     = options[:return_url]
  self.redirect_param = options[:redirect_param]
  self.checkout_token = options[:checkout_token]
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_id, *args) ⇒ Object (private)


158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/offsite_payments/helper.rb', line 158

def method_missing(method_id, *args)
  method_id = method_id.to_s.gsub(/=$/, '').to_sym
  # Return and do nothing if the mapping was not found. This allows
  # for easy substitution of the different integrations
  return if mappings[method_id].nil?

  mapping = mappings[method_id]

  case mapping
  when Array
    mapping.each{ |field| add_field(field, args.last) }
  when Hash
    options = args.last.is_a?(Hash) ? args.pop : {}

    mapping.each{ |key, field| add_field(field, options[key]) }
  else
    add_field(mapping, args.last)
  end
end

Instance Attribute Details

#fieldsObject (readonly)

Returns the value of attribute fields


3
4
5
# File 'lib/offsite_payments/helper.rb', line 3

def fields
  @fields
end

Class Method Details

.inherited(subclass) ⇒ Object


14
15
16
# File 'lib/offsite_payments/helper.rb', line 14

def self.inherited(subclass)
  subclass.mappings ||= {}
end

.mapping(attribute, options = {}) ⇒ Object

Add a mapping between attribute name and gateway specific field name. This mapping can then be used in form helper to assign values to each attributes. For example, a `mapping :height, “HEIGHT”` means user can write `f.height 182` in 'payment_service_for' form helper, and an input tag with the name “HEIGHT” and value of 182 will be generated. This is an abstraction over the `add_field` method.

String: Name of generated input

Array: Names of generated inputs, for creating synonym inputs. Each generated input will have the same value.

Hash: Keys as attribute name and values as generated input names. Used to group related fields together, such as different segments of an address, for example:

mapping :address, :region => 'REGION', :city => 'CITY', :address => 'ADD'

Parameters:

  • attribute (Symbol)

    attribute name

  • options (String, Array, Hash) (defaults to: {})

    input name from gateway's side.


72
73
74
# File 'lib/offsite_payments/helper.rb', line 72

def self.mapping(attribute, options = {})
  self.mappings[attribute] = options
end

Instance Method Details

#add_field(name, value) ⇒ Object

Add an input in the form. Useful when gateway requires some uncommon fields not provided by the gem.

# inside `payment_service_for do |service|` block service.add_field('c_id','_xclick')

Gateway implementor can also use this to add default fields in the form:

# in a subclass of ActiveMerchant::Billing::Integrations::Helper def initialize(order, account, options = {}) super # mandatory fields add_field('Rvg2c', 1) end

Parameters:

  • name (String)

    input name

  • value (String)

    input value


93
94
95
96
# File 'lib/offsite_payments/helper.rb', line 93

def add_field(name, value)
  return if name.blank? || value.blank?
  @fields[name.to_s] = value.to_s
end

#add_fields(subkey, params = {}) ⇒ Object


98
99
100
101
102
103
# File 'lib/offsite_payments/helper.rb', line 98

def add_fields(subkey, params = {})
  params.each do |k, v|
    field = mappings[subkey][k]
    add_field(field, v) unless field.blank?
  end
end

#add_raw_html_field(name, value) ⇒ Object

Add a field that has characters that CGI::escape would mangle. Allows for multiple fields with the same name (e.g., to support line items).


107
108
109
110
# File 'lib/offsite_payments/helper.rb', line 107

def add_raw_html_field(name, value)
  return if name.blank? || value.blank?
  @raw_html_fields << [name, value]
end

#billing_address(params = {}) ⇒ Object


116
117
118
# File 'lib/offsite_payments/helper.rb', line 116

def billing_address(params = {})
  add_address(:billing_address, params)
end

#form_fieldsObject


124
125
126
# File 'lib/offsite_payments/helper.rb', line 124

def form_fields
  @fields
end

#form_methodString

Specifies the HTTP method used in form submmition. Set to POST which gateway implementor can override if other http method is desired (e.g. PUT).

Returns:

  • (String)

    form submit action, default is “POST”.


137
138
139
# File 'lib/offsite_payments/helper.rb', line 137

def form_method
  "POST"
end

#raw_html_fieldsObject


112
113
114
# File 'lib/offsite_payments/helper.rb', line 112

def raw_html_fields
  @raw_html_fields
end

#shipping_address(params = {}) ⇒ Object


120
121
122
# File 'lib/offsite_payments/helper.rb', line 120

def shipping_address(params = {})
  add_address(:shipping_address, params)
end

#test?Boolean

Returns whether in test mode.

Returns:

  • (Boolean)

    whether in test mode


129
130
131
# File 'lib/offsite_payments/helper.rb', line 129

def test?
  @test_mode ||= OffsitePayments.mode == :test || !!@test
end