class OffsitePayments::Integrations::DirecPay::Helper
Constants
- COUNTRY
- CURRENCY
- EDIT_ALLOWED
- ENCODED_PARAMS
- OPERATING_MODE
- OTHER_DETAILS
- PHONE_CODES
Public Class Methods
new(order, account, options = {})
click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/direc_pay.rb, line 82 def initialize(order, account, options = {}) super collaborator = OffsitePayments.mode == :test || options[:test] ? 'TOML' : 'DirecPay' add_field(mappings[:collaborator], collaborator) add_field(mappings[:country], 'IND') add_field(mappings[:operating_mode], OPERATING_MODE) add_field(mappings[:other_details], OTHER_DETAILS) add_field(mappings[:edit_allowed], EDIT_ALLOWED) end
Public Instance Methods
amount=(money)
click to toggle source
Need to format the amount to have 2 decimal places
# File lib/offsite_payments/integrations/direc_pay.rb, line 99 def amount=(money) cents = to_cents(money) raise ArgumentError, "amount must be a Money object or an integer" if money.is_a?(String) raise ActionViewHelperError, "amount must be greater than $0.00" if cents.to_i <= 0 add_field(mappings[:amount], sprintf("%.2f", cents.to_f/100)) end
billing_address(params = {})
click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/direc_pay.rb, line 111 def billing_address(params = {}) super(update_address(:billing_address, params)) end
customer(params = {})
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 93 def customer(params = {}) add_field(mappings[:customer][:name], full_name(params)) add_field(mappings[:customer][:email], params[:email]) end
form_fields()
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 115 def form_fields add_failure_url add_request_parameters unencoded_parameters end
shipping_address(params = {})
click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/direc_pay.rb, line 107 def shipping_address(params = {}) super(update_address(:shipping_address, params)) end
Private Instance Methods
add_failure_url()
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 140 def add_failure_url if fields[mappings[:failure_url]].nil? add_field(mappings[:failure_url], fields[mappings[:return_url]]) end end
add_land_line_phone_for(address_type, params)
click to toggle source
Split a single phone number into the country code, area code and local number as best as possible
# File lib/offsite_payments/integrations/direc_pay.rb, line 164 def add_land_line_phone_for(address_type, params) address_field = address_type == :billing_address ? 'custPhoneNo' : 'deliveryPhNo' if params.has_key?(:phone2) phone = normalize_phone_number(params[:phone2]) phone_country_code, phone_area_code, phone_number = nil if params[:country] == 'IN' && phone =~ /(91)? *(\d{3}) *(\d{4,})$/ phone_country_code, phone_area_code, phone_number = $1, $2, $3 else numbers = phone.split(' ') case numbers.size when 3 phone_country_code, phone_area_code, phone_number = numbers when 2 phone_area_code, phone_number = numbers else phone =~ /(\d{3})(\d+)$/ phone_area_code, phone_number = $1, $2 end end add_field("#{address_field}1", phone_country_code || phone_code_for_country(params[:country]) || '91') add_field("#{address_field}2", phone_area_code) add_field("#{address_field}3", phone_number) end end
add_request_parameters()
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 124 def add_request_parameters params = ENCODED_PARAMS.map{ |param| fields[mappings[param]] } encoded = encode_value(params.join('|')) add_field('requestparameter', encoded) end
decode_value(value)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 207 def decode_value(value) decoded = Base64.decode64(value) string_to_decode = decoded[0, 1] + decoded[2, decoded.length] Base64.decode64(string_to_decode) end
encode_value(value)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 201 def encode_value(value) encoded = Base64.strict_encode64(value) string_to_encode = encoded[0, 1] + "T" + encoded[1, encoded.length] Base64.strict_encode64(string_to_encode) end
full_name(params)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 217 def full_name(params) return if params[:name].blank? && params[:first_name].blank? && params[:last_name].blank? params[:name] || "#{params[:first_name]} #{params[:last_name]}" end
normalize_phone_number(phone)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 192 def normalize_phone_number(phone) phone.gsub(/[^\d ]+/, '') if phone end
phone_code_for_country(country)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 213 def phone_code_for_country(country) PHONE_CODES[country] end
remove_special_characters(string)
click to toggle source
Special characters are NOT allowed while posting transaction parameters on DirecPay
system
# File lib/offsite_payments/integrations/direc_pay.rb, line 197 def remove_special_characters(string) string.gsub(/[~"'&#%]/, '-') end
unencoded_parameters()
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 131 def unencoded_parameters params = fields.dup # remove all encoded params from exported fields ENCODED_PARAMS.each{ |param| params.delete(mappings[param]) } # remove all special characters from each field value params = params.collect{|name, value| [name, remove_special_characters(value)] } Hash[params] end
update_address(address_type, params)
click to toggle source
# File lib/offsite_payments/integrations/direc_pay.rb, line 146 def update_address(address_type, params) params = params.dup address = params[:address1] address = "#{address} #{params[:address2]}" if params[:address2].present? address = "#{params[:company]} #{address}" if params[:company].present? params[:address1] = address params[:phone] = normalize_phone_number(params[:phone]) add_land_line_phone_for(address_type, params) if address_type == :shipping_address shipping_name = full_name(params) || fields[mappings[:customer][:name]] add_field(mappings[:shipping_address][:name], shipping_name) end params end