class Paytureman::Api

Attributes

rest_client[RW]

Public Class Methods

new(host, key, password) click to toggle source
# File lib/payture/api.rb, line 5
def initialize(host, key, password)
  @host = host
  @key = key
  @password = password
end

Public Instance Methods

charge(order_id) click to toggle source
# File lib/payture/api.rb, line 27
def charge(order_id)
  response = make_request(:charge, order_id: order_id, password: @password)
  response[:success]
end
init(order_id, amount, ip, description = {}) click to toggle source
# File lib/payture/api.rb, line 11
def init(order_id, amount, ip, description = {})

  data = { SessionType: :Block, OrderId: order_id, Amount: amount, IP: ip }
  data.merge!(description)
  init_params = {
      'Data' => URI.escape(data.map { |k, v| "#{k.to_s.camelize}=#{v}" }.join(';'))
  }

  response = make_request(:init, init_params)
  response[:success] && response[:session_id]
end
pay_url(session_id) click to toggle source
# File lib/payture/api.rb, line 23
def pay_url(session_id)
  "#{url_for(:pay)}?SessionId=#{session_id}"
end
refund(order_id, amount) click to toggle source
# File lib/payture/api.rb, line 32
def refund(order_id, amount)
  response = make_request(:refund, order_id: order_id, amount: amount, password: @password)
  response[:success]
end
status(order_id) click to toggle source
# File lib/payture/api.rb, line 42
def status(order_id)
  response = make_request(:pay_status, order_id: order_id)
  return :prepared if !response[:success] && response[:err_code] == :none
  response[:success] && response[:state]
end
unblock(order_id, amount) click to toggle source
# File lib/payture/api.rb, line 37
def unblock(order_id, amount)
  response = make_request(:unblock, order_id: order_id, amount: amount, password: @password)
  response[:success]
end

Protected Instance Methods

make_request(method, params) click to toggle source
# File lib/payture/api.rb, line 54
def make_request(method, params)
  params = Hash[
      params.merge(key: @key).
          map { |k, v| [ k.to_s.camelize, v ] }
  ]
  response = rest_client.post url_for(method), params
  puts response.body
  return nil if response.body.empty?
  doc = REXML::Document.new(response.body)
  result = Hash[doc.elements.first.attributes.map { |a| [ a.first.underscore.to_sym, a.last ] }]
  if result[:success]
    result[:success] = result[:success].downcase == "true"
  end
  if result[:state]
    result[:state] = result[:state].underscore.to_sym
  end
  if result[:amount]
    result[:amount] = result[:amount].to_i
  end
  if result[:err_code]
    result[:err_code] = result[:err_code].downcase.to_sym
  end
  return result
end
url_for(method) click to toggle source
# File lib/payture/api.rb, line 79
def url_for(method)
  "https://#@host.payture.com/apim/#{method.to_s.camelize}"
end