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.1"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



29
30
31
# File 'lib/aliyun/vms.rb', line 29

def configuration
  @configuration ||= Configuration.new
end

Class Method Details

.canonicalized_query_string(params) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/aliyun/vms.rb', line 72

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_paramsObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/aliyun/vms.rb', line 60

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

Yields:



33
34
35
# File 'lib/aliyun/vms.rb', line 33

def configure
  yield(configuration)
end

.encode(input) ⇒ Object

对字符串进行 PERCENT 编码



93
94
95
# File 'lib/aliyun/vms.rb', line 93

def encode(input)
  output = url_encode(input)
end

.get_params(user_params) ⇒ Object



56
57
58
# File 'lib/aliyun/vms.rb', line 56

def get_params(user_params)
  params = config_params.merge(user_params)
end

.get_url(user_params) ⇒ Object



49
50
51
52
53
54
# File 'lib/aliyun/vms.rb', line 49

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_nonceObject

生成语音唯一标识码,采用到微秒的时间戳



103
104
105
# File 'lib/aliyun/vms.rb', line 103

def seed_signature_nonce
  Time.now.utc.strftime("%Y%m%d%H%M%S%L")
end

.seed_timestampObject

生成语音时间戳



98
99
100
# File 'lib/aliyun/vms.rb', line 98

def seed_timestamp
  Time.now.utc.strftime("%FT%TZ")
end

.send(called_show_number, called_number, tts_code, tts_param, out_id = '') ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/aliyun/vms.rb', line 37

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' => seed_timestamp
    }))
end

.sign(key_secret, coded_params) ⇒ Object

生成数字签名



85
86
87
88
89
90
# File 'lib/aliyun/vms.rb', line 85

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

测试参数未编码时生成的字符串是否正确(多一道保险)



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/aliyun/vms.rb', line 108

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