j2ee中实现QQ第三方登陆

原创 2014年02月10日 22:28:37

最近接触了一些第三方登陆的东西,弄的真是一个头,两个大>.<

今天,终于把腾讯第三方登陆调试通了,做一个记录,顺便发发牢骚。

QQ互联官网:http://connect.qq.com/

申请之类的就不多说了,没什么难点,主要记录一下代码方面的东西。

看官方文档的时候写的太详细,太复杂了。看了一堆没用的,和误导的。

由于项目中用的是自定义的图标,所以没有用Js SDK(后来才知道好像官方的js SDK也可以自定义图标)

之前看的是

OAuth2.0开发指引

中的“开发攻略_Server-side”

光获取access_token就非了九牛二虎之力。

后来发现“开发攻略_Client-side”中的方法要简单的多。现在也没弄清楚为什么要分两个。

废话不多说,进入主题:

1. 打开浏览器,访问如下地址(请将client_id,redirect_uri,scope等参数值替换为你自己的):

https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]


QQ登陆示例代码:

<a href="https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=101009536&redirect_uri=jishanjia.lanbaoo.com/login/bind&scope=get_user_info">腾讯QQ登录</a>

特别提示
1. 请求时传入的recirect_uri必须与注册时填写的回调地址一致,用来进行第三方应用的身份验证。

2. 可通过js方法:window.location.hash来获取URL中#后的参数值,

授权成功后就跳转到recirect_uri这时就可以将?之前的路径换成本地环境,进行本地调试,

http://jishanjia.lanbaoo.com/login/bind?#access_token=F2B24AABBF5D69995C52D9007D1DBCE6&expires_in=7776000
换成

http://localhost:8088/mercy/login/bind?#access_token=F2B24AABBF5D69995C52D9007D1DBCE6&expires_in=7776000

expires_in=7776000应该是access_token的有效时间

然后用获取到的access_token获取OpenID

发送请求到如下地址(请将access_token等参数值替换为你自己的):

https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN

2. 获取到用户OpenID,返回包如下:

示例代码:

var accessToken = window.location.hash.substring(1);//获取路径中的access_token
	$.ajax({
		  type: 'GET',
		  url: 'https://graph.qq.com/oauth2.0/me?'+accessToken,
		  async: false,
		  dataType: "jsonp",
		  jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
		  jsonpCallback:"callback",
		  success: function(o){
			  console.log(o);//o就是上面提到的返回包
			  $.ajax({
				  type: 'POST',
				  url:$CONFIG.base_url+"/third/qq/get_user_info",
				  data:{url: 'https://graph.qq.com/user/get_user_info?'+accessToken+'&oauth_consumer_key=101009536&openid='+o.openid},
				  async: false,
				  dataType: "json",
				  success: function(e){
					  alert(e.nickname);
					  console.log(e);
					  $("#userImg").attr("src",e.figureurl_qq_2);
				  }
			});
		  }
	});

获取到OpenID后就可以获取用户信息了(get_user_info)详情参照api文档

获取user_info的时候jsonp就有点不对头了,虽然可以获取到,但是要报错,可能时jsonp用的不够熟练吧。然后我有采用后台获取用户信息的方式进行了一次中转。

代码如下:

@RequestMapping(value = "/qq/get_user_info", method = RequestMethod.POST)
	public ResponseEntity<HttpEntity> qqGetUserInfo(HttpServletRequest request) {

		String url = request.getParameter("url");
		System.out.println(url);
		HttpClient httpClient = new HttpClient();
		// 创建GET方法的实例
		GetMethod getMethod = new GetMethod(url);
		// 使用系统提供的默认的恢复策略
		getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler());
		try {
			// 执行getMethod
			int statusCode = httpClient.executeMethod(getMethod);
			if (statusCode != 200) {
				System.err.println("Method failed: "
						+ getMethod.getStatusLine());
			}
			// 读取内容
			byte[] responseBody = getMethod.getResponseBody();
			// 处理内容
			return new ResponseEntity(responseBody,HttpStatus.OK);
		} catch (HttpException e) {
			// 发生致命的异常,可能是协议不对或者返回的内容有问题
			System.out.println();
			e.printStackTrace();
			return new ResponseEntity("Please check your provided http address!",HttpStatus.BAD_REQUEST);
		} catch (IOException e) {
			// 发生网络异常
			e.printStackTrace();
			return new ResponseEntity("Time out!",HttpStatus.BAD_GATEWAY);
		} finally {
			// 释放连接
			getMethod.releaseConnection();
		}
		
	}

这样一次QQ登陆然后获取用户信息就完成了。


Zemo手打,转载标明出处:http://blog.csdn.net/zemochen/article/details/19049357

参考文档:QQ互联文档资料

                jsonp跨域访问

                http://www.ibm.com/developerworks/cn/opensource/os-httpclient/





版权声明:本文为博主原创文章,未经博主允许不得转载。

QQ授权第三方登录等API接口

  • 2015年07月23日 09:50
  • 32KB
  • 下载

springmvc web网站QQ第三方登录实现

首先   申请需要用到的 app_ID 和 app_KEY             具体步骤看这个 https://connect.qq.com/index.html  再申请的时候会有一个框让你输...
  • lg12lp12
  • lg12lp12
  • 2017年05月15日 15:15
  • 1284

第三方登录之QQ登录(二)——OAuth2.0处理流程介绍(以QQ登录为例)

为了让网站更快接入,腾讯提供了JS SDK的接入方案,具体点击这里或者点击这里进行查看。     不过也可以自己写代码,当然你需要了解QQ的OAuth2.0的处理流程(Web Server Flow)...
  • xiaoxian8023
  • xiaoxian8023
  • 2014年07月25日 13:30
  • 71998

第三方QQ授权登录

  • 2016年07月14日 23:19
  • 4.22MB
  • 下载

java web 实现QQ第三方登录Demo

  • 2016年09月06日 00:07
  • 1.77MB
  • 下载

第三方登录--java qq

  • 2015年10月27日 16:13
  • 3.9MB
  • 下载

JAVA项目实现QQ互联第三方登录

  • 2017年08月16日 14:26
  • 1.79MB
  • 下载

Spring框架开发QQ登录教程

Spring框架开发QQ登录教程
  • u011976127
  • u011976127
  • 2015年04月01日 22:03
  • 1083

web接入QQ第三方登录

这是第三方登录的第二篇,关于web接入微博第三方登录可以参考我之前的博文,之前的博文比较详细的讲解了该如何进行第三方登录的申请和准备工作。 http://blog.csdn.net/cwfjimog...
  • cwfjimogudan
  • cwfjimogudan
  • 2017年01月06日 11:21
  • 3073

springmvc项目里第三方登录(百度,QQ,微信,人人,新浪微博等)

前段时间刚好做第三方登录这一块业务,查了好多开放平台,大家可以结合自己项目使用的框架,大概流程就是那样操作,希望能帮到大家,有问题可以沟通...
  • pangliang_csdn
  • pangliang_csdn
  • 2016年03月29日 13:57
  • 3923
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:j2ee中实现QQ第三方登陆
举报原因:
原因补充:

(最多只允许输入30个字)