/** * OAuth 协议的签名 * * @param string $url * @param string $method * @param array $params * @return string */ private function sign($url, $method, $params) { uksort($params, 'strcmp'); $pairs = array(); foreach ($params as $key => $value) { $key = OpenSDK_Util::urlencode_rfc3986($key); 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[] = $key . '=' . OpenSDK_Util::urlencode_rfc3986($duplicate_value); } } else { $pairs[] = $key . '=' . OpenSDK_Util::urlencode_rfc3986($value); } } $sign_parts = OpenSDK_Util::urlencode_rfc3986(implode('&', $pairs)); $base_string = implode('&', array(strtoupper($method), OpenSDK_Util::urlencode_rfc3986($url), $sign_parts)); $key_parts = array(OpenSDK_Util::urlencode_rfc3986($this->_app_secret), OpenSDK_Util::urlencode_rfc3986($this->_token_secret)); $key = implode('&', $key_parts); $sign = base64_encode(OpenSDK_Util::hash_hmac('sha1', $base_string, $key, true)); if ($this->_debug) { echo 'base_string: ', $base_string, "\n"; echo 'sign key: ', $key, "\n"; echo 'sign: ', $sign, "\n"; } return $sign; }