首先声明下,看了很多WEB都有QQ快捷登录这个功能,心里痒痒的,也想尝试下,由于小弟才学习JAVA不久,官方的SDK看的不是很明了,所以用原生态协议一步一步调用腾讯的接口来实现qq互联登录,功能是实现了,但在过程中有不足之处,想要完善的同学自己拿去修改.
->使用到的jar包我给大家贴出来
1.commons-beanutils-1.7.0.jar
2.commons-collections-3.1.jar
3.commons-lang-2.5.jar
4.commons-logging-api-1.1.jar
5.commons-logging.jar
6.ezmorph-1.0.3.jar
7.httpclient-4.1.3.jar
8.httpcore-4.4.jar
9.json-lib-2.1-jdk15.jar
-> 环境那些就不再啰嗦了,直接上菜
--> servlet代码(开发中应该把token存入数据库)
//开发者key
String key="xxxxxxxxxxx";
//开发者密码
String pw = "xxxxxxxxxxxxxx";
String code = "";
String token = "";
String openid = "";
String userInfo = "";
code = req.getParameter("code");
//获取用户token
String tokenUrl = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id="+key+"&client_secret="+pw+"&code="+code+"&redirect_uri=http%3a%2f%2fqiannew.nat123.net%2fthirdLogin";
token = HttpUtils.instance.getHttpResponse(tokenUrl).split("&")[0].split("=")[1];
//获取用户openid
String openidUrl = "https://graph.qq.com/oauth2.0/me?access_token="+token+"";
openid = HttpUtils.instance.getHttpResponse(openidUrl).substring(45, 77);
//获取用户信息
String userInfoUrl = "https://graph.qq.com/user/get_user_info?access_token="+token+"&oauth_consumer_key=101180012&openid="+openid+"";
userInfo = HttpUtils.instance.getHttpResponse(userInfoUrl);
JSONObject o = JSONObject.fromObject(userInfo);
Map<String,Object> map = (Map)o;
req.setAttribute("userinfo", map);
req.getRequestDispatcher("/index.jsp").forward(req, resp);</span>
--->工具类代码
<span style="font-size:14px;">public enum HttpUtils {
instance;
public String getHttpResponse(String url) {
String res = "";
try {
HttpGet tokenRequest = new HttpGet(url);
HttpResponse tokenHttpResponse = new DefaultHttpClient().execute(tokenRequest);
if(tokenHttpResponse.getStatusLine().getStatusCode() == 200){
res = EntityUtils.toString(tokenHttpResponse.getEntity());
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
}</span>
-->登录界面代码
<span style="font-size:14px;"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<meta property="qc:admins" content="1466422611665766141236654" />
</head>
<body>
<a href="http://openapi.qzone.qq.com/oauth/show?which=ConfirmPage&display=pc&response_type=code&client_id=xxxxxx&redirect_uri=(格式化过后的回调地址)&state=test">QQ登录</a>
<br/>
<br/>
<br/>
${userinfo}
</body>
</html>
最后返回结果如图