module Epayco
Attributes
apiKey[RW]
lang[RW]
privateKey[RW]
test[RW]
Public Class Methods
request(method, url, extra=nil, params={}, headers={}, switch)
click to toggle source
Eject request and show response or error
# File lib/epayco.rb, line 39 def self.request(method, url, extra=nil, params={}, headers={}, switch) method = method.to_sym if !apiKey || !privateKey || !lang raise Error.new('100', lang) end payload = JSON.generate(params) if method == :post || method == :patch params = nil unless method == :get # Switch secure or api if switch if method == :post || method == :patch enc = encrypt_aes(payload) payload = enc.to_json end url = @api_base_secure + url else if method == :post || method == :patch rb_hash = JSON.parse(payload) rb_hash["test"] = test ? "TRUE" : "FALSE" rb_hash["ip"] = local_ip payload = rb_hash.to_json end url = @api_base + url end headers = { :params => params, :content_type => 'application/json', :type => 'sdk' }.merge(headers) options = { :headers => headers, :user => apiKey, :method => method, :url => url, :payload => payload } # Open library rest client begin response = execute_request(options) return {} if response.code == 204 and method == :delete JSON.parse(response.body, :symbolize_names => true) rescue RestClient::Exception => e handle_errors e end end
Private Class Methods
encrypt(str, key)
click to toggle source
# File lib/epayco.rb, line 130 def self.encrypt(str, key) cipher = OpenSSL::Cipher.new('AES-128-CBC') cipher.encrypt iv = "0000000000000000" cipher.iv = iv cipher.key = key str = iv + str data = cipher.update(str) + cipher.final Base64.urlsafe_encode64(data) end
encrypt_aes(data)
click to toggle source
# File lib/epayco.rb, line 113 def self.encrypt_aes data sandbox = Epayco.test ? "TRUE" : "FALSE" @tags = JSON.parse(data) @seted = {} @tags.each { |key, value| @seted[lang_key(key)] = encrypt(value, Epayco.privateKey) } @seted["public_key"] = Epayco.apiKey @seted["i"] = Base64.encode64("0000000000000000") @seted["enpruebas"] = encrypt(sandbox, Epayco.privateKey) @seted["lenguaje"] = "ruby" @seted["ip"] = encrypt(local_ip, Epayco.privateKey) @seted["p"] = "" return @seted end
execute_request(options)
click to toggle source
Get response successful
# File lib/epayco.rb, line 93 def self.execute_request(options) RestClient::Request.execute(options) end
handle_errors(exception)
click to toggle source
Get response with errors
# File lib/epayco.rb, line 98 def self.handle_errors exception body = JSON.parse exception.http_body raise Error.new(exception.to_s, body['errors']) end
lang_key(key)
click to toggle source
Traslate secure petitions
# File lib/epayco.rb, line 142 def self.lang_key key file = File.read(File.dirname(__FILE__) + '/keylang.json') data_hash = JSON.parse(file) data_hash[key] end
local_ip()
click to toggle source
# File lib/epayco.rb, line 103 def self.local_ip orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true UDPSocket.open do |s| s.connect '64.233.187.99', 1 s.addr.last end ensure Socket.do_not_reverse_lookup = orig end