当前位置:网站首页>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 修补文件命令
向龙芯2K1000板子上烧写中标麒麟系统
Process (in): process state, process address space
Gartner 权威预测未来4年网络安全的8大发展趋势
注意!软件供应链安全挑战持续升级
【详解】线程池及其自定义线程池的实现
最长连续不重复子序列 双指针
【多线程】线程安全保护机制
IDEA2021.2安装与配置(持续更新)
openwrt RK3568_EVB移植
哈希表解题方法
Django、Rest framework访问数据库获取数据
【MQ-3 Alcohol Detector and Arduino Detect Alcohol】
bluez5.50+pulseaudio实现蓝牙音响音频播放
CCF刷题之旅--第一题
Mac安装MySQL详细教程
unity相关的功能链接
进程(下):进程控制、终止、等待、替换
408-二叉树-先序中序后序层次遍历
学习(三):事件的订阅与发布