ECS API计算Signature参考示例(PHP)

ECS API计算Signature参考示例(PHP)

更新时间:2017-06-07 13:26:11

ECS API 计算Signature参考示例(PHP),如下:

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


function computeSignature($parameters, $accessKeySecret)
{
    // 将参数Key按字典顺序排序
    ksort($parameters);
    // 生成规范化请求字符串
    $canonicalizedQueryString = '';
    foreach($parameters as $key => $value)
    {
    $canonicalizedQueryString .= '&' . percentEncode($key)
        . '=' . percentEncode($value);
    }
    // 生成用于计算签名的字符串 stringToSign
    $stringToSign = 'GET&%2F&' . percentencode(substr($canonicalizedQueryString, 1));
    // 计算签名,注意accessKeySecret后面要加上字符'&'
    $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
    return $signature;
}
// 注意使用GMT时间
date_default_timezone_set("GMT");
$dateTimeFormat = 'Y-m-d\TH:i:s\Z'; // ISO8601规范
$accessKeyId = '';      // 这里填写您的Access Key ID
$accessKeySecret = '';  // 这里填写您的Access Key Secret
$data = array(
    // 公共参数
    'Format' => 'XML',
    'Version' => '2013-01-10',
    'AccessKeyId' => $accessKeyId,
    'SignatureVersion' => '1.0',
    'SignatureMethod' => 'HMAC-SHA1',
    'SignatureNonce'=> uniqid(),
    'TimeStamp' => date($dateTimeFormat),
    // 接口参数
    'Action' => 'DescribeZones',
    'RegionId' => 'cn-hangzhou-dg-a01'
);
// 计算签名并把签名结果加入请求参数
$data['Signature'] = computeSignature($data, $accessKeySecret);
// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://ecs.aliyuncs.com/?' . http_build_query($data));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
echo $res . "\n";
?>


如果问题还未能解决,请联系售后技术支持