class Skrill::Payment::Request

Constants

API_HOST
API_PATH
OPTIONS_MAPPING

Attributes

error_message[R]
request_data[R]
status_id[R]
status_message[R]
transation_id[R]

Public Class Methods

new(config_data, payment_data) click to toggle source
# File lib/skrill/payment/request.rb, line 25
def initialize(config_data, payment_data)
  @http_proxy = config_data.delete(:http_proxy)
  @request_data = map_data(config_data.merge(payment_data))
end
post(*data) click to toggle source
# File lib/skrill/payment/request.rb, line 19
def self.post(*data)
  new(*data).post
end

Public Instance Methods

post() click to toggle source
# File lib/skrill/payment/request.rb, line 30
def post
  self.tap do
    response = send_payment_preparation
    session_identifier = response['sid']

    if session_identifier.present?
      response = send_payment_confirmation(session_identifier)
      check_payment_status(response)
    else
      save_error(response)
    end
  end
end
successful?() click to toggle source

Checks if the request has been delivered and was successful.

@return [ true, false ] The payment success status.

@since 0.2.1

# File lib/skrill/payment/request.rb, line 49
def successful?
  error_message.nil?
end

Private Instance Methods

check_payment_status(response) click to toggle source
# File lib/skrill/payment/request.rb, line 80
def check_payment_status(response)
  transaction = response['transaction']

  if transaction.blank?
    save_error(response)
  else
    save_transation_details(transaction)
  end
end
connection() click to toggle source
# File lib/skrill/payment/request.rb, line 100
def connection
  @connection ||= Faraday.new(API_HOST, connection_params) do |con|
    con.use(Faraday::Request::UrlEncoded)
    con.use(Faraday::Adapter::NetHttp)
  end
end
connection_params() click to toggle source
# File lib/skrill/payment/request.rb, line 107
def connection_params
  if @http_proxy.present?
    { :proxy =>  @http_proxy }
  else
    {}
  end
end
map_data(input_data) click to toggle source
# File lib/skrill/payment/request.rb, line 55
def map_data(input_data)
  input_data.tap do |data|
    OPTIONS_MAPPING.each do |given_key, api_key|
      value = data.delete(given_key)
      data[api_key] = value if value
    end
  end
end
parse_response(response) click to toggle source
# File lib/skrill/payment/request.rb, line 76
def parse_response(response)
  Hash.from_xml(response.body)['response']
end
save_error(response) click to toggle source
# File lib/skrill/payment/request.rb, line 96
def save_error(response)
  @error_message = response['error']['error_msg']
end
save_transation_details(transaction) click to toggle source
# File lib/skrill/payment/request.rb, line 90
def save_transation_details(transaction)
  @status_id      = transaction['status'].to_i
  @status_message = transaction['status_msg']
  @transation_id  = transaction['id'].to_i
end
send_payment_confirmation(session_identifier) click to toggle source
# File lib/skrill/payment/request.rb, line 70
def send_payment_confirmation(session_identifier)
  confirmation_data = {sid: session_identifier, action: 'transfer'}
  raw_response = connection.post(API_PATH, confirmation_data)
  parse_response(raw_response)
end
send_payment_preparation() click to toggle source
# File lib/skrill/payment/request.rb, line 64
def send_payment_preparation
  preparation_data = request_data.merge(action: 'prepare')
  raw_response = connection.post(API_PATH, preparation_data)
  parse_response(raw_response)
end