QQ登录授权

 web开发:QQ授权登录获取用户信息功能过程中,也出现过一定的问题,比如通过腾讯客服了解到,虽然腾讯开放平台和QQ互联平台资料互通,但是开发QQ接入获取用户信息功能还是需要在QQ互联平台进行申请注册,现总结如下:

Step1:在QQ互联平台称为开发者,创建web应用,经1-2个工作日即可审核通过

 

 

 

 

 

 

 

 

 

 

Step2:查看文档

http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B

Step3:具体过程

Step4:Java代码,http请求使用了okHttp3

/**
 * @author makex
 * @note QQ 三方授权登录
 * @create 2017-04-11
 */
@Controller
@RequestMapping("/api/qq/*")
public class QQLinkController {

    @RequestMapping("auth")
    public void QQAuth(HttpServletResponse response) {
        //第一步,重定向索要code
        try {
            System.out.println("重定向索要code:" + "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + Constant.APPID + "&redirect_uri=" + Constant.REDIREC_URL + "&state=" + Constant.STATE);
            response.sendRedirect("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + Constant.APPID + "&redirect_uri=" + Constant.REDIREC_URL+ "&state=" + Constant.STATE);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @RequestMapping("token")
    public void QQToken(HttpServletRequest request, HttpServletResponse response) {
        String code = request.getParameter("code");
        String state = request.getParameter("state");

        if (Constant.STATE.equals(state)) {
            try {
                //第二步,携带code,索要token
                String result = TulingUtils.httpGetForResult("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=" + Constant.APPID + "&client_secret=" + Constant.APPSECRETE + "&redirect_uri=" + Constant.REDIREC_URL + "&code=" + code);
                System.out.println(result);
                String accessToken = result.split("&")[0].substring(13);
                System.out.println("accessToken:"+accessToken);

                //第三步,携带token,索要openId
                result = TulingUtils.httpGetForResult("https://graph.qq.com/oauth2.0/me?access_token=" + accessToken);
                System.out.println("result:"+result);
                JSONObject objCallback = JSONObject.parseObject(result.substring(result.indexOf("{"),result.indexOf("}")+1));
                String openId = objCallback.getString("openid");
                System.out.println("openid:"+openId);

                //第四步,获取用户信息
                String userInfo = TulingUtils.httpGetForResult("https://graph.qq.com/user/get_user_info?access_token=" + accessToken + "&oauth_consumer_key=" + Constant.APPID + "&openid=" + openId);
                JSONObject obj = JSONObject.parseObject(userInfo);

                System.out.println(userInfo);
                System.out.println(obj.getString("nickname"));
                System.out.println(obj.getString("figureurl"));


            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            try {
                response.sendRedirect("http://wwww.baidu.com/");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

posted @ 2017-04-13 14:53  桃源仙居  阅读(356)  评论(0)    收藏  举报