$appId = '';		
$secretId = '';
$secretKey = '';
$region = '';
$bucket = '';

/**
* php 签名样例
* @param string $method 请求类型 method
* @param string $filename 文件名称
* @return string 签名字符串
*/
function getAuthorization($secretid, $secretkey, $method, $filename)
{
  // 获取个人 API 密钥 https://console.qcloud.com/capi
  $SecretId = $secretid;
  $SecretKey = $secretkey;
  // 整理参数
  $queryParams = array();
  $headers = array();
  $method = strtolower($method ? $method : 'head');
  $filename = $filename ? $filename : '/';
  substr($filename, 0, 1) != '/' && ($filename = '/' . $filename);
  // 工具方法
  function getObjectKeys($obj)
  {
      $list = array_keys($obj);
      sort($list);
      return $list;
  }
  function obj2str($obj)
  {
     $list = array();
     $keyList = getObjectKeys($obj);
     $len = count($keyList);
     for ($i = 0; $i < $len; $i++) {
     $key = $keyList[$i];
     $val = isset($obj[$key]) ? $obj[$key] : '';
     $key = strtolower($key);
     $list[] = rawurlencode($key) . '=' . rawurlencode($val);
  }
     return implode('&', $list);
}
  // 要用到的 Authorization 参数列表
  $qSignAlgorithm = 'sha1';
  $qAk = $SecretId;
  $qSignTime = (string)(time() - 60) . ';' . (string)(time() + 3600);
  $qKeyTime = $qSignTime;
  $qHeaderList = strtolower(implode(';', getObjectKeys($headers)));
  $qUrlParamList = strtolower(implode(';', getObjectKeys($queryParams)));
  // 签名算法说明文档:https://www.qcloud.com/document/product/436/7778
  // 步骤一:计算 SignKey
  $signKey = hash_hmac("sha1", $qKeyTime, $SecretKey);
  // 步骤二:构成 FormatString
  $formatString = implode("\n", array(strtolower($method), $filename, obj2str($queryParams), obj2str($headers), ''));
  // 步骤三:计算 StringToSign
  $stringToSign = implode("\n", array('sha1', $qSignTime, sha1($formatString), ''));
  // 步骤四:计算 Signature
 $qSignature = hash_hmac('sha1', $stringToSign, $signKey);
 // 步骤五:构造 Authorization
 $authorization = implode('&', array(
 'q-sign-algorithm=' . $qSignAlgorithm,
 'q-ak=' . $qAk,
 'q-sign-time=' . $qSignTime,
 'q-key-time=' . $qKeyTime,
 'q-header-list=' . $qHeaderList,
 'q-url-param-list=' . $qUrlParamList,
 'q-signature=' . $qSignature
));
  return $authorization;
}


$method = 'GET';
$cosPath = '/';
$sign = getAuthorization($secretId, $secretKey, $method, $cosPath); //签名

发表评论