Class: ActiveMerchant::Billing::Integrations::WorldPay::Helper

Inherits:
Helper
  • Object
show all
Defined in:
lib/active_merchant/billing/integrations/world_pay/helper.rb

Instance Attribute Summary

Attributes inherited from Helper

#fields

Instance Method Summary collapse

Methods inherited from Helper

#add_field, #add_fields, #add_raw_html_field, #form_fields, #form_method, mapping, #raw_html_fields, #shipping_address, #test?

Constructor Details

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

WorldPay supports two different test modes - :always_succeed and :always_fail



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 23

def initialize(order, , options = {})
  super
  
  if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
    test_mode = case options[:test]
    when :always_fail
      101
    when false
      0
    else
      100
    end
    add_field('testMode', test_mode.to_s)
  elsif ActiveMerchant::Billing::Base.integration_mode == :always_succeed
    add_field('testMode', '100')
  elsif ActiveMerchant::Billing::Base.integration_mode == :always_fail
    add_field('testMode', '101')
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class ActiveMerchant::Billing::Integrations::Helper

Instance Method Details

#billing_address(params = {}) ⇒ Object

WorldPay only supports a single address field so we have to concat together - lines are separated using 




45
46
47
48
49
50
51
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 45

def billing_address(params={})
  add_field(mappings[:billing_address][:zip], params[:zip])
  add_field(mappings[:billing_address][:country], lookup_country_code(params[:country]))
  
  address = [params[:address1], params[:address2], params[:city], params[:state]].compact
  add_field('address', address.join('
'))
end

#callback_params(params = {}) ⇒ Object



90
91
92
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 90

def callback_params(params={})
  params.each{|k,v| add_field("M_#{k}",v)}
end

#combined_params(params = {}) ⇒ Object



94
95
96
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 94

def combined_params(params={})
  params.each{|k,v| add_field("MC_#{k}",v)}
end

#customer(params = {}) ⇒ Object

WorldPay only supports a single name field so we have to concat



54
55
56
57
58
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 54

def customer(params={})
  add_field(mappings[:customer][:email], params[:email])
  add_field(mappings[:customer][:phone], params[:phone])
  add_field('name', "#{params[:first_name]} #{params[:last_name]}")
end

#encrypt(secret, fields = [:amount, :currency, :account, :order]) ⇒ Object

Support for a MD5 hash of selected fields to prevent tampering For further information read the tech note at the address below: support.worldpay.com/kb/integration_guides/junior/integration/help/tech_notes/sjig_tn_009.html



63
64
65
66
67
68
69
70
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 63

def encrypt(secret, fields = [:amount, :currency, :account, :order])
  signature_fields = fields.collect{ |field| mappings[field] }
  add_field('signatureFields', signature_fields.join(':'))

  field_values = fields.collect{ |field| form_fields[mappings[field]] }
  signature    = "#{secret}:#{field_values.join(':')}"            
  add_field('signature', Digest::MD5.hexdigest(signature))
end

#response_params(params = {}) ⇒ Object

WorldPay supports the passing of custom parameters prefixed with the following: C_ : These parameters can be used in the response pages hosted on WorldPay’s site M_ : These parameters are passed through to the callback script (if enabled) MC_ or CM_ : These parameters are availble both in the response and callback contexts



86
87
88
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 86

def response_params(params={})
  params.each{|k,v| add_field("C_#{k}",v)}
end

#valid_from(from_time) ⇒ Object

Add a time window for which the payment can be completed. Read the link below for how they work support.worldpay.com/kb/integration_guides/junior/integration/help/appendicies/sjig_10100.html



74
75
76
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 74

def valid_from(from_time)
  add_field('authValidFrom', from_time.to_i.to_s + '000')
end

#valid_to(to_time) ⇒ Object



78
79
80
# File 'lib/active_merchant/billing/integrations/world_pay/helper.rb', line 78

def valid_to(to_time)
  add_field('authValidTo', to_time.to_i.to_s + '000')
end