module Alipay::Sign

Constants

ALIPAY_RSA_PUBLIC_KEY

Public Class Methods

generate(params, options = {}) click to toggle source
# File lib/alipay/sign.rb, line 3
def self.generate(params, options = {})
  params = Utils.stringify_keys(params)
  sign_type = options[:sign_type] || Alipay.sign_type
  key = options[:key] || Alipay.key
  string = params_to_string(params)

  case sign_type
  when 'MD5'
    MD5.sign(key, string)
  when 'RSA'
    RSA.sign(key, string)
  when 'DSA'
    DSA.sign(key, string)
  else
    raise ArgumentError, "invalid sign_type #{sign_type}, allow value: 'MD5', 'RSA', 'DSA'"
  end
end
params_to_string(params) click to toggle source
# File lib/alipay/sign.rb, line 50
def self.params_to_string(params)
  params.sort.map { |item| item.join('=') }.join('&')
end
verify?(params, options = {}) click to toggle source
# File lib/alipay/sign.rb, line 30
def self.verify?(params, options = {})
  params = Utils.stringify_keys(params)

  sign_type = params.delete('sign_type')
  sign = params.delete('sign')
  string = params_to_string(params)

  case sign_type
  when 'MD5'
    key = options[:key] || Alipay.key
    MD5.verify?(key, string, sign)
  when 'RSA'
    RSA.verify?(ALIPAY_RSA_PUBLIC_KEY, string, sign)
  when 'DSA'
    DSA.verify?(string, sign)
  else
    false
  end
end