IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP实现阿里云HMAC-SHA1签名方法封装 -> 正文阅读

[PHP知识库]PHP实现阿里云HMAC-SHA1签名方法封装

以下是阿里签名机制的说明
在这里插入图片描述
以下是PHP具体实现方法封装

class register{

    static $AccessKeyId     = 'Your accessKeyId';
    static $AccessKeySecret = 'Your accessKeySecret';
    static $AliHost         = 'http://domain.aliyuncs.com/?';

    //查询域名
    public static function search($domain){
        $param = self::getCommonParams();
        $param['Action']  = 'CheckDomain';
        $param['DomainName'] = $domain;
        $param['Signature']  = self::getSignature($param);
        //echo $param['Timestamp'];exit;
    }

    //公共参数
    private static function getCommonParams(){
        date_default_timezone_set("GMT");
        $data = [
            'Format'           => 'JSON',
            'Version'          => '2016-05-11',
            'AccessKeyId'      => self::$AccessKeyId,
            'SignatureMethod'  => 'HMAC-SHA1',
            'Timestamp'        => date(DATE_ISO8601),//'2021-08-09T08:27:00Z',//,
            'SignatureVersion' => '1.0',
            'SignatureNonce'   => microtime(),
        ];
        return $data;
    }


    private static 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;
    }

    //生成签名
    private function getSignature($parameters)
    {
        // 将参数Key按字典顺序排序
        ksort($parameters);
        // 生成规范化请求字符串
        $canonicalizedQueryString = '';
        foreach($parameters as $key => $value)
        {
            $canonicalizedQueryString .= '&' .self::percentEncode($key)
                . '=' . self::percentEncode($value);
        }
        // 生成用于计算签名的字符串 stringToSign
        $stringToSign = 'GET&%2F&' . self::percentencode(substr($canonicalizedQueryString, 1));
        // 计算签名,注意accessKeySecret后面要加上字符'&'
        $signature = base64_encode(hash_hmac('sha1', $stringToSign, self::$AccessKeySecret . '&', true));
        return $signature;
    }


    /**
     * 模拟请求
     *
     * @param string $url
     * @param array  $query       POST内容
     * @param bool   $withHeader  是否返回头信息
     * @param array  $header      发送头信息
     * @return string
     * @throws Exception
     */
    public static function httpCurl($url, $query = [], $withHeader = false, $header = [])
    {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        if ($withHeader) {
            curl_setopt($ch, CURLOPT_HEADER, true);
        }

        if (!empty($query)) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($query));
        }

        if (!empty($header)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }

        $response = curl_exec($ch);
        $errorNo  = curl_errno($ch);

        is_resource($ch) && curl_close($ch);

        if (0 !== $errorNo) {
            throw new \Exception('curl error,errno:'.$errorNo);
        }
        return $response;
    }
}
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 11:55:25  更:2021-08-11 11:57:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 10:36:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码