You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
4 years ago
|
<?php
|
||
|
namespace AliyunMNS\Signature;
|
||
|
|
||
|
use AliyunMNS\Requests\BaseRequest;
|
||
|
use AliyunMNS\Constants;
|
||
|
|
||
|
class Signature
|
||
|
{
|
||
|
static public function SignRequest($accessKey, BaseRequest &$request)
|
||
|
{
|
||
|
$canonicalizedMNSHeaders = "";
|
||
|
$headers = $request->getHeaders();
|
||
|
$contentMd5 = "";
|
||
|
if (isset($headers['Content-MD5']))
|
||
|
{
|
||
|
$contentMd5 = $headers['Content-MD5'];
|
||
|
}
|
||
|
$contentType = "";
|
||
|
if (isset($headers['Content-Type']))
|
||
|
{
|
||
|
$contentType = $headers['Content-Type'];
|
||
|
}
|
||
|
$date = $headers['Date'];
|
||
|
$queryString = $request->getQueryString();
|
||
|
$canonicalizedResource = $request->getResourcePath();
|
||
|
if ($queryString != NULL)
|
||
|
{
|
||
|
$canonicalizedResource .= "?" . $request->getQueryString();
|
||
|
}
|
||
|
if (0 !== strpos($canonicalizedResource, "/"))
|
||
|
{
|
||
|
$canonicalizedResource = "/" . $canonicalizedResource;
|
||
|
}
|
||
|
|
||
|
$tmpHeaders = array();
|
||
|
foreach ($headers as $key => $value)
|
||
|
{
|
||
|
if (0 === strpos($key, Constants::MNS_HEADER_PREFIX))
|
||
|
{
|
||
|
$tmpHeaders[$key] = $value;
|
||
|
}
|
||
|
}
|
||
|
ksort($tmpHeaders);
|
||
|
|
||
|
$canonicalizedMNSHeaders = implode("\n", array_map(function ($v, $k) { return $k . ":" . $v; }, $tmpHeaders, array_keys($tmpHeaders)));
|
||
|
|
||
|
$stringToSign = strtoupper($request->getMethod()) . "\n" . $contentMd5 . "\n" . $contentType . "\n" . $date . "\n" . $canonicalizedMNSHeaders . "\n" . $canonicalizedResource;
|
||
|
|
||
|
return base64_encode(hash_hmac("sha1", $stringToSign, $accessKey, $raw_output = TRUE));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|