module AlipayGlobal::Sign

Public Class Methods

generate(params) click to toggle source
# File lib/alipay_global/sign.rb, line 5
def self.generate(params)
  params = Utils.stringify_keys(params)
  sign_type = AlipayGlobal.sign_type.upcase
  key = AlipayGlobal.api_secret_key
  string = params_to_string(params)

  case sign_type
  when 'MD5'
    MD5.sign(string, key)
  when 'RSA'
    RSA.sign(string)
  when 'DSA'
    DSA.sign(string, key)
  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_global/sign.rb, line 43
def self.params_to_string(params)
  params.sort.map { |item| item.join('=') }.join('&')
end
verify?(params) click to toggle source
# File lib/alipay_global/sign.rb, line 23
def self.verify?(params)
  params = Utils.stringify_keys(params)

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

  case sign_type
  when 'MD5'
    key = AlipayGlobal.api_secret_key
    MD5.verify?(string, key, signature)
  when 'RSA'
    RSA.verify?(string, @alipay_rsa_public_key, signature)
  when 'DSA'
    DSA.verify?(string, signature)
  else
    false
  end
end