/** * Signs the Request so it can be dispatched. * * @param Request $request The Request to Sign * @return $this */ public function signRequest(Request $request) { if ($request->isSigned()) { return $this; } $query = $request->getQuery(); $query['auth_key'] = $this->credentials->getAuthKey(); $query['auth_timestamp'] = time(); $query['auth_version'] = '1.0'; if (!is_null($request->getBody())) { $query['body_md5'] = md5($request->getBody()); } ksort($query); $queryString = urldecode(http_build_query(array_change_key_case($query, CASE_LOWER))); $stringToSign = $request->getMethod() . "\n" . $request->getUri() . "\n" . $queryString; $query['auth_signature'] = hash_hmac('sha256', $stringToSign, $this->credentials->getAuthSecret()); $request->setQuery($query); $request->setSigned(true); return $this; }
/** * Setup the Curl Options. * * @param Request $request The Request */ protected function setupCurl(Request $request) { curl_setopt_array($this->handle, [CURLOPT_URL => $this->fullUrl($request->getUri() . '?' . $request->getQuery(true)), CURLOPT_TIMEOUT => $this->options['timeout'], CURLOPT_CONNECTTIMEOUT => $this->options['connect_timeout'], CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Content-Type: application/json']]); switch ($request->getMethod()) { case 'GET': curl_setopt($this->handle, CURLOPT_HTTPGET, true); curl_setopt($this->handle, CURLOPT_POST, false); break; case 'POST': curl_setopt($this->handle, CURLOPT_HTTPGET, false); curl_setopt($this->handle, CURLOPT_POST, true); curl_setopt($this->handle, CURLOPT_POSTFIELDS, $request->getBody()); break; } }