class QiwiPay::Signature

Qiwi payment signature calculator

Public Class Methods

new(params, secret) click to toggle source

@param params [Hash] request parameters @param secret [String] secret key for signature

# File lib/qiwi-pay/signature.rb, line 10
def initialize(params, secret)
  @params = params.dup.tap do |hs|
    hs.delete :sign
    hs.delete 'sign'
  end
  @secret = secret.to_s
end

Public Instance Methods

sign() click to toggle source

Calculates signature @return [String] params signature

# File lib/qiwi-pay/signature.rb, line 20
def sign
  digest = OpenSSL::Digest.new('sha256')
  OpenSSL::HMAC.hexdigest(digest, @secret, build_params_string)
end

Private Instance Methods

build_params_string() click to toggle source
# File lib/qiwi-pay/signature.rb, line 27
def build_params_string
  map_sorted(@params) { |_k, v| v }.reject(&:nil?)
                                   .map(&:to_s)
                                   .reject(&:empty?)
                                   .join('|')
end
map_sorted(hash) { |k, hash| ... } click to toggle source

Maps hash yielding key-value pairs ordered by key

# File lib/qiwi-pay/signature.rb, line 35
def map_sorted(hash)
  hash.keys
      .sort_by(&:to_sym)
      .map { |k| yield k, hash[k] }
end