class Unitpay::Service

Constants

EXTRA_OPTIONS
URL

Attributes

currency[R]
public_key[R]
secret_key[R]
use_sign[R]

Public Class Methods

new(public_key, secret_key, use_sign = true, currency = 'RUB') click to toggle source
# File lib/unitpay/service.rb, line 6
def initialize(public_key, secret_key, use_sign = true, currency = 'RUB')
  @public_key, @secret_key, @use_sign, @currency = public_key, secret_key, use_sign, currency
end

Public Instance Methods

params_for_widget(sum, account, desc) click to toggle source
# File lib/unitpay/service.rb, line 18
def params_for_widget(sum, account, desc)
  main_params(sum, account, desc).merge(publicKey: public_key)
end
payment_params(sum, account, desc, options = {}) click to toggle source
# File lib/unitpay/service.rb, line 14
def payment_params(sum, account, desc, options = {})
  main_params(sum, account, desc).merge(extra_params(options))
end
payment_url(sum, account, desc, options = {}) click to toggle source
# File lib/unitpay/service.rb, line 10
def payment_url(sum, account, desc, options = {})
  URI.escape(url(sum, account, desc, options))
end
valid_action_signature?(method, params) click to toggle source
# File lib/unitpay/service.rb, line 26
def valid_action_signature?(method, params)
  return false if params.nil? || params[:signature].nil?
  params[:signature] == calculate_action_sign(method, params)
end
valid_signature?(current_sign, sum, account, desc) click to toggle source
# File lib/unitpay/service.rb, line 22
def valid_signature?(current_sign, sum, account, desc)
  current_sign == calculate_sign(sum, account, desc)
end

Private Instance Methods

calculate_action_sign(method, params) click to toggle source
# File lib/unitpay/service.rb, line 39
def calculate_action_sign(method, params)
  sign_params = params.dup
  sign_params.delete(:sign)
  sign_params.delete(:signature)

  values = Hash[ sign_params.sort ].values + [ secret_key ]
  values.unshift(method)

  signature_of(values)
end
calculate_sign(sum, account, desc) click to toggle source
# File lib/unitpay/service.rb, line 35
def calculate_sign(sum, account, desc)
  signature_of([ account, currency, desc, sum, secret_key ])
end
extra_params(options) click to toggle source
# File lib/unitpay/service.rb, line 65
def extra_params(options)
  options.select { |key, _| EXTRA_OPTIONS.include?(key) }
end
main_params(sum, account, desc) click to toggle source
# File lib/unitpay/service.rb, line 54
def main_params(sum, account, desc)
  sign = use_sign ? { signature: calculate_sign(sum, account, desc) } : {}

  {
    sum: sum,
    account: account,
    desc: desc,
    currency: currency
  }.merge(sign)
end
signature_of(arr) click to toggle source
# File lib/unitpay/service.rb, line 50
def signature_of(arr)
  Digest::SHA256.hexdigest(arr.join('{up}'))
end
to_query(hash) click to toggle source
# File lib/unitpay/service.rb, line 73
def to_query(hash)
  hash.map { |k, v| "#{k}=#{v}" }.join('&')
end
url(sum, account, desc, options) click to toggle source
# File lib/unitpay/service.rb, line 69
def url(sum, account, desc, options)
  "#{ URL }/#{ public_key }?#{ to_query(payment_params(sum, account, desc, options)) }"
end