Example #1
0
 /**
  * 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;
 }