公共请求参数是指每一个接口都需要使用到的参数:
名称 类型 必填项 描述
Action String 是 操作接口名,系统规定参数,取值: GetPlayInfo
VideoId String 是 视频ID
Format String 否 返回值的类型,支持JSON与XML,默认为XML。
Version String 是 API版本号,为日期形式:YYYY-MM-DD,本版本对应为2017-03-21。
AccessKeyId String 是 阿里云颁发给用户的访问服务所用的密钥ID。
Signature String 是 签名结果串,关于签名的计算方法,请参见签名机制。
SignatureMethod String 是 签名方式,目前支持HMAC-SHA1。
Timestamp String 是 请求的时间戳。日期格式按照ISO8601标准表示,并需要使用UTC时间。格式为:YYYY-MM-DDThh:mm:ssZ
例如,2017-3-29T12:00:00Z(为北京时间2017年3月29日的20点0分0秒。
SignatureVersion String 是 签名算法版本,目前版本是1.0。
SignatureNonce String 是 唯一随机数,用于防止网络重放攻击。用户在不同请求间要使用不同的随机数值。
/**
* PHP 获取视频播放地址
*/
public function index($VideoId) {
date_default_timezone_set("UTC");//阿里云服务时间为UTC
$apiParams['Format'] = 'JSON';
$apiParams['VideoId'] = $VideoId;
$apiParams['Version'] = '2017-03-21';
$apiParams['SignatureMethod'] = 'Hmac-SHA1';
$apiParams['SignatureNonce'] = substr(md5(rand(1, 99999999)), rand(1, 9), 14);
$apiParams['SignatureVersion'] = '1.0';
$apiParams['Action'] = 'GetPlayInfo';
$apiParams['AccessKeyId'] = 'M4baa4qQsmkTzBwc';//阿里云密钥ID
$apiParams['Timestamp'] = date("Y-m-d\TH:i:s\Z");
$accessSecret = 'bva1ys7WnEPEaMImONunZkYhMBrhxk';//阿里云密钥
$apiParams['Signature'] = $this->computeSignature($credential = "GET",$apiParams, $accessSecret);//签名
$uri = http_build_query($apiParams);
$url = 'http://vod.cn-shanghai.aliyuncs.com/?' . $uri;
return $this->curl($url);
}
/**
* CURL
*/
private function curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
return $result;
}
/**
* 阿里云签名机制(生成签名)
*/
private function computeSignature($credential, $parameters, $accessKeySecret) {
ksort($parameters);
$stringToSign = strtoupper($credential) . '&' . $this->percentEncode('/') . '&';
$tmp = "";
foreach ($parameters as $key => $val) {
$tmp .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($val);
}
$tmp = trim($tmp, '&');
$stringToSign = $stringToSign . $this->percentEncode($tmp);
$key = $accessKeySecret . '&';
$hmac = hash_hmac("sha1", $stringToSign, $key, true);
return base64_encode($hmac);
}
/**
* url编码
* @param $str
* @return mixed|string
*/
protected function percentEncode($value = NULL) {
$en = urlencode($value);
$en = str_replace("+", "%20", $en);
$en = str_replace("*", "%2A", $en);
$en = str_replace("%7E", "~", $en);
return $en;
}
输出结果: