0 0

腾讯微博授权Oauth2.00

如何改成最新的腾讯微博授权Oauth2.0

回调无法获得oauth_token与oauth_verifier

@RequestMapping(value = "/tencent/login", method = RequestMethod.GET)
	public String tencentLogin(HttpServletRequest request, Model m) throws IOException {
		
		
		com.tencent.weibo.beans.OAuth oauth = new com.tencent.weibo.beans.OAuth();
		OAuthClient auth = new OAuthClient();
		try {
			oauth = auth.requestToken(oauth);
			
			
			if (oauth.getStatus() == 1) {
				return EnumErrorCode.ERROR_404.getValue();
			} else {
				String oauth_token = oauth.getOauth_token();
				if(oauth_token != null && !"".equals(oauth_token)){
					String clientIp = WingsStrUtil.getRemortIP(request);
					
					cacheService.putCache("/OAuth/" + clientIp + oauth_token, oauth, Constants.EXPIRY);
					cacheService.putCache("/OAuthClient/" + clientIp + oauth_token, auth, Constants.EXPIRY);
					
					String url = "http://open.t.qq.com/cgi-bin/authorize?oauth_token=" + oauth_token;
					return "redirect:" + url;
				}
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return "/accounts/login";

	}


/**
	 * 腾讯微博登录成功后的回调地址
	 * @param oauth_token
	 * @param oauth_verifier
	 * @param openid
	 * @return
	 */
	@RequestMapping(value = "/tencent/login/callback", method = RequestMethod.GET)
	public String tencentLoginCallback(String oauth_token, String oauth_verifier, String openid, String openkey, 
			HttpServletRequest request, HttpServletResponse response, Model model) {
		if(openid == null || "".equals(openid))
			return EnumErrorCode.ERROR_404.getValue();
		
		String clientIp = WingsStrUtil.getRemortIP(request);
		com.tencent.weibo.beans.OAuth oauth = (OAuth)cacheService.getCache("/OAuth/" + clientIp + oauth_token, Constants.EXPIRY);
		OAuthClient auth = (OAuthClient)cacheService.getCache("/OAuthClient/" + clientIp + oauth_token, Constants.EXPIRY);
		try {
			oauth.setOauth_verifier(oauth_verifier);
			oauth = auth.accessToken(oauth);
			//认证状态,0:成功,1:Request失败,2:Access失败
			if(oauth.getStatus() == 0){
				ThirdpartUser thirdpartUser = userService.getThirdpartUser(openid, EnumThirdpartType.TENCENT);
				
				
				//存在中间表
				if(thirdpartUser != null){
					thirdpartService.updateVerifier(openid, EnumThirdpartType.TENCENT, oauth_verifier);
					com.a.b.pojo.accounts.User a= userService.login(thirdpartUser.getUserId(), request, response);
					

						cacheService.putCache(ThirdPartController.class.getName() + "/OAuthClient/" + a.getId(), auth, 24 * 3600);
						CookieUtil.saveUser(request, response, a.getId(), a.getRandom(), false);
					}else{
						return EnumErrorCode.ERROR_404.getValue();
					}
				}else{//不存在中间表
					User_API us = new User_API();
					JSONObject jsonObject = new JSONObject(us.info(oauth, "json"));
					
					//没有获取到用户信息
					if(jsonObject == null)
						return EnumErrorCode.ERROR_404.getValue();
					else{
						jsonObject = jsonObject.getJSONObject("data");
						String name = jsonObject.getString("nick");
						String iconImageLarge = jsonObject.getString("head");
						iconImageLarge = imageService.getHttpImageTempFile(iconImageLarge, 180, 180, false, false);
						if(iconImageLarge != null && !"".equals(iconImageLarge))
							iconImageLarge = imageService.getTempImageUrl(iconImageLarge);
						String location = jsonObject.getString("location");
						String email = jsonObject.getString("email");
						String[] address = location.split(" ");
						String cityName = null;
						int cityId = 0;
						if(address.length > 1)
							cityName = address[1];
						if(cityName != null){
							City city = userService.getLikeCity(cityName);
							if(city == null)
								cityId = 0;
							else 
								cityId = city.getId();
						}
						
						model.addAttribute("email", email);
						model.addAttribute("cityId", cityId);
						model.addAttribute("thirdpartId", openid);
						model.addAttribute("iconImageLarge", iconImageLarge);
						model.addAttribute("name", name);
						model.addAttribute("thirdpartType", EnumThirdpartType.TENCENT.getValue());
						model.addAttribute("verifier", oauth_verifier);
						
						return "/accounts/confim";
					}
				}
			}else//验证失败
				return EnumErrorCode.ERROR_404.getValue();
			
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		
		return "redirect:/";
	}

有没有更好的方式来实现
2013年5月15日 16:33
目前还没有答案

相关推荐

    Java版腾讯微博OAuth2.0授权可发文本微博示例代码

    本示例代码关注的是如何使用Java语言结合腾讯微博的OAuth2.0授权机制来发送文本微博。OAuth2.0是一种广泛采用的开放标准,用于授权第三方应用访问用户的数据,而无需获取用户的用户名和密码。下面我们将深入探讨这个...

    新浪腾讯微博oauth2.0登录授权及转发实例

    (2) 客户端引导用户到腾讯微博授权页面。 (3) 用户同意后,腾讯会返回授权码。 (4) 通过授权码换取Access Token和过期时间。 (5) 使用Access Token进行数据交互。 4. 内容转发实现 一旦获取了用户授权,应用可以...

    android 腾讯微博Oauth2.0认证以及自定义webview认证

    在Android应用开发中,接入第三方服务,如腾讯微博,通常涉及到OAuth2.0授权机制,以便安全地获取用户的授权信息并进行数据交互。本话题主要围绕Android应用如何使用OAuth2.0与腾讯微博进行集成,并通过自定义...

    Java版|腾讯微博|OAuth2.0授权|官方方法|可发文本和图片|示例代码

    在本文中,我们将深入探讨如何使用Java实现腾讯微博的OAuth2.0授权,并结合官方方法发送文本和图片。首先,让我们了解OAuth2.0的基本概念,然后详细讲解腾讯微博的TAPI(Tencent API)以及如何整合这些知识来实现所...

    IOS sina 腾讯 微博 Oauth2.0 授权DEMO

    这说明除了Sina Weibo之外,DEMO还支持腾讯微博的OAuth2.0授权,使得用户可以使用同一套授权机制登录并分享到两个不同的社交媒体平台。在实现这个功能时,开发者需要遵循腾讯微博的API文档,处理好授权请求和响应,...

    【第三方开放平台系列】腾讯微博Oauth2.0授权认证-源码

    腾讯微博作为中国知名的社交媒体平台,也提供了类似的开放平台,允许开发者利用Oauth2.0授权协议来实现用户身份验证和数据获取。本文将深入讲解腾讯微博Oauth2.0授权认证的原理及其在易语言中的实现。 OAuth2.0是一...

    asp.net 腾讯微博OAuth2.0SDK登陆网站源码

    asp.net 腾讯微博SDK OAuth2.0API接口,示例源码,登陆腾讯微博授权成功后可获得昵称、图像、OpenId,最新微博及粉丝等。100%可用,示例应用于 http://goupiaotong.com/login.aspx

    新浪微博和腾讯微博OAuth2.0授权笔记+实例(Judas.n)

    对不起,我不得不给这个资源挂上分数,因为该死的CSDN非要折腾个这垃圾功能,我要下载别人的东西没积分没办法....这个里面包括代码,我整理的word笔记文档。 只是我觉得这远远不够,过几天我会录制一个视频,因为我...

    Oauth 2.0 新浪微博 腾讯微博

    在本文中,我们将深入探讨OAuth 2.0的工作原理以及如何将其应用于新浪微博和腾讯微博的授权与发布功能。 OAuth 2.0的核心流程包括四个主要角色:资源所有者(User)、资源服务器(Resource Server)、客户端...

    php qq oauth2.0 实例

    QQ OAuth2.0是腾讯提供的服务,允许开发者在自己的应用中集成QQ登录,提升用户体验。 首先,理解OAuth2.0的基本流程至关重要。它通常包含四个主要角色:资源所有者(用户)、客户端(你的应用)、授权服务器(QQ)...

    OAuth2.0源码(包括与新浪微波和QQ的连接)

    在本项目中,我们看到的是一个使用C#编程语言实现的OAuth2.0客户端,该客户端专门设计用于与新浪微波(可能指的是新浪微博)和QQ进行集成。 首先,OAuth2.0的核心概念包括授权服务器、资源所有者和第三方应用。授权...

    asp.net 腾讯微博新浪微博帐号登录 授权

    2. 拼接授权URL:根据腾讯微博的OAuth2.0协议,构建授权请求的URL,包含App ID、回调地址、权限范围等参数。 3. 用户授权:引导用户跳转到上述URL,用户在腾讯微博上确认授权。 4. 获取授权码:用户授权后,腾讯微博...

    腾讯微博第三方接入

    腾讯微博采用OAuth2.0协议来授权第三方应用访问用户的微博资源。这个过程通常包括四个步骤:授权请求、重定向、换取访问令牌和使用令牌。在授权请求阶段,用户会被引导到腾讯微博的授权页面,确认是否给予应用相应的...

    新浪、腾讯、网易、搜狐微博OAuth认证整合

    流程与新浪类似,用户授权后,客户端获取到的访问令牌可用于调用腾讯微博的API,实现功能如分享内容、获取用户社交数据等。 4. **网易微博OAuth**:网易微博的OAuth整合也基于OAuth 2.0标准,开发者需要在网易微米...

    新浪腾讯微博分享demo

    首先,我们来看“新浪腾讯微博分享demo”的核心——Oauth2.0授权机制。Oauth2.0是一种广泛使用的授权框架,允许第三方应用安全地访问用户的社交账户资源,如发布状态、上传图片等,而无需获取用户的登录凭证。在这个...

    mars老师腾讯微博源代码(只能发送)

    1. **OAuth2.0流程**:用户打开应用,应用引导用户跳转到腾讯微博授权页面,用户同意授权后,腾讯微博返回一个授权码给应用。应用拿着这个授权码和自己的appkey、secret向腾讯微博服务器请求访问令牌(Access Token...

    新浪、腾讯、网易、搜狐微博OAuth认证整合Android版

    认证流程与新浪类似,但需要注意腾讯微博可能需要配置回调URL,用于接收授权后的code。 3. **网易微博OAuth认证**: 网易微博的OAuth流程也基于OAuth2.0,开发者需要在网易通行证开放平台获取App Key和App Secret...

    腾讯微博 开放平台 PHP SDK2.1.2.zip

    3. **获取Access Token**:引导用户授权,通过OAuth2.0获取Access Token。 4. **调用API**:使用SDK提供的方法,如`$client->post('statuses/share', $params)`来发布微博,其中`$params`是包含微博内容的参数数组。...

    Android平台下基于OAuth2.0协议的三方认证技术研究与实现.pdf

    腾讯微博的例子中,开发者可能需要使用腾讯提供的SDK或者按照OAuth 2.0流程手动处理请求和响应。 在实际开发中,需要注意以下几点: - **安全性**:确保所有的通信都在HTTPS下进行,以保护用户的授权信息不被窃取。...

    新浪微博+腾讯微博+QQ控件的绑定、分享 实现

    总结来说,通过Oauth2.0协议,我们可以轻松地实现对新浪微博、腾讯微博和QQ空间的授权、绑定及分享。同时,QQ控件的使用进一步简化了开发过程,提高了应用的易用性。在实际项目中,开发者应根据具体需求,灵活选择...

Global site tag (gtag.js) - Google Analytics