module Epayco
Attributes
apiKey[RW]
lang[RW]
privateKey[RW]
test[RW]
Public Class Methods
request(method, url, extra=nil, params={}, headers={}, switch, cashdata, sp, dt)
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, cashdata, sp, dt) method = method.to_sym auth = authent(apiKey ,privateKey) bearer_token = 'Bearer '+ auth[:bearer_token] 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 if cashdata enc = encrypt_aes(payload, true) payload = enc.to_json else enc = encrypt_aes(payload, false) payload = enc.to_json end end url = @api_base_secure + url else if method == :post || method == :patch rb_hash = JSON.parse(payload) if dt payload = rb_hash.to_json else rb_hash["test"] = test ? "TRUE" : "FALSE" rb_hash["ip"] = local_ip payload = rb_hash.to_json end end url = @api_base + url end if sp headers = { :content_type => 'multipart/form-data' }.merge(headers) options = { :headers => headers, :user => apiKey, :method => method, :url => url, :payload => payload } else headers = { :params => params, :content_type => 'application/json', :type => 'sdk-jwt', :lang => 'RUBY', :Authorization => bearer_token, }.merge(headers) options = { :headers => headers, :user => apiKey, :method => method, :url => url, :payload => payload } end # Open library rest client begin #puts options #abort("Message goes here 1") 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
authent(apiKey, privateKey)
click to toggle source
# File lib/epayco.rb, line 193 def self.authent(apiKey, privateKey) @parmas = {} @parmas["public_key"] = apiKey @parmas["private_key"] = privateKey headers = { # :params => @parmas, :Accept => 'application/json', :content_type => 'application/json', :type => 'sdk' } payload = @parmas.to_json options = { :headers => headers, :user => apiKey, :method => 'post', :url => 'https://api.secure.payco.co/v1/auth/login', :payload => payload } 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
encrypt(str, key)
click to toggle source
# File lib/epayco.rb, line 174 def self.encrypt(str, key) cipher = OpenSSL::Cipher.new('AES-128-CBC') cipher.encrypt iv = "0000000000000000" cipher.iv = iv cipher.key = key.byteslice(0, cipher.key_len) str = iv + str data = cipher.update(str) + cipher.final Base64.urlsafe_encode64(data) end
encrypt_aes(data, cashdata)
click to toggle source
# File lib/epayco.rb, line 143 def self.encrypt_aes(data, cashdata) sandbox = Epayco.test ? "TRUE" : "FALSE" @tags = JSON.parse(data) @seted = {} if cashdata @tags.each { |key, value| @seted[lang_key(key)] = value } @seted["ip"] = local_ip @seted["enpruebas"] = encrypt(sandbox, Epayco.privateKey) else @tags.each { |key, value| @seted[lang_key(key)] = encrypt(value, Epayco.privateKey) } @seted["ip"] = encrypt(local_ip, Epayco.privateKey) @seted["enpruebas"] = encrypt(sandbox, Epayco.privateKey) end @seted["public_key"] = Epayco.apiKey @seted["i"] = Base64.encode64("0000000000000000") @seted["lenguaje"] = "ruby" @seted["p"] = "" return @seted end
execute_request(options)
click to toggle source
Get response successful
# File lib/epayco.rb, line 123 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 128 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 186 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 133 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