腾讯微博登录
last modified:2013-10-11 14:24:11
*********************************************
之前已经介绍过一篇新浪微博登录的文章,这里再介绍一下腾讯微博登录,其实两者的流程都是一样的,但有一些细微的差别。具体流程和新浪微博一样,首先需要在腾讯微博开放平台(http://dev.t.qq.com/)申请的App Key和App secret。
我使用的是腾讯提供的javaSDK进行开发,更多语言的SDK可以到这里下载。
/**
* 腾讯微博登录初始化.
*
* @param OAuth
* version 2 认证参数实体类
* */
private void init(OAuthV2 oAuth) {
//你申请到的app key
oAuth.setClientId(client_ID_TENCENT);
//你申请到的 app secret
oAuth.setClientSecret(client_SERCRET_TENCENT);
//授权成功后的回调URL,以上根据你的实际情况填写,建议使用配置文件的方式在类初始化的时候读取。
oAuth.setRedirectUri(redirect_URI_TENCENT);
}
/*
获得授权URL,当然你也可以自己拼接字符串,格式为:
https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=client_ID_TENCENT&response_type=code&redirect_uri=redirect_URI_TENCENT
*/
@RequestMapping(value = "/tencentWeibo")
@ResponseBody
public String tencentWeibo() {
OAuthV2 oAuth = new OAuthV2();
init(oAuth);
QHttpClient qHttpClient = null;
String authorizationUrl = null;
try {
qHttpClient = new QHttpClient(2, 2, 5000, 5000, null, null);
OAuthV2Client.setQHttpClient(qHttpClient);
authorizationUrl = OAuthV2Client.generateAuthorizationURL(oAuth);
} finally {
if (qHttpClient != null)
qHttpClient.shutdownConnection();
}
return authorizationUrl;
}
/**
* 腾讯微博登录回调uri.
* @param request
* @param code
* @param openid
* @param openkey
* @param state
* @param response
* @return view url
*/
@RequestMapping(value = "/loginByTencentWeibo")
public void loginByTencentWeibo(
@RequestParam(value = "code") String code,
@RequestParam(value = "openid") String openid,
@RequestParam(value = "openkey") String openkey,
@RequestParam(value = "state") String state) {
OAuthV2 oAuth = new OAuthV2();
init(oAuth);
oAuth.setOpenid(openid);
oAuth.setOpenkey(openkey);
oAuth.setAuthorizeCode(code);
// 换取access token
oAuth.setGrantType("authorization_code");
QHttpClient qHttpClient = null;
try {
qHttpClient = new QHttpClient(2, 2, 5000, 5000, null, null);
OAuthV2Client.setQHttpClient(qHttpClient);
// 使用Authorization code方式鉴权时,用授权码换取Access Token
OAuthV2Client.accessToken(oAuth);
} catch (Exception e1) {
e1.printStackTrace();
} finally {
//记住关掉连接
if (qHttpClient != null)
qHttpClient.shutdownConnection();
}
UserAPI userAPI = new UserAPI(oAuth.getOauthVersion());
String format = "json";
String infoByJson = "";
try {
infoByJson = userAPI.info(oAuth, format);
} catch (Exception e) {
log.debug("腾讯微博返回的用户数据解析出错,json: {}", "".equals(infoByJson) ? "为空" : infoByJson);
e.printStackTrace();
} finally {
//记住关掉连接
if (userAPI!= null)
userAPI.shutdownConnection();
}
log.debug("infoByJson: {}", infoByJson);
net.sf.json.JSONObject tempJson = (net.sf.json.JSONObject) net.sf.json.JSONObject.fromObject(infoByJson);
net.sf.json.JSONObject weiboUser = tempJson.getJSONObject("data");
/*
好了,这样我们就获取到了登录用户在腾讯微博的相关信息weiboUser
下面我们来获取一些信息:
*/
String avatarLarge = weiboUser.getString("head") + "/120";//获得最大头像
String screenName = weiboUser.getString("nick");//获取昵称
String uid = weiboUser.getString("name");//获取微博id
// do any more… …
// … …
}
下面是从腾讯获取到的json字段说明:
{
errcode : 返回错误码,
msg : 错误信息,
ret : 返回值,0-成功,非0-失败,
data :
{
birth_day : 出生天,
birth_month : 出生月,
birth_year : 出生年,
city_code : 城市id,
comp :
{
begin_year : 开始年,
company_name : 公司名称,
department_name : 部门名称,
end_year : 结束年,
id : 公司id
},
country_code : 国家id,
edu : 教育信息
{
departmentid : 院系id,
id : 教育信息记录id,
level : 学历级别,
schoolid : 学校id,
year : 入学年
},
fansnum : 听众数,
favnum : 收藏数,
head : 头像url,
homecity_code : 家乡所在城市id,
homecountry_code : 家乡所在国家id,
homepage : 个人主页,
homeprovince_code : 家乡所在省id,
hometown_code : 家乡所在城镇id,
idolnum : 收听的人数,
industry_code : 行业id,
introduction : 个人介绍,
isent : 是否企业机构,
ismyblack : 是否在当前用户的黑名单中,0-不是,1-是,
ismyfans : 是否是当前用户的听众,0-不是,1-是,
ismyidol : 是否是当前用户的偶像,0-不是,1-是,
isrealname : 是否实名认证,1-已实名认证,2-未实名认证,
isvip : 是否认证用户,0-不是,1-是,
location : 所在地,
mutual_fans_num : 互听好友数,
name : 用户帐户名,
nick : 用户昵称,
openid : 用户唯一id,与name相对应,
province_code : 地区id,
regtime : 注册时间,
send_private_flag : 是否允许所有人给当前用户发私信,0-仅有偶像,1-名人+听众,2-所有人,
sex : 用户性别,1-男,2-女,0-未填写,
tag : 标签
{
id : 个人标签id,
name : 标签名
},
tweetinfo : 最近的一条原创微博信息
{
city_code : 城市码,
country_code : 国家码,
emotiontype : 心情类型,
emotionurl : 心情图片url,
from : 来源,
fromurl : 来源url,
geo : 地理位置信息,
id : 微博唯一id,
image : 图片url列表,
latitude : 纬度,
location : 发表者所在地,
longitude : 经度,
music : 音频信息
{
author : 演唱者,
url : 音频地址,
title : 音频名字,歌名
},
origtext : 原始内容,
province_code : 省份码,
self : 是否自已发的的微博,0-不是,1-是,
status : 微博状态,0-正常,1-系统删除,2-审核中,3-用户删除,4-根删除,
text : 微博内容,
timestamp : 服务器时间戳,不能用于翻页,
type : 微博类型,1-原创发表,2-转载,3-私信,4-回复,5-空回,6-提及,7-评论,
video : 视频信息
{
picurl : 缩略图,
player : 播放器地址,
realurl : 视频原地址,
shorturl : 视频的短url,
title : 视频标题
}
},
tweetnum : 发表的微博数,
verifyinfo : 认证信息,
exp : 经验值,
level : 微博等级
},
seqid : 序列号
}
注意:在进行腾讯微博开发时,获取到的json数据可能会有乱码,导致解析json数据时出错,虽然腾讯表示使用的是UTF8,但是改为UTF8编码后出现的情况是大部分json数据中的中文数据都是正确的,但还是是有几个字符是乱码。
如果你也遇到这样的乱码问题你可以下载我打包的jar,里面包括了腾讯微博开发用到的必须类和一些乱码优化。
相关推荐
腾讯业务组 2020-11-13
umengren 2020-11-11
郑贺腾讯社交广告 2020-11-06
腾讯soso团队 2020-11-06
arcsinz 2020-11-05
sasac 2020-09-25
虫虫 2020-09-11
cloudking000 2020-09-11
fylong 2020-09-11
gxq 2020-09-10
zandy0 2020-09-10
卫士通安全手机 2020-09-10
贵州腾讯社交广告 2020-09-10
DMKJYXGS 2020-08-04
tengxycloud 2020-07-31
fylong 2020-06-28
mingyan 2020-05-26
dynalidan 2020-05-22
ruanjiankaifa00 2020-05-05