QQ登陆第三方Demo(QQ互联)

   项目需要做QQ、微博等登陆第三方的功能,第一次接触,虽然官网上有sdk,接口写的很好,调用即可,但是没有文档,看着头疼就自己写了

  步骤不多说:

  一、申请AppID和AppKey,申请地址:点击打开链接,说明 里面需要域名公安备案号,如果只是自己练手就随便写,审核虽然不通过但是也会给你AppId和AppKey,可以用自己的QQ进行登陆操作。


二、在登陆界面引入QQ登陆图标,按钮链接里面就是请求地址,填上自己的appId和回调地址即可



三、点击登陆链接后会跳转到QQ授权登陆界面,如果用户确认登陆,就会跳转到回调地址,并且返回一个code值;


四、接下来就是oAuth2协议里面写的了,通过这个code值去获取QQ用户的access_token,通过access_token再置换用户的Open_Id,通过Open_Id再去获取用户信息。把里面自己的appid和Appkey填上就行了,我里面封装了一个通过url去请求数据的方法httpRequest();

    

public String QQLogin( String code ,HttpServletRequest request, HttpServletResponse response) throws BizException {
       //填写Appid,appkey和回调地址
        String url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&
         client_id=???&client_secret=???&redirect_uri=???&code=" + code;
        String responseStr = httpRequest(url);

       //获取access_Token
        String tokens[] = responseStr.split("&");
        String token = tokens[0];
        String userUrl = "https://graph.qq.com/oauth2.0/me?" + token;
        String sr = httpRequest(userUrl);
        JSONObject result = JSON.parseObject(sr.substring(10, sr.length() - 3));

        //获取Open_ID
        String openId = (String) result.get("openid");
      //根据OpenId去获取用户信息
        String userinfoUrl = "https://graph.qq.com/user/get_user_info?" + token +
                    "&oauth_consumer_key=appId&openid=" + openId;
            String userInfoText = httpRequest(userinfoUrl);
            JSONObject userInfoResult = JSON.parseObject(userInfoText);
            String nickName = (String) userInfoResult.get("nickname");
            String userIconUrl = (String) userInfoResult.get("figureurl");
           
        }
    return null;
}

    //http请求,链接url
    public static String httpRequest(String url) {
        HttpURLConnection urlConnection = null;
        String responseStr = "";
        try {
            urlConnection = (HttpURLConnection) new URL(url).openConnection();
            urlConnection.setRequestProperty("Accept-Charset", "utf-8");
            urlConnection.setRequestProperty("contentType", "utf-8");
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            responseStr = StreamToString.ConvertToString(inputStream);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return responseStr;
    }

五、到这里基本上就已经能够看到自己的QQ用户信息了,你可以把信息打印出来。

不过这种方法适合练手,大致了解QQ登陆第三方的过程,毕竟QQ已经有了很好的sdk,里面都做了很好的接口设计,不过我这边按照QQ对Java sdk的简介做了后总是报100020的错误,就是code被重复使用。不知道哪里错了,希望有大神指导。

你可能感兴趣的:(功能模块相关)