getBody()); $params['Timestamp'] = gmdate('c'); $params['SignatureVersion'] = '2'; $params['SignatureMethod'] = 'HmacSHA256'; $params['AWSAccessKeyId'] = $credentials->getAccessKeyId(); if ($token = $credentials->getSecurityToken()) { $params['SecurityToken'] = $token; } // build string to sign $sign = $request->getMethod() . "\n" . $request->getHeaderLine('Host') . "\n" . '/' . "\n" . $this->getCanonicalizedParameterString($params); $params['Signature'] = base64_encode( hash_hmac( 'sha256', $sign, $credentials->getSecretKey(), true ) ); return $request->withBody(Psr7\Utils::streamFor(http_build_query($params))); } public function presign( RequestInterface $request, CredentialsInterface $credentials, $expires, array $options = [] ) { throw new \BadMethodCallException(__METHOD__ . ' not implemented'); } private function getCanonicalizedParameterString(array $params) { unset($params['Signature']); uksort($params, 'strcmp'); $str = ''; foreach ($params as $key => $val) { $str .= rawurlencode($key) . '=' . rawurlencode($val) . '&'; } return substr($str, 0, -1); } }