lib/alidayu.rb in alidayu-chaz1942-0.1.0 vs lib/alidayu.rb in alidayu-chaz1942-0.1.1
- old
+ new
@@ -1,33 +1,91 @@
require "alidayu/version"
+require 'cgi'
+require 'base64'
+require 'openssl'
+require 'securerandom'
+require 'json'
+require 'net/http'
module Alidayu
# Your code goes here...
class << self
attr_accessor :access_key_id, :access_key_secrete
-
+ # required params
+ #
+ # PhoneNumbers
+ # SignName
+ # TemplateCode
+ # TemplateParam
def send_text_message params
+ params.map { |key, value| params[key] = value.to_json.to_s if value.class.to_s == Hash.name }
+ params.merge!(
+ {Action: 'SendSms',
+ Version: '2017-05-25',
+ RegionId: 'cn-hangzhou'})
+ request params
end
def get_signature params
+ stander_string = generate_stander_string(params)
+ construct_string = 'GET&' + CGI.escape('/') + '&' + CGI.escape(stander_string)
+ digest = OpenSSL::Digest.new('sha1')
+ key = access_key_secrete + '&'
+ Base64.encode64(OpenSSL::HMAC.digest(digest, key, construct_string)).gsub(/\n/, '')
end
private
+ def generate_stander_string params
+ str = ''
+ keys = params.keys.sort
+ keys.each do |key|
+ str += "#{CGI.escape(key.to_s)}=#{CGI.escape(params[key.to_sym])}&"
+ end
+ str.gsub(/\&$/, '')
+ end
- def create_params params
+
+ def get_utc_timestamp
+ Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
end
+ def get_nonce
+ SecureRandom.uuid
+ end
+
+ def create_params params
+ rest_params = {
+ AccessKeyId: access_key_id,
+ Timestamp: get_utc_timestamp,
+ SignatureMethod: 'HMAC-SHA1',
+ SignatureVersion: '1.0',
+ SignatureNonce: get_nonce,
+ Format: "JSON"
+ }
+ params.merge rest_params
+ end
+
def get_request_url params
+ require_host = 'http://dysmsapi.aliyuncs.com/?'
+ final_params = create_params params
+ signature = get_signature final_params
+ final_params.merge!({Signature: signature})
+ final_params.map do |key, value|
+ require_host += "#{CGI.escape(key.to_s)}=#{CGI.escape(value)}&"
+ end
+ require_host.gsub(/\&$/, '')
end
def request params
-
+ url = URI(get_request_url(params))
+ response = Net::HTTP.get_response(url)
+ response.body
end
end
end