in src/OSS/Signer/SignerV4.php [13:58]
public function sign(RequestCore $request, Credentials $credentials, array &$options)
{
// Date
if (!isset($request->request_headers['Date'])) {
$request->add_header('Date', gmdate('D, d M Y H:i:s \G\M\T'));
}
$timestamp = strtotime($request->request_headers['Date']);
if ($timestamp === false) {
$timestamp = time();
}
$datetime = gmdate('Ymd\THis\Z', $timestamp);
$date = substr($datetime, 0, 8);
$request->add_header("x-oss-date", $datetime);
if (!isset($request->request_headers['x-oss-content-sha256'])) {
$request->add_header("x-oss-content-sha256", 'UNSIGNED-PAYLOAD');
}
// Credentials information
if (!empty($credentials->getSecurityToken())) {
$request->add_header("x-oss-security-token", $credentials->getSecurityToken());
}
$headers = $request->request_headers;
$method = strtoupper($request->method);
$region = $options['region'];
$product = $options['product'];
$scope = $this->buildScope($date, $region, $product);
$resourcePath = $this->getResourcePath($options);
$additionalHeaders = $this->getCommonAdditionalHeaders($request, $options);
$queryString = parse_url($request->request_url, PHP_URL_QUERY);
$query = array();
if ($queryString !== null) {
parse_str($queryString, $query);
}
$canonicalRequest = $this->calcCanonicalRequest($method, $resourcePath, $query, $headers, $additionalHeaders);
$stringToSign = $this->calcStringToSign($datetime, $scope, $canonicalRequest);
// printf('canonical request:%s' . PHP_EOL, $canonicalRequest);
// printf('sign str:%s' . PHP_EOL, $stringToSign);
$options['string_to_sign'] = $stringToSign;
$signature = $this->calcSignature($credentials->getAccessKeySecret(), $date, $region, $product, $stringToSign);
$authorization = 'OSS4-HMAC-SHA256 Credential=' . $credentials->getAccessKeyId() . '/' . $scope;
$additionalHeadersString = implode(';', $additionalHeaders);
if ($additionalHeadersString !== '') {
$authorization .= ',AdditionalHeaders=' . $additionalHeadersString;
}
$authorization .= ',Signature=' . $signature;
$request->add_header('Authorization', $authorization);
}