当前位置:网站首页>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;
}
}
边栏推荐
猜你喜欢
随机推荐
h264转hls
汇编语言跳转指令总结
想低成本保障软件安全?5大安全任务值得考虑
网络 7 层架构
全排列 DFS
剑指Offer 34.二叉树中和为某一值的路径 dfs+回溯
如何用 Lightly 进行 Debug 断点调试?
idea中创建jsp项目详细步骤
剑指Offer 04.二位数组中的查找 线性查找
剑指Offer 32.Ⅱ从上到下打印二叉树
idea中创建jsp项目详细步骤
【详解】优先级队列的底层实现
vector的使用和模拟实现:
未来智安XDR及核心组件产品上榜《嘶吼2022网络安全产业图谱》
Plus版SBOM:流水线物料清单PBOM
js平层数组转树形结构(解决数据处理后源数据篡改)
rosdep update failure solution (pro-test effective)
Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)
学习(三):事件的订阅与发布
功能性网站









