Module: Aliyun::Vms
- Defined in:
- lib/aliyun/vms.rb,
lib/aliyun/vms/version.rb
Defined Under Namespace
Classes: Configuration
Constant Summary collapse
- VERSION =
"0.0.3"
Class Attribute Summary collapse
Class Method Summary collapse
- .canonicalized_query_string(params) ⇒ Object
- .config_params ⇒ Object
- .configure {|configuration| ... } ⇒ Object
-
.encode(input) ⇒ Object
对字符串进行 PERCENT 编码.
- .get_params(user_params) ⇒ Object
- .get_url(user_params) ⇒ Object
-
.seed_signature_nonce ⇒ Object
生成每次请求唯一的防重放攻击,.
-
.seed_timestamp ⇒ Object
生成语音时间戳.
- .send(called_show_number, called_number, tts_code, tts_param, out_id = '') ⇒ Object
-
.sign(key_secret, coded_params) ⇒ Object
生成数字签名.
-
.test_query_string(params) ⇒ Object
测试参数未编码时生成的字符串是否正确(多一道保险).
Class Attribute Details
.configuration ⇒ Object
31 32 33 |
# File 'lib/aliyun/vms.rb', line 31 def configuration @configuration ||= Configuration.new end |
Class Method Details
.canonicalized_query_string(params) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/aliyun/vms.rb', line 74 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 ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/aliyun/vms.rb', line 62 def config_params() params ={ 'AccessKeyId' => configuration.access_key_id, 'Action' => configuration.action, 'Format' => configuration.format, 'RegionId' => configuration.region_id, 'SignatureMethod' => configuration.signature_method, 'SignatureVersion' => configuration.signature_version, 'Version' => configuration.version } end |
.configure {|configuration| ... } ⇒ Object
35 36 37 |
# File 'lib/aliyun/vms.rb', line 35 def configure yield(configuration) end |
.encode(input) ⇒ Object
对字符串进行 PERCENT 编码
95 96 97 |
# File 'lib/aliyun/vms.rb', line 95 def encode(input) output = url_encode(input) end |
.get_params(user_params) ⇒ Object
58 59 60 |
# File 'lib/aliyun/vms.rb', line 58 def get_params(user_params) params = config_params.merge(user_params) end |
.get_url(user_params) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/aliyun/vms.rb', line 51 def get_url(user_params) params = get_params(user_params) coded_params = canonicalized_query_string(params) key_secret = configuration.access_key_secret url = 'http://dyvmsapi.aliyuncs.com/?' + 'Signature=' + sign(key_secret, coded_params) + '&' + coded_params end |
.seed_signature_nonce ⇒ Object
生成每次请求唯一的防重放攻击,
105 106 107 108 |
# File 'lib/aliyun/vms.rb', line 105 def seed_signature_nonce # Time.now.utc.strftime("%Y%m%d%H%M%S%L") SecureRandom.uuid end |
.seed_timestamp ⇒ Object
生成语音时间戳
100 101 102 |
# File 'lib/aliyun/vms.rb', line 100 def Time.now.utc.strftime("%FT%TZ") end |
.send(called_show_number, called_number, tts_code, tts_param, out_id = '') ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/aliyun/vms.rb', line 39 def send(called_show_number, called_number, tts_code, tts_param, out_id = '') Typhoeus.get(get_url({ 'CalledShowNumber' => called_show_number, 'CalledNumber' => called_number, 'TtsCode' => tts_code, 'TtsParam' => tts_param, 'OutId' => out_id, 'SignatureNonce' => seed_signature_nonce, 'Timestamp' => })) end |
.sign(key_secret, coded_params) ⇒ Object
生成数字签名
87 88 89 90 91 92 |
# File 'lib/aliyun/vms.rb', line 87 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) ⇒ Object
测试参数未编码时生成的字符串是否正确(多一道保险)
111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/aliyun/vms.rb', line 111 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 |