Class: PaysonAPI::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/payson_api/client.rb

Class Method Summary collapse

Class Method Details

.get_payment_details(payment_details_data) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/payson_api/client.rb', line 14

def self.get_payment_details(payment_details_data)
  response = payson_request(
    PAYSON_API_PAYMENT_DETAILS_ACTION,
    payment_details_data.to_hash
  )
  response_hash = params_to_hash(response.body)
  PaysonAPI::Response::PaymentDetails.new(response_hash)
end

.hash_to_params(hash) ⇒ Object



40
41
42
# File 'lib/payson_api/client.rb', line 40

def self.hash_to_params(hash)
  hash.map { |k, v| "#{k}=#{v}" }.join('&')
end

.initiate_payment(payment_data) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/payson_api/client.rb', line 5

def self.initiate_payment(payment_data)
  response = payson_request(
    PAYSON_API_PAY_ACTION,
    payment_data.to_hash
  )
  response_hash = params_to_hash(response.body)
  PaysonAPI::Response::Payment.new(response_hash)
end

.params_to_hash(params) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/payson_api/client.rb', line 44

def self.params_to_hash(params)
  {}.tap do |hash|
    params.split('&').each do |param|
      key, val = param.split('=')
      hash[key] = val
    end
  end
end

.payson_request(action, data) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/payson_api/client.rb', line 55

def self.payson_request(action, data)
  action = '/%s/%s/' % [PAYSON_API_VERSION, action]
  url = PAYSON_API_ENDPOINT % (PaysonAPI.test? ? 'test-api' : 'api') + action
  headers = {
    'PAYSON-SECURITY-USERID' => PaysonAPI.config.api_user_id,
    'PAYSON-SECURITY-PASSWORD' => PaysonAPI.config.api_password,
    'Content-Type' => 'application/x-www-form-urlencoded'
  }
  post(url, data, headers)
end

.post(url, data, headers) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/payson_api/client.rb', line 66

def self.post(url, data, headers)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.use_ssl = uri.scheme == 'https'
  req = Net::HTTP::Post.new(uri.path)
  req.body = data.is_a?(Hash) ? hash_to_params(data) : data
  headers.each do |name, value|
    req[name] = value
  end
  http.request(req)
end

.update_payment(payment_update_data) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/payson_api/client.rb', line 23

def self.update_payment(payment_update_data)
  response = payson_request(
    PAYSON_API_PAYMENT_DETAILS_ACTION,
    payment_update_data.to_hash
  )
  response_hash = params_to_hash(response.body)
  PaysonAPI::Response::PaymentUpdate.new(response_hash)
end

.validate_ipn(ipn_data) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/payson_api/client.rb', line 32

def self.validate_ipn(ipn_data)
  response = payson_request(
    PAYSON_API_PAYMENT_VALIDATE_ACTION,
    ipn_data.to_s
  )
  PaysonAPI::Response::Validate.new(response.body)
end