module Alidns::Sign

Public Class Methods

sign(method, app_key, app_secret, params) click to toggle source

生成sign数据

# File lib/alidns/sign.rb, line 9
def self.sign(method, app_key, app_secret, params)
  #排序
  req_params = params.split('&').map{|k| k.split '='}.sort_by!{ |k| k.first}.map{|k| "#{k.first}=#{k.last}"}.join('&')
  req_params = URI.encode(req_params).gsub('+','%20').gsub('=','%3D').gsub('~','%7E').gsub('*','%2A').gsub('/', '%2F').gsub(':','%253A').gsub('&','%26')
  stringToSign = "#{method}&%2F&#{req_params}"
  signature = Base64.encode64 OpenSSL::HMAC.digest('sha1', "#{app_secret}&", stringToSign)
  signature = "Signature=#{signature}"
end