in src/OSS/Signer/SignerV4.php [172:229]
private function calcCanonicalRequest($method, $resourcePath, array $query, array $headers, array $additionalHeaders)
{
/*
Canonical Request
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad
*/
//Canonical Uri
$canonicalUri = str_replace(array('%2F'), array('/'), rawurlencode($resourcePath));
//Canonical Query
$querySigned = array();
foreach ($query as $key => $value) {
$querySigned[rawurlencode($key)] = rawurlencode($value);
}
ksort($querySigned);
$sortedQueryList = array();
foreach ($querySigned as $key => $value) {
if (strlen($value) > 0) {
$sortedQueryList[] = $key . '=' . $value;
} else {
$sortedQueryList[] = $key;
}
}
$canonicalQuery = implode('&', $sortedQueryList);
//Canonical Headers
$headersSigned = array();
foreach ($headers as $key => $value) {
$lowk = strtolower($key);
if (SignerV4::isDefaultSignedHeader($lowk) ||
in_array($lowk, $additionalHeaders)) {
$headersSigned[$lowk] = trim($value);
}
}
ksort($headersSigned);
$canonicalizedHeaders = '';
foreach ($headersSigned as $key => $value) {
$canonicalizedHeaders .= $key . ':' . $value . "\n";
}
//Additional Headers
$canonicalAdditionalHeaders = implode(';', $additionalHeaders);
$hashPayload = "UNSIGNED-PAYLOAD";
if (isset($headersSigned['x-oss-content-sha256'])) {
$hashPayload = $headersSigned['x-oss-content-sha256'];
}
$stringToSign = $method . "\n"
. $canonicalUri . "\n"
. $canonicalQuery . "\n"
. $canonicalizedHeaders . "\n"
. $canonicalAdditionalHeaders . "\n"
. $hashPayload;
return $stringToSign;
}