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