module Aliyun::Sms
Constants
- VERSION
Attributes
configuration[W]
Public Class Methods
canonicalized_query_string(params)
click to toggle source
# File lib/aliyun/sms.rb, line 85 def canonicalized_query_string(params) cqstring = '' params.sort_by{|key, val| key}.each do |key, value| if cqstring.empty? cqstring += "#{encode(key)}=#{encode(value)}" else cqstring += "&#{encode(key)}=#{encode(value)}" end end cqstring end
config_params()
click to toggle source
# File lib/aliyun/sms.rb, line 72 def config_params() params ={ 'AccessKeyId' => configuration.access_key_id, 'Action' => configuration.action, 'Format' => configuration.format, 'RegionId' => configuration.region_id, 'SignName' => configuration.sign_name, 'SignatureMethod' => configuration.signature_method, 'SignatureVersion' => configuration.signature_version, 'Version' => configuration.version } end
configuration()
click to toggle source
# File lib/aliyun/sms.rb, line 30 def configuration @configuration ||= Configuration.new end
configure() { |configuration| ... }
click to toggle source
# File lib/aliyun/sms.rb, line 34 def configure yield(configuration) end
encode(input)
click to toggle source
对字符串进行 PERCENT 编码
# File lib/aliyun/sms.rb, line 106 def encode(input) output = url_encode(input) end
get_params(user_params)
click to toggle source
# File lib/aliyun/sms.rb, line 68 def get_params(user_params) params = config_params.merge(user_params) end
get_url(user_params)
click to toggle source
# File lib/aliyun/sms.rb, line 61 def get_url(user_params) params = get_params(user_params) coded_params = canonicalized_query_string(params) key_secret = configuration.access_key_secret url = 'http://dysmsapi.aliyuncs.com/?' + 'Signature=' + sign(key_secret, coded_params) + '&' + coded_params end
seed_signature_nonce()
click to toggle source
生成短信唯一标识码,采用到微秒的时间戳
# File lib/aliyun/sms.rb, line 116 def seed_signature_nonce Time.now.utc.strftime("%Y%m%d%H%M%S%L") end
seed_timestamp()
click to toggle source
生成短信时间戳
# File lib/aliyun/sms.rb, line 111 def seed_timestamp Time.now.utc.strftime("%FT%TZ") end
send(phone_numbers, template_code, template_param, out_id = '')
click to toggle source
# File lib/aliyun/sms.rb, line 38 def send(phone_numbers, template_code, template_param, out_id = '') Typhoeus.get(get_url({ 'PhoneNumbers' => phone_numbers, 'TemplateCode' => template_code, 'TemplateParam' => template_param, 'OutId' => out_id, 'SignatureNonce' => seed_signature_nonce, 'Timestamp' => seed_timestamp })) end
send_globle(mobile, text, from, type = 'OTP')
click to toggle source
# File lib/aliyun/sms.rb, line 49 def send_globle(mobile, text, from, type = 'OTP') Typhoeus.get(get_url({ 'Action' => 'SendMessageToGlobe', 'Message' => text, 'To' => mobile, 'From' => from, 'Type' => type, 'SignatureNonce' => seed_signature_nonce, 'Timestamp' => seed_timestamp })) end
sign(key_secret, coded_params)
click to toggle source
生成数字签名
# File lib/aliyun/sms.rb, line 98 def sign(key_secret, coded_params) key = key_secret + '&' signature = 'GET' + '&' + encode('/') + '&' + encode(coded_params) sign = Base64.encode64("#{OpenSSL::HMAC.digest('sha1',key, signature)}") encode(sign.chomp) # 通过chomp去掉最后的换行符 LF end
test_query_string(params)
click to toggle source
测试参数未编码时生成的字符串是否正确(多一道保险)
# File lib/aliyun/sms.rb, line 121 def test_query_string(params) qstring = '' params.sort_by{|key, val| key}.each do |key, value| if qstring.empty? qstring += "#{key}=#{value}" else qstring += "&#{key}=#{value}" end end qstring end