新浪微博的authorize接口怎么获取返回的code值?

示例
//请求
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code

//同意授权后会重定向
http://www.example.com/response&code=CODE

上段是新浪微博给的示例,浏览器打开示例中请求那样的地址,会打开输入新浪微博帐号密码的网页,输入帐号密码之后,网页就会跳转到示例中同意授权后会重定向那样的网址,网址中code=后边的值就是需要获取的

我尝试用okhttp来发送这个请求,但是返回的结果是授权页面,用浏览器打开,不知道怎么才能用JAVA获取到重定向的地址

阅读 5k
1 个回答
  • 第一个地址中的小写 code 就是 字符串 'code'

  • 第二个地址中的大写 CODE 代指 一长串随机code值

 //微博登陆按钮
$(document).on('click','._weiboLogin',function(){
    return window.open('{{ weiboCallBack }}', 'oauth2Login_weibo' ,'height=525,width=585, toolbar=no, menubar=no, scrollbars=no, status=no, location=yes, resizable=yes');
});

其中 {{weiboCallBack}} 就是第一个地址,然后这个授权成功后,会自动跳转到第二个地址

第二个地址是你自己当前网站的地址,需要自己开发写代码,如下:[注意看注释]

/**
     * 微博登陆
     */
    public function weibologincallbackAction()
    {
        $o = $this->weiboOauth;

        if (isset($_REQUEST['code'])) {
            $keys = array();
            //注意这里获取请求中的code
            $keys['code'] = $_REQUEST['code'];
            $keys['redirect_uri'] = $this->config->thirdpart['weibo']['WB_CALLBACK_URL'];
            try {
                $token = $o->getAccessToken('code', $keys);
            } catch (OAuthException $e) {
            }
        }

        if ($token) {
            //登陆
            $user = SessionController::registerUser($token['uid'],Users::USER_SOURCE_WEIBO);
            $this->_registerSession($user);
            $this->setSession('token',$token);
            $this->setSession('tokentype',Users::USER_SOURCE_WEIBO);
            setcookie('weibojs_' . $o->client_id, http_build_query($token));
        } else {
            //授权失败。
        }

    }

最好下载一个相应语言的SDK,链接:

http://open.weibo.com/wiki/SDK

其它相关阅读:
阮一峰 理解OAuth 2.0
OAuth 2.0官网

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题