当前位置:网站首页>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;
}
}
边栏推荐
猜你喜欢

path 修补文件命令

增量编译技术在Lightly中的实践

未来智安XDR及核心组件产品上榜《嘶吼2022网络安全产业图谱》

Comparison between Boda Industrial Cloud and Alibaba Cloud

向龙芯2K1000板子上烧写中标麒麟系统

【MQ-3 Alcohol Detector and Arduino Detect Alcohol】

Process (present) : custom shell command line interpreter

TCP-IP协议整理

Django、Rest framework访问数据库获取数据

本地数据库 sqlite3 编译和使用
随机推荐
Lightly 支持 Markdown 文件在线编写(文中提供详细 Markdown 语法)
408-二叉树-先序中序后序层次遍历
IDEA2021.2安装与配置(持续更新)
Pylon CLI 低成本的本地环境管控工具应用实例
全加器高进位和低进位的理解
Altium Designer基础知识
Gartner 权威预测未来4年网络安全的8大发展趋势
工作过程中问题汇总
MongoDB相关记录
如何使用 PHP 实现网页交互
跨域问题解决办法
The use and simulation of vector implementation:
Altium Designer Basics
步兵相关连接
【LeetCode】Add the linked list with carry
剑指Offer 34.二叉树中和为某一值的路径 dfs+回溯
Process (below): process control, termination, waiting, replacement
Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)
微服务入门
3个最佳实践助力企业改善供应链安全