class Paysera::Request
Public Class Methods
build_request(paysera_params, sign_password=nil)
click to toggle source
# File lib/paysera/request.rb, line 7 def self.build_request(paysera_params, sign_password=nil) # Ensure that all key will be symbols paysera_params = Hash[paysera_params.map { |k, v| [k.to_sym, v] }] # Set default values paysera_params[:version] = Paysera::API_VERSION paysera_params[:projectid] ||= Paysera.projectid sign_password ||= Paysera.sign_password raise send_error("'sign_password' is required but missing") if sign_password.nil? valid_request = validate_request(paysera_params) encoded_query = encode_string make_query(valid_request) signed_request = sign_request(encoded_query, sign_password) query = make_query({ :data => encoded_query, :sign => signed_request }) "https://www.paysera.lt/pay/?#{query}" end
Private Class Methods
encode_string(string)
click to toggle source
# File lib/paysera/request.rb, line 44 def self.encode_string(string) # 1) Encode with base64 # 2) Replace / with _ and + with - Base64.encode64(string).gsub("\n", '').gsub('/', '_').gsub('+', '-') end
make_query(data)
click to toggle source
# File lib/paysera/request.rb, line 33 def self.make_query(data) data.collect do |key, value| "#{CGI.escape(key.to_s)}=#{CGI.escape(value.to_s)}" end.compact.sort! * '&' end
send_error(msg)
click to toggle source
# File lib/paysera/request.rb, line 72 def self.send_error(msg) Paysera::Error::Request.new msg end
sign_request(query, password)
click to toggle source
# File lib/paysera/request.rb, line 39 def self.sign_request(query, password) # Encode string + password with md5 Digest::MD5.hexdigest(query + password) end
validate_request(req)
click to toggle source
# File lib/paysera/request.rb, line 50 def self.validate_request(req) request = {} Paysera::Attributes::REQUEST.each do |k, v| raise send_error("'#{k}' is required but missing") if v[:required] and req[k].nil? req_value = req[k].to_s regex = v[:regex].to_s maxlen = v[:maxlen] unless req[k].nil? raise send_error("'#{k}' value '#{req[k]}' is too long, #{v[:maxlen]} characters allowed.") if maxlen and req_value.length > maxlen raise send_error("'#{k}' value '#{req[k]}' invalid.") if '' != regex and !req_value.match(regex) # Add only existing params request[k] = req[k] end end request end