JavaWeb项目调用QQ登录----QQ互联

首先要做的在QQ互联申请项目QQ互联官网首页 ,申请通过会得到APPID , APPKey 


 一 : 在HTML/JSP页面放置符合QQ互联标准的QQ登录图标

 附代码:

 <a href="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id= 
 "+ 此处填APPID +"  &redirect_uri= " + 此处填回调地址 + " &state=fefwerwf" class="icon connect-qq" ><span icon-bg2="icon_qq_n"></span><img alt="" src=  "+ 此处填QQ图标的路径 +" style="width:120px;height:24px"></a>

 测试可以正常跳转:此刻Authorization_Code包含在URL地址栏

 二 :获取Access_Token

 Authorization_Code从哪里来?QQ互联我设置的回调地址指到了Servlet , Servlet可以通过

request.getParameter("code")  抓到code值。

然后通过调用 QQ_LoginUtil.getAccess_token() 得到Access_Token ,该方法我已封装,附最后

String Access_Token =  QQ_LoginUtil.getAccess_token(code, "填APPID", "填APPKey", "填回调地址");

 三 : 获取用户OpenID

通过第二步得到的Access_Token,调用QQ_LoginUtil.getOpen_ID() 得到OpenID

String openid =  QQ_LoginUtil.getOpen_ID(Access_Token);

四 : 大结局、获取用户个人信息

通过得到的Access_TokenOpenID,便可以拿到用户个人信息,返回值为JSON类型

JSONObject info =  QQ_LoginUtil.getUserInfo("填APPID", Access_Token  , OpenID);

返回值(昵称,年龄,头像……)

{
   "ret":0,
   "msg":"",
   "nickname":"你的昵称",
  ...
}

附:文中使用的封装代码,get方法使用的jar包为 commons-io-2.11.0.jar


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import com.alibaba.fastjson.JSONObject;
/**
 * 首先要在HTML页面放置QQ登录标准登录按钮(参考QQ互联)
 * @author 时光
 *
 */
public class QQ_LoginUtil {


	/**
	 * 第一步:得到token
	 * @param code 网页授权得到的code
	 * @param APPID QQ后台QQAppID
	 * @param APPKey QQ后台QQAppKey
	 * @param redirect_uri QQ后台设置的回调地址
	 * @return Access_token
	 */
	
	public static String getAccess_token(String code,String APPID,String APPKey,String redirect_uri) {
		String getAccess_token = get(
				"https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id="+APPID+"&client_secret="+APPKey+"&code="
						+ code + "&redirect_uri="+redirect_uri+"&fmt=json");
		JSONObject json = JSONObject.parseObject(getAccess_token);
		String res = json.getString("access_token");
		System.out.println(res);
		return res;
	}
	
	/**
	 * 第二步:通过第一步拿到的Access_token 得到用户的Open_ID
	 * @param Access_token 第一步拿到的Access_token
	 * @return Open_ID
	 */
	public static String getOpen_ID(String Access_token ) {
		String getOpenID = get("https://graph.qq.com/oauth2.0/me?access_token=" + Access_token + "&fmt=json");
		JSONObject jsons = JSONObject.parseObject(getOpenID);
		System.out.println(jsons + "这是获取到getOpenID");
		String OpenID = jsons.getString("openid");
		System.out.println(OpenID);
		return OpenID;
	}
	/**
	 * 第三步:通过Access_token和OpenID获得用户的所有信息,返回JSONobject类型
	 * @param APPID QQ后台QQAppID
	 * @param Access_token 第一步拿到的Access_token
	 * @param OpenID 第二步拿到的OpenID
	 * @return UserInfo
	 */
	public static JSONObject getUserInfo(String APPID,String Access_token,String OpenID ) {
		String getOpenAPI = get("https://graph.qq.com/user/get_user_info?access_token=" + Access_token
				+ "&oauth_consumer_key="+APPID+"&openid=" + OpenID);
		JSONObject jsonss = JSONObject.parseObject(getOpenAPI);
		System.out.println(jsonss);
		return jsonss;
	}
	
	
	
	/**
	 * GET方法
	 * @param url
	 * @return
	 * get方法
	 */
	public static String get(String url) {
		BufferedReader in = null;
		try {
			URL realUrl = new URL(url);
			// 打开和URL之间的连接
			URLConnection connection = realUrl.openConnection();
			// 设置通用的请求属性
			connection.setRequestProperty("accept", "*/*");
			connection.setRequestProperty("connection", "Keep-Alive");

			connection.setConnectTimeout(5000);
			connection.setReadTimeout(5000);
			// 建立实际的连接
			connection.connect();
			// 定义 BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			StringBuffer sb = new StringBuffer();
			String line;
			while ((line = in.readLine()) != null) {
				sb.append(line);
			}
			return sb.toString();
		} catch (Exception e) {
			System.out.println("错误报告," + e);
		} finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return null;
	}
	
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值