/** * 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); }
/** * Create OAuthRequest from Consumer and Token * * @param OAuthConsumer $consumer - OAuthConsumer * @param OAuthToken $token - OAuthToken * @param String $httpMethod - http method * @param String $httpURL - http URL * @param array|null $parameters - parameters * @return OAuthRequest */ public static function createFromConsumerAndToken($consumer, $token, $httpMethod, $httpURL, $parameters = null) { @$parameters or $parameters = array(); $nonce = OAuthRequest::generateNonce(); $timestamp = OAuthRequest::generateTimestamp(); $default = array('oauth_version' => OAuthRequest::VERSION, 'oauth_nonce' => $nonce, 'oauth_timestamp' => $timestamp, 'oauth_consumer_key' => $consumer->getKey()); if ($token) { $default['oauth_token'] = $token->getKey(); } $parameters = array_merge($default, $parameters); $urlParts = parse_url($httpURL); if (isset($urlParts['query']) && $urlParts['query']) { $params = OAuthUtils::parseParameterFromString($urlParts['query']); $parameters = array_merge($params, $parameters); } return new OAuthRequest($httpMethod, $httpURL, $parameters, $nonce, $timestamp); }
public static function build_http_query($params) { if (!$params) { return ''; } // Urlencode both keys and values $keys = OAuthUtils::urlencode_rfc3986(array_keys($params)); $values = OAuthUtils::urlencode_rfc3986(array_values($params)); $params = array_combine($keys, $values); $pairs = array(); foreach ($params as $parameter => $value) { if (is_array($value)) { foreach ($value as $duplicate_value) { $pairs[] = $parameter . '=' . $duplicate_value; } } else { $pairs[] = $parameter . '=' . $value; } } // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) // Each name-value pair is separated by an '&' character (ASCII code 38) return implode('&', $pairs); }