php實現阿里雲簽名類


<?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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM