/** * Build signature * * @param String $baseString - base string * @param OAuthConsumer $consumer - consumer * @param OAuthToken $token - token * @return String */ public function build($baseString, $consumer, $token) { $keyParts = array($consumer->getSecret(), $token ? $token->getSecret() : ''); $keyParts = OAuthUtils::urlEncodeRfc3986($keyParts); $key = implode('&', $keyParts); return base64_encode(hash_hmac('sha1', $baseString, $key, true)); }
/** * Build normalized HTTP query * * @param array $input - HTTP query parameters * @return String - normalized query string */ public static function buildHTTPQuery($input) { if (!$input) { return ''; } $keys = OAuthUtils::urlEncodeRfc3986(array_keys($input)); $values = OAuthUtils::urlEncodeRfc3986(array_values($input)); $params = array_combine($keys, $values); // Parameters are sorted by name, using lexicographical byte value ordering. // Ref: Spec: 9.1.1 (1) uksort($params, 'strcmp'); $pairs = array(); foreach ($params as $parameter => $value) { if (is_array($value)) { // If two or more parameters share the same name, they are sorted by their value // Ref: Spec: 9.1.1 (1) natsort($value); foreach ($value as $duplicateValue) { $pairs[] = $parameter . '=' . $duplicateValue; } } else { $pairs[] = $parameter . '=' . $value; } } return implode('&', $pairs); }
/** * Convert token to string * * @return string - string equivalent of OAuthToken */ public function toString() { return 'oauth_token=' . OAuthUtils::urlEncodeRfc3986($this->key) . '&oauth_token_secret=' . OAuthUtils::urlEncodeRfc3986($this->secret); }
/** * Return signature base string * * @return String - signature base string */ public function getSignatureBaseString() { $parts = array($this->getNormalizedHTTPMethod(), $this->getNormalizedURL(), $this->getNormalizedParameters()); $parts = OAuthUtils::urlEncodeRfc3986($parts); return implode('&', $parts); }