public function build_signature($parameters, $request_url, $method = 'GET') { $parts = array($method, $this->get_normalized_http_url($request_url), $this->get_signable_parameters($parameters)); $parts = twpOAuthUtil::urlencode_rfc3986($parts); $base_string = implode('&', $parts); $token_secret = ''; if (!empty($this->_token['oauth_token_secret'])) { $token_secret = $this->_token['oauth_token_secret']; } $key_parts = array($this->_consumer_secret, $token_secret); $key_parts = twpOAuthUtil::urlencode_rfc3986($key_parts); $key = implode('&', $key_parts); return base64_encode(hash_hmac('sha1', $base_string, $key, true)); }
public static function build_http_query($params) { if (!$params) { return ''; } // Urlencode both keys and values $keys = twpOAuthUtil::urlencode_rfc3986(array_keys($params)); $values = twpOAuthUtil::urlencode_rfc3986(array_values($params)); $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 $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); }