class Payeezy::Transactions

Public Class Methods

new(options = {}) click to toggle source
# File lib/payeezy.rb, line 11
def initialize(options = {})
  @url = options[:url]
  @apikey = options[:apikey]
  @apisecret = options[:apisecret]
  @token = options[:token]
end

Public Instance Methods

bin_to_hex(s) click to toggle source
# File lib/payeezy.rb, line 28
def bin_to_hex(s)
  s.unpack('H*').first
end
call_rest(url, data, headers) click to toggle source
# File lib/payeezy.rb, line 55
def call_rest(url, data, headers)
  rest_resource = RestClient::Resource.new(url)
  raw_response = response = {}
  begin
    raw_response = rest_resource.post data, headers
    response = parse(raw_response)
  rescue => e
    raw_response = e.response
    response = response_error(raw_response)
  rescue JSON::ParserError
    response = json_error(raw_response)
  end

  response
end
commit(action, params) click to toggle source
# File lib/payeezy.rb, line 45
def commit(action, params)
  url = @url
  if action == :capture || action == :void || action == :refund || action == :split
    url = url + '/' + params[:transaction_id]
    params.delete(:transaction_id)
  end
  params[:transaction_type] = action
  call_rest(url, post_data(params), headers(post_data(params)))
end
generate_hmac(nonce, current_timestamp, payload) click to toggle source
# File lib/payeezy.rb, line 22
def generate_hmac(nonce, current_timestamp, payload)
  message = @apikey + nonce.to_s + current_timestamp.to_s + @token + payload
  hash = Base64.strict_encode64(bin_to_hex(OpenSSL::HMAC.digest('sha256', @apisecret, message)))
  hash
end
handle_message(response, success) click to toggle source
# File lib/payeezy.rb, line 71
def handle_message(response, success)
  if success
    response['transaction_status']
  elsif response.key?('Error')
    response['Error'].map { |_, messages| messages }.join('. ')
  else
    response.inspect
  end
end
headers(payload) click to toggle source
# File lib/payeezy.rb, line 32
def headers(payload)
  nonce = (SecureRandom.random_number *10000000000)
  current_timestamp = (Time.now.to_f*1000).to_i
  {
      'Content-Type' => 'application/json',
      'apikey' => @apikey,
      'token' => @token,
      'nonce' => nonce,
      'timestamp' => current_timestamp,
      'Authorization' => generate_hmac(nonce, current_timestamp, payload)
  }
end
json_error(raw_response) click to toggle source
# File lib/payeezy.rb, line 97
def json_error(raw_response)
  msg = "Payeezy has returned an invalid response: [#{raw_response.inspect}]"
  {
      'Error' => {
          'messages' => msg
      }
  }
end
parse(body) click to toggle source
# File lib/payeezy.rb, line 89
def parse(body)
  JSON.parse(body)
end
post_data(params) click to toggle source
# File lib/payeezy.rb, line 93
def post_data(params)
  params.to_json
end
response_error(raw_response) click to toggle source
# File lib/payeezy.rb, line 81
def response_error(raw_response)
  begin
    parse(raw_response)
  rescue JSON::ParserError
    json_error(raw_response)
  end
end
transact(action, payload) click to toggle source
# File lib/payeezy.rb, line 18
def transact(action, payload)
  commit(action, payload)
end