|
|
|
|
module AliyunVod::Service::Base
|
|
|
|
|
def request(method, params)
|
|
|
|
|
params = AliyunVod::Sign.format_params(params.compact) # 多层hash需要预先处理,保证值为string
|
|
|
|
|
params[:Signature] = AliyunVod::Sign.generate(params, method: method.to_s.upcase)
|
|
|
|
|
|
|
|
|
|
Rails.logger.info("[AliyunVod] request => method: #{method}, params: #{params}")
|
|
|
|
|
|
|
|
|
|
response = Faraday.public_send(method, AliyunVod.base_url, params)
|
|
|
|
|
result = JSON.parse(response.body)
|
|
|
|
|
|
|
|
|
|
Rails.logger.info("[AliyunVod] response => status: #{response.status}, result: #{result}")
|
|
|
|
|
|
|
|
|
|
if response.status != 200
|
|
|
|
|
message =
|
|
|
|
|
case result['Code']
|
|
|
|
|
when 'InvalidFileName.Extension' then '不支持的文件格式'
|
|
|
|
|
when 'IllegalCharacters' then '文件名称包含非法字符'
|
|
|
|
|
else raise AliyunVod::Error, result['Message']
|
|
|
|
|
end
|
|
|
|
|
raise AliyunVod::Error, message if message.present?
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
result
|
|
|
|
|
rescue => ex
|
|
|
|
|
::Util.logger_error(ex)
|
|
|
|
|
raise AliyunVod::Error, ex.message
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def base_params
|
|
|
|
|
{
|
|
|
|
|
AccessKeyId: AliyunVod.access_key_id,
|
|
|
|
|
Format: 'JSON',
|
|
|
|
|
Version: '2017-03-21',
|
|
|
|
|
SignatureMethod: 'HMAC-SHA1',
|
|
|
|
|
SignatureVersion: '1.0',
|
|
|
|
|
SignatureNonce: signature_nonce,
|
|
|
|
|
Timestamp: timestamp,
|
|
|
|
|
UserData: user_data
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def user_data
|
|
|
|
|
{ MessageCallback: { CallbackURL: AliyunVod.callback_url } }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def timestamp
|
|
|
|
|
Time.now.utc.iso8601
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def signature_nonce
|
|
|
|
|
chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
|
|
|
|
|
chars.sample(16).join('')
|
|
|
|
|
end
|
|
|
|
|
end
|