module Qpay

Constants

VERSION

Public Class Methods

params_with_sign(params, config) click to toggle source
# File lib/qpay/sign.rb, line 21
def params_with_sign(params, config)
  params_dup = preprocess_params(params)
  params_dup.merge('sign' => Qpay.sign(params, config))
end
sign(params, config) click to toggle source
# File lib/qpay/sign.rb, line 3
def sign(params, config)
  Digest::MD5.hexdigest(string_params_without_sign(params, config)).upcase
end
sign_app(params, config) click to toggle source

qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=165

# File lib/qpay/sign.rb, line 8
def sign_app(params, config)
  key = "#{config.app_key}&"
  data = preprocess_params(params, keep_blank: true).sort_by { |k, _| k }.map { |x| x.join('=') }.join('&')
  digest = OpenSSL::Digest.new('sha1')
  hmac = OpenSSL::HMAC.digest(digest, key, data)
  Base64.encode64(hmac).strip
end
string_params_without_sign(params, config) click to toggle source
# File lib/qpay/sign.rb, line 16
def string_params_without_sign(params, config)
  sorted_params = preprocess_params(params).sort_by { |k, _| k }
  (sorted_params << ['key', config.api_key]).map { |x| x.join('=') }.join('&')
end

Private Class Methods

blank?(v) click to toggle source
# File lib/qpay/sign.rb, line 42
def blank?(v)
  !v || v.nil? || (v.respond_to?(:empty?) && v.empty?)
end
preprocess_params(params, keep_blank: false) click to toggle source
# File lib/qpay/sign.rb, line 31
def preprocess_params(params, keep_blank: false)
  params_dup = params.dup
  stringified_keys_params = {}
  params_dup.each do |k, v|
    next if !keep_blank && blank?(v)
    stringified_keys_params[k.to_s] = v
  end
  stringified_keys_params.delete('key')
  stringified_keys_params
end
random_string() click to toggle source
# File lib/qpay/sign.rb, line 27
def random_string
  SecureRandom.urlsafe_base64.tr('-_', '')
end