<?php
namespace App\Library\Ali; class VideoInterface{ public $data; public $accessKeyId = "---"; public $accessKeySecret = "---"; public $url; public function __construct($actionArray,$url){ $this->url = $url; date_default_timezone_set("GMT"); $this->data = array( // 公共參數 'Format' => 'json', 'Version' => '2017-03-21', 'AccessKeyId' => $this->accessKeyId, 'SignatureVersion' => '1.0', 'SignatureMethod' => 'HMAC-SHA1', 'SignatureNonce'=> uniqid(), 'TimeStamp' => date('Y-m-d\TH:i:s\Z'), ); //判斷輸入的參數是否為數組 if(is_array($actionArray)){ $this->data = array_merge($this->data,$actionArray); } } public function percentEncode($str) { // 使用urlencode編碼后,將"+","*","%7E"做替換即滿足ECS API規定的編碼規范 $res = urlencode($str); $res = preg_replace('/\+/', '%20', $res); $res = preg_replace('/\*/', '%2A', $res); $res = preg_replace('/%7E/', '~', $res); return $res; } public function computeSignature($parameters, $accessKeySecret) { // 將參數Key按字典順序排序 ksort($parameters); // 生成規范化請求字符串 $canonicalizedQueryString = ''; foreach($parameters as $key => $value) { $canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value); } // 生成用於計算簽名的字符串 stringToSign $stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1)); // 計算簽名,注意accessKeySecret后面要加上字符'&' $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true)); return $signature; } public function callInterface(){ // 計算簽名並把簽名結果加入請求參數 $this->data['Signature'] = $this->computeSignature($this->data, $this->accessKeySecret); // 發送請求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url . http_build_query($this->data)); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); $res = json_decode($res); return $res; } } $arr = [ "Action"=>"GetVideoPlayAuth", "VideoId"=>"---" ]; $url = "http://vod.cn-shanghai.aliyuncs.com/?"; $obj = new videoInterface($arr,$url); print_r($obj->callInterface());
轉自 https://blog.csdn.net/weixin_38422478/article/details/77750896