class Paybox::System::Base

Public Class Methods

check_response?(params, sign) click to toggle source
# File lib/paybox_system.rb, line 41
def self.check_response?(params, sign)
  digest = OpenSSL::Digest::SHA1.new
  public_key = OpenSSL::PKey::RSA.new(File.read(File.expand_path(File.dirname(__FILE__) + '/../docs/pubkey.pem')))

  public_key.verify(digest, Base64.decode64(Rack::Utils.unescape(sign)), params)
end
config() click to toggle source
# File lib/paybox_system.rb, line 11
def self.config
  @@config
end
config=(new_config) click to toggle source
# File lib/paybox_system.rb, line 15
def self.config=(new_config)
  @@config = new_config
end
hash_form_fields_from(options = {}) click to toggle source
# File lib/paybox_system.rb, line 19
def self.hash_form_fields_from(options = {})
  raise StandardError, "missing :secret_key in config Hash" unless @@config[:secret_key]

  formatted_options = Hash[options.map { |k, v| ["PBX_#{k.to_s.upcase}", v] }]
  formatted_options["PBX_HASH"] = "SHA512"

  date_iso = Time.now.iso8601
  formatted_options["PBX_TIME"] = date_iso

  base_params_query = formatted_options.to_a.map { |a| a.join("=") }.join("&")

  key = @@config[:secret_key]
  
  binary_key = [key].pack("H*")
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha512'),
                binary_key, base_params_query).upcase

  formatted_options["PBX_HMAC"] = signature

  formatted_options
end