当前位置:网站首页>PHP实现阿里云HMAC-SHA1签名方法封装
PHP实现阿里云HMAC-SHA1签名方法封装
2022-08-02 03:35:00 【春去春还会来】
以下是阿里签名机制的说明
以下是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;
}
}
边栏推荐
猜你喜欢
随机推荐
proteus数字电路仿真——入门实例
增量编译技术在Lightly中的实践
Laptop charging problems
剑指Offer 32.Ⅰ从上到下打印二叉树
h264转flv
MPU6050 accelerometer and gyroscope sensor is connected with the Arduino
汇编语言跳转指令总结
剑指Offer 31.栈的压入、弹出
剑指Offer 32.Ⅱ从上到下打印二叉树
电脑基本知识
跨域问题解决办法
机械臂运动学解析
剑指Offer 16.数值的整数次方 快速幂+ 递归
自研用户登录鉴权机制流程与实现过程
flv文件结构解析
[Database] Four characteristics of transaction
运行时应用自我保护(RASP):应用安全的自我修养
全加器高进位和低进位的理解
WebApp 在线编程成趋势:如何在 iPad、Matepad 上编程?
【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)









