module ApRubySdk
Constants
- VERSION
Attributes
api_base[RW]
api_public_key[RW]
api_secret_key[RW]
Public Class Methods
api_url(url='')
click to toggle source
# File lib/ap_ruby_sdk.rb, line 95 def self.api_url(url='') @api_base + url end
request(method, url, api_secret_key, api_public_key, params={}, headers={})
click to toggle source
# File lib/ap_ruby_sdk.rb, line 50 def self.request(method, url, api_secret_key, api_public_key, params={}, headers={}) unless api_secret_key ||= @api_secret_key raise AuthenticationError.new('No Secret API key provided.') end unless api_public_key ||= @api_public_key raise AuthenticationError.new('No Public API key provided.') end url = api_url(url) if method.to_s.downcase.to_sym == :get # Make params into GET params url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any? payload = nil elsif method.to_s.downcase.to_sym == :delete # Make params into expected DELETE params elsif method.to_s.downcase.to_sym == :put # Make params into expected PUT params else # Make params into POST params payload = MultiJson.dump(params, mode: :compat) end request_opts = { :headers => request_headers(api_secret_key).update(headers), :open_timeout => 30, :timeout => 80, :method => method, :payload => payload, :url => url } begin response = execute_request(request_opts) rescue RestClient::ExceptionWithResponse => e if e.http_code and e.http_body parse_api_error(e.http_code, e.http_body) else raise APIError.new(message + "\n\n(Network error: #{e.message})") end end parse(response) end
Private Class Methods
execute_request(opts)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 114 def self.execute_request(opts) RestClient::Request.execute(opts) end
parse(response)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 118 def self.parse(response) begin response = MultiJson.load(response.body) rescue MultiJson::DecodeError raise_general_error(response.code, response.body) end Util.symbolize_names(response) end
parse_api_error(response_code, response_body)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 133 def self.parse_api_error(response_code, response_body) begin error = MultiJson.load(response_body) error = Util.symbolize_names(error) raise ApError.new if error[:Type].nil? # if there is no type rescue MultiJson::DecodeError, ApError raise_general_error(response_code, response_body) end case error[:Type] when 'payment_error' raise PaymentError.new(error[:Message], response_code, error[:Code]) when 'api_error' raise APIError.new(error[:Message], response_code, error[:Code]) when 'invalid_parameter_error' raise InvalidParameterError.new(error[:Message], response_code, error[:Code], error[:Param]) else raise APIError.new(error[:Message], response_code, error[:Code]); end end
raise_general_error(response_code, response_body)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 128 def self.raise_general_error(response_code, response_body) raise APIError.new("Invalid response object from API: #{response_body.inspect} " + "(HTTP response code was #{response_code})", response_code) end
request_headers(api_secret_key)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 106 def self.request_headers(api_secret_key) { :user_agent => "AlternativePayments Ruby SDK v#{ApRubySdk::VERSION}", :authorization => "Basic #{Base64.strict_encode64(api_secret_key)}", :content_type => :json } end
uri_encode(params)
click to toggle source
# File lib/ap_ruby_sdk.rb, line 101 def self.uri_encode(params) Util.flatten_params(params). map { |k, v| "#{k}=#{Util.url_encode(v)}" }.join('&') end