private function calcCanonicalRequest()

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