php实现阿里云签名类

xiaoxiao2021-02-28  64

<?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' => '', '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编码后,将"+","*","~"做替换即满足ECS API规定的编码规范 $res = urlencode($str); $res = preg_replace('/\+/', ' ', $res); $res = preg_replace('/\*/', '*', $res); $res = preg_replace('/~/', '~', $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&/&' . $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"=>"DeleteCategory", "CateId"=>"857164610" ]; $url = "http://vod.cn-shanghai.aliyuncs.com/?"; $obj = new videoInterface($arr,$url); print_r($obj->callInterface());

扫码关注

转载请注明原文地址: https://www.6miu.com/read-51310.html

最新回复(0)