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