module AliSms::Util

Public Class Methods

make_query_str(dataHash) click to toggle source
# File lib/ali_sms/util.rb, line 9
def self.make_query_str(dataHash)
  sortHash = Hash[dataHash.sort_by { |k, v| k }]
  if sortHash.has_key?("sign")
    sortHash.delete("sign")
  end

  sortQueryStr = ""
  sortHash.each do |k, v|
    sortQueryStr = sortQueryStr + "&" + specialUrlEncode(k) + "=" + specialUrlEncode(v)
  end
  sortQueryStr = sortQueryStr[1..-1]

  return sortQueryStr
end
make_sign(sortQueryStr, httpMethod, key) click to toggle source
# File lib/ali_sms/util.rb, line 24
def self.make_sign(sortQueryStr, httpMethod, key)
  str = httpMethod + "&" + specialUrlEncode("/") + "&" + specialUrlEncode(sortQueryStr)

  digest = OpenSSL::Digest.new("sha1")
  str_8 = str.encode("UTF-8")
  hash  = OpenSSL::HMAC.digest(digest, key, str_8)
  base64_str = Base64.encode64(hash).chomp
  
  sign = specialUrlEncode(base64_str)

  return sign
end
specialUrlEncode(value) click to toggle source

此方法没有问题

# File lib/ali_sms/util.rb, line 38
def self.specialUrlEncode(value)
  str = CGI.escape(value)
  return str.gsub("+", "%20").gsub("*", "%2A").gsub("%7E", "~")
end