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/





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

相关文章推荐

J2EE中JSP页面引用外部资源时的路径问题

最近想自己写一个cms系统,在前台View层展示上,初始版本用jsp,以后用Freemarker优化,包括生成静态页面等。在设计JSP页面时,遇到了最头疼的问题。路径问题。    J2EE学习道路上...
  • yeahwell
  • yeahwell
  • 2013年01月27日 23:18
  • 23887

J2EE实现自动登录功能(阅读后感觉很好,所以果断转载!)

一、什么是用户自动登录? 对于我们的网站向已注册用户提供某些专门的服务,比如网上购物、在线下载、收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证。 如果用户经...

实现第三方登录,并获取头像信息

libs里面的jar文件 在主activity里面 public class MainActivity extends AppCompatActivity implements View....

学习心得之JAVA下的MVC架构模式

一.何为MVC MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controlle...

跨平台框架Cordova概述

跨平台开发利器Cordova(或Phonegap)简要介绍。
  • zythy
  • zythy
  • 2014年03月22日 09:55
  • 9507

j2ee使用struts实现用户的登陆及注册

j2ee中使用struts实现用户的登陆及注册,要清楚Eclipse是如何连接MySQL数据库;对一个form提交的多个submit按钮分配不同的action或method,这里主要介绍到两种实现方法...

j2ee 实现判断登陆查询

  • 2010年01月06日 21:35
  • 189KB
  • 下载

J2EE项目系列(三)--Spring Data JPA+Spring+SpringMVC+Maven快速开发(2)多个第三方服务端接入之云旺IM

我们来继续这个系列,今天给大家讲下IM的云旺IM快速接入,当然也顺便推荐讲下其他的IM。 文章结构:(1)IM的介绍、第三方IM的推荐以及服务端接入配合App的大概流程;(2)云旺IM快速接入。...

J2EE页面登陆

  • 2015年06月25日 17:26
  • 1.29MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:j2ee中实现QQ第三方登陆
举报原因:
原因补充:

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