key = $config['key']; $this->secret = $config['secret']; $this->site = $config['site']; $this->oauth = $config['oauth']; $this->__config = $config; } public function get_token($code) { $url = "{$this->oauth}/token"; $data = array( 'grant_type' => 'authorization_code', 'code' => $code, 'redirect_uri' => "", 'client_id'=>$this->key, 'client_secret'=>$this->secret, ); $this->request()->get_info($url, $data); $params = $this->request()->parsed(); $token = $params['access_token']; unset($params['expires_in'], $params['token_type'], $params['access_token']); $this->token = $token; return array('token'=>$token, 'params'=>$params); } public function authorize_url($callback){ $data = array( 'response_type' => 'code', 'client_id' => $this->key, 'redirect_uri'=>$callback, ); $query = http_build_query($data); $url = "{$this->oauth}/authorize?{$query}"; return $url; } public function logout_url($callback) { $data = array( 'redirect_uri'=>$callback, ); $query = http_build_query($data); $url = "{$this->oauth}/logout?{$query}"; return $url; } public function request($token=null) { if (!$this->__request) $this->__request = new oauth2_request($this->__config, $token); return $this->__request; } public function response() { if (!$this->__response) $this->__response = new oauth2_response($this->__config); return $this->__response; } public function verify_api_params() { $arr_get = $_GET; $arr_post = $_POST; $sign = $arr_get['sign']; $arr_get = $arr_get['sign']; echo "
";
        print_r($_GET);
        print_r($_POST);
        return true;
    }

    public function sign($action, $url, $data=array(), $signtime=null)
    {
        $parse_url = parse_url($url);
        $path = $parse_url['path'];
        $get_data['sign_method'] = 'md5';
        $get_data['sign_time'] = $signtime ? $signtime : time();
        $get_data['client_id'] = $this->key;
        $post_data = array();
        if(strtolower($action)=='get') {
            $get_data = array_merge($data, $get_data);
        } else {
            $post_data = $data;
        }
        $get_data = $this->ksort($get_data);
        $post_data = $this->ksort($post_data);

        $get_params = rawurlencode(urldecode(http_build_query($get_data)));
        $post_params = rawurlencode(urldecode(http_build_query($post_data)));
        $header_params = rawurlencode(urldecode(http_build_query($header_data)));

        #$get_params = $post_params = $header_params = null;
        #foreach(array('get_params' =>$get_data, 'post_params'=>$post_data) as $key => $val){
        #    $$key = $this->build_query($val);
        #}
        #$get_params = rawurlencode(ltrim($get_params, '&'));
        #$post_params = rawurlencode(ltrim($post_params, '&'));
        #$header_params = rawurlencode(ltrim($header_params, '&'));


        $path = rawurlencode('/'.ltrim($path, '/'));

        #$orgsign = "{$this->secret}&".strtoupper($action)."&{$path}&{$get_params}&{$this->secret}";
        $orgsign = "{$this->secret}&".strtoupper($action)."&{$path}&{$header_params}&{$get_params}&{$post_params}&{$this->secret}";
        
        $sign = strtoupper(md5($orgsign));

        #echo "\r\n", $orgsign, "\r\n", $sign, "\r\n";

        $get_data['sign'] = $sign;
        return $get_data;
    }

    
    private function build_query($row, $pre=null)
    {
        $r = null;
        foreach($row as $k => $v) {
            if(is_array($v)){
                $r .= '&'. $this->build_query($v, ($pre ? "{$pre}[$k]" : $k));
            } else {
                $r .= '&'. ($pre ? "{$pre}[{$k}]" : $k) . "=" .$v;
            }
        }
        return $r;
    }

    private function ksort($data)
    {
        ksort($data);
        foreach($data as $key => &$val){
            if (is_array($val)) {
                $val = $this->ksort($val);
            }
        }
        return $data;
    }




}