class Ogone::Base

Constants

SIGNING_ALGORITHMS
VALID_ENVIRONMENTS

Attributes

sha_in[RW]
sha_out[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/ogone/base.rb, line 14
def initialize(options = {})
  @parameters = {}
  %i[sha_algo environment pspid sha_in sha_out].each do |config|
    send :"#{config}=", options[config] unless options[config].nil?
  end
end

Public Instance Methods

add_parameters(parameters) click to toggle source
# File lib/ogone/base.rb, line 38
def add_parameters(parameters)
  @parameters.merge! parameters
end
check_shasign_out!(params) click to toggle source
# File lib/ogone/base.rb, line 49
def check_shasign_out!(params)
  params = upcase_keys(params)
  raise OutboundSignatureMismatch if sha_out_sign(params) != params[:SHASIGN]
end
environment=(environment) click to toggle source
# File lib/ogone/base.rb, line 26
def environment=(environment)
  unless VALID_ENVIRONMENTS.include? environment.to_s
    raise ArgumentError, "Unsupported Ogone environment: #{environment}"
  end
  @environment = environment
end
fields_for_payment(parameters = {}, shasign_key = 'SHASIGN') click to toggle source
# File lib/ogone/base.rb, line 42
def fields_for_payment(parameters = {}, shasign_key = 'SHASIGN')
  add_parameters(parameters || {})
  check_mandatory_parameters!

  upcase_keys(@parameters).merge(shasign_key.to_sym => sha_in_sign)
end
pspid=(pspid) click to toggle source
# File lib/ogone/base.rb, line 33
def pspid=(pspid)
  raise ArgumentError, 'PSPID cannot be empty' if pspid.nil? || pspid == ''
  @pspid = pspid
end
sha_algo=(sha_algo) click to toggle source
# File lib/ogone/base.rb, line 21
def sha_algo=(sha_algo)
  raise ArgumentError, "Unsupported signature algorithm: #{sha_algo}" unless SIGNING_ALGORITHMS.include?(sha_algo)
  @sha_algo = sha_algo
end
upcase_keys(hash) click to toggle source
# File lib/ogone/base.rb, line 54
def upcase_keys(hash)
  hash.each_with_object({}) { |(k, v), h| h[k.upcase.to_sym] = v; }
end

Protected Instance Methods

ogone_host() click to toggle source
# File lib/ogone/base.rb, line 60
def ogone_host
  @environment == 'test' ? 'ogone.test.v-psp.com' : 'secure.ogone.com'
end

Private Instance Methods

check_mandatory_parameters!() click to toggle source
# File lib/ogone/base.rb, line 91
def check_mandatory_parameters!
  keys = @parameters.keys.map(&:to_sym)
  self.class.const_get('MANDATORY_PARAMETERS').each do |parameter|
    raise MandatoryParameterMissing, parameter unless keys.include? parameter.to_sym
  end
end
sha_in_sign() click to toggle source
# File lib/ogone/base.rb, line 66
def sha_in_sign
  to_hash = sorted_upcased_parameters.each_with_object([]) do |(k, v), a|
    a << "#{k}=#{v}#{@sha_in}" unless v.nil? || v == ''
  end.join
  sign to_hash
end
sha_out_sign(params) click to toggle source
# File lib/ogone/base.rb, line 73
def sha_out_sign(params)
  to_hash = self.class.const_get('OUTBOUND_SIGNATURE_PARAMETERS').each_with_object([]) do |p, a|
    a << "#{p}=#{params[p]}#{@sha_out}" unless params[p].nil? || params[p] == ''
  end.join
  sign to_hash
end
sign(to_hash) click to toggle source
# File lib/ogone/base.rb, line 80
def sign(to_hash)
  unless SIGNING_ALGORITHMS.include?(@sha_algo)
    raise ArgumentError, "Unsupported signature algorithm: '#{@sha_algo}'"
  end
  Digest.const_get(@sha_algo).hexdigest(to_hash).upcase
end
sorted_upcased_parameters() click to toggle source
# File lib/ogone/base.rb, line 87
def sorted_upcased_parameters
  upcase_keys(@parameters).sort
end