QQ授权登录成功后怎么获取用户的qq头像上传不成功和昵称

qq自定义头像怎么弄 微信公众平台开发(76) 获取用户基本信息
09:47:31来源: 网络整理
本文介绍如何获得台关注用户的基本信息,包括昵称、头像、性别、国家、省份、城市、语言。()本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录。在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token和授权Access Token。一、通过全局Access Token获取用户基本信息1. 用户关注以及回复消息的时候,均可以获得用户的OpenID&xml&
&ToUserName&&![CDATA[gh_b629c48b653e]]&&/ToUserName&
&FromUserName&&![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]&&/FromUserName&
&CreateTime&&/CreateTime&
&MsgType&&![CDATA[event]]&&/MsgType&
&Event&&![CDATA[subscribe]]&&/Event&
&EventKey&&![CDATA[]]&&/EventKey&
&/xml&其中的FromUserName就是OpenID2. 然后使用access_token接口,请求获得全局Access Tokenhttps://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET返回结果:{
"access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",
"expires_in": 7200
}3. 再使用全局ACCESS_TOKEN获取OpenID的详细信息https://api./cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID返回如下:{
"subscribe": 1,
"openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",
"nickname": "刺猬宝宝",
"language": "zh_CN",
"city": "深圳",
"province": "广东",
"country": "中国",
"headimgurl": "/mmopen/JcDicrZBlREhnNXZRudod9PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9H30krIbzGv/0",
"subscribe_time":
}至此,获得用户的基本信息。这种方式最适合用户在关注的时候,回复一条欢迎关注+用户昵称的信息,如关注下面公众账号时的回复所示。扫描二维码可体验。&二、通过OAuth2.0方式弹出授权页面获得用户基本信息1. 首先配置回调域名&2. 构造请求url如下:https://open./connect/oauth2/authorize?appid=wx8888&redirect_uri=/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect页面URL中的scope=snsapi_userinfo 表示应用授权作用域为请求用户信息★ 如果使用别人的AppID和AppSecret,那么获得的OpenID是那个有高级接口权限的服务号的,这里可以通过消息回复,获取本公众账号下的OpenID,带入回调中,与另一个OpenID进行关联也可以使用开放平台的UnionID功能来得到用户在自己账号下的OpenIDhttps://open./connect/oauth2/authorize?appid=wx8888&redirect_uri=/oauth2.php?userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect将该链接回复给关注用户,用户点击后,弹出应用授权界面3. 回调页面得到链接如下,回调url中将包含参数code/oauth2.php?code=00b788e3ba57a8d8ab5d9f&state=1或者 /oauth2.php?userid=oc7tbuPA9BgUCLADib5nB3k2KWWg&code=00b788e3ba57a8d8ab5d9f&state=14. 再使用code换取oauth2的授权access_tokenurl如下:https://api./sns/oauth2/access_token?appid=wx8888&secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=00b788e3ba57a8d8ab5d9f&grant_type=authorization_code获得授权Access Token:{
"access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",
"expires_in": 7200,
"refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",
"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
"scope": "snsapi_userinfo,"
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)新浪微博、QQ、微信
做第三方授权登录 获取到头像 昵称等信息 - 博客频道 - CSDN.NET
XIXI的专栏
下面提到的这三种 授权登录 是分别嵌入,不是 share sdk 或者友盟 其它的。
一、下载sdk 地址
1.新浪微博
二、代码编写
怎么嵌入 导入库,配置key& 那些就不说。
在Applegate 里面
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [WXApi handleOpenURL:url delegate:(id &WXApiDelegate&) self] | return [ WeiboSDK handleOpenURL:url delegate:(id &WeiboSDKDelegate&) self]|return [TencentOAuth HandleOpenURL:url];
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [ WeiboSDK handleOpenURL:url delegate:(id &WeiboSDKDelegate&) self ]|[WXApi handleOpenURL:url delegate:(id &WXApiDelegate&) self]|[TencentOAuth HandleOpenURL:url];
(1)新浪微博
首先利用 新浪微博提供的对象 调用起
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
request.redirectURI = kRedirectURI;
request.scope = @&all&;
request.userInfo = @{@&myKey&: @&myValue&};
[WeiboSDK sendRequest:request];
kRedirectURL 是你在新浪微博 申请的时候 填写的 url
当我们授权成功之后会在这个 delegate 里面返回token 和 openId 等信息
//调用起成功之后会在这个方法 能获取到 token 和 openId 等信息
-(void)didReceiveWeiboResponse:(WBBaseResponse *)response
APP_DELEGATE.loginVC =
if ([response isKindOfClass:WBAuthorizeResponse.class])
if ((int)response.statusCode == 0)
NSString *toke = [(WBAuthorizeResponse *)response userID];
NSString *openId = [(WBAuthorizeResponse *)response accessToken];
[WBHttpRequest requestWithAccessToken:toke url:@&/2/users/show.json& httpMethod:@&GET& params:[NSDictionary
dictionaryWithObject:openId forKey:@&uid&] delegate:(id)self withTag:@&hello_xixi&];
然后当我们 用token 和 openId 就可以获取到一些 基本的信息了
- (void)request:(WBHttpRequest *)request didFinishLoadingWithDataResult:(NSData *)data
NSDictionary *content = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//转换数据格式
NSLog(@&%@&,content); //这里会返回 一些Base Info
还有提供了一些其它的 delegate 方法 用于判断 基本看名字就知道什么回事了
- (void)request:(WBHttpRequest *)request didReceiveResponse:(NSURLResponse *)response
NSLog(@&%@&,response);
- (void)request:(WBHttpRequest *)request didFinishLoadingWithResult:(NSString *)result
NSLog(@&%@&,result);
- (void)request:(WBHttpRequest *)request didFailWithError:(NSError *)error
NSLog(@&%@&,error);
跟着后面就可以拿着 这些基本的信息去根据业务去做一些操作
新浪微博&& end
--------------------------------------------我是分割线--------------------------------------------
首先第一步 我们要用 QQ 提供的对象 调用&&& QQ客户端
//这个key 有很多 可以根据自己需要去 加入数组里面
NSArray* permissions = [NSArray arrayWithObjects:
kOPEN_PERMISSION_GET_USER_INFO,
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:qAppKey andDelegate:(id)self];
[_tencentOAuth authorize:permissions];
其中的qAppKey 是在申请的时候 有提供的key
跟着就会在 delegate 里面 获取到 token 和openId
- (void)tencentDidLogin
    if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length])
    {
        //成功  之后可以调用 getUserInfo
        [_tencentOAuth getUserInfo];
    }
    else
    {
      //失败
    }
成功之后 就可以 继续调用 getUserInfo 这个方法了& ,一看方法名就知道是干嘛了
那么 调用成功之后会在 下面这个 delegate 方法里面放回
-(void)getUserInfoResponse:(APIResponse *)response
NSLog(@&%@&,response);
NSLog(@&%@&,response.jsonResponse);
//这里response 有User Base Info
还有一些其它相关的方法 也列出来
- (void)tencentDidNotLogin:(BOOL)cancelled
if (cancelled)
NSLog(@&取消登录&);
NSLog(@&登录失败&);
- (void)tencentDidNotNetWork
NSLog(@&无网络连接,请设置网络&);
- (void)tencentDidLogout
NSLog(@&成功退出登陆&);
--------------------------------------------我是分割线--------------------------------------------
微信要获取token 和 openId 跟 新浪微博和QQ 有点区别,它是首先 获取一个code ,然后跟着这个coed& 才能获取到 token 和 openId
首先 调用起 微信客户端
SendAuthReq *req = [[SendAuthReq alloc] init];
req.scope = @&snsapi_userinfo,snsapi_base&; // 跟QQ 一样根据自己需要
req.state = wAppS
req.openID = wAppK
[WXApi sendReq:req];
授权回来之后会在 代理方法里面获取到code
- (void)onResp:(BaseResp *)resp
if (resp.errCode == 0)
NSLog(@&%@&,resp);
if ([resp isKindOfClass:[SendAuthResp class]])
SendAuthResp *sr = (SendAuthResp *)
NSLog(@&%@&,sr.code);
[self getAccess_token:sr.code];
要加上类型判断 因为 分享 也会回调这个方法,所以要判断对象类型
那么获取到code 之后我们可以根据 提供的url 来获取到token和openId
-(void)getAccessToken:(NSString *)code
NSString *url =[NSString stringWithFormat:@&https://api./sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code&,wAppKey,wAppSecret,code];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@&%@&,dic);
NSString *token = [dic objectForKey:@&access_token&];
NSString *openId = [dic objectForKey:@&openid&];
[self getUserInfo:token andOpenId:openId];
有了token 和 openId 那么也能够获取到 User Base Info
-(void) getUserInfo:(NSString *)tokenArg andOpenId:(NSString *)openIdArg
NSString *url =[NSString stringWithFormat:@&https://api./sns/userinfo?access_token=%@&openid=%@&,self.access_token,self.openid];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *zoneUrl = [NSURL URLWithString:url];
NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];
NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@&%@&,dic);
--------------------------------------------------------------
1.QQ 和 新浪微博的& SDK 写法 差不多,都是授权回来之后就能够获取到 token 和 openId
而 微信 得先获取到一个code 才能获取 token 和 openId.
2.QQ 和 新浪微博 有提供 代理方法和对象 做了数据封装,而微信提供一个url 让开发者自己拼接url ,自己定义方法。(个人比较喜欢 微信的做法)
liwenjie0912
排名:千里之外
(54)(5)(1)(1)(1)(1)(1)(1)获取用户信息_Android_SDK
1. Tencent类的request或requestAsync接口简介
在SDK中,有一些功能接口,如登录,分享消息到QQ等,SDK对其调用单独封装成了独立的接口;但是,SDK中的另外一些接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,则被统一封装在Tencent类的request或requestAsync方法中,通过传入不同的参数实现不同的接口调用。request和requestAsync这两个接口的功能相同
获取用户信息有两种方式:同步方式和异步方式
request(String graphPath, Bundle params, String httpMethod) 发送同步调用请求访问腾讯提供的OpenAPI。
requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state) 发送异步调用请求访问腾讯提供的OpenAPI。
先看下参数说明:
要调用的接口名称,通过SDK中的Constant类获取宏定义。
以K-V组合的字符串参数。Params是一个Bundle类型的参数,里面以键值对(Key-value)的形式存储数据,应用传入的邀请分享等参数就是通过这种方式传递给SDK,然后由SDK发送到后台。
httpMethod
使用的http方式,如Constants.HTTP_GET,Constants.HTTP_POST。
回调接口,IUiListener实例。
状态对象,将在回调时原样传回给 listener,供应用识别异步调用。SDK内部不访问该对象。
2. 获取用户信息
2.1 异步方式调用
public void getUserInfo()&&&&{&&&&&&&&mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null,&&&&&&&&&&&&&&&&Constants.HTTP_GET, new BaseApiListener("get_simple_userinfo", false), null);&&&&}
2.2. 同步方式调用
注意:由于同步调用直接访问网络,是延时性操作,需要放入线程中执行。
同步调用方式如下:
123456789101112
public void getUserInfoInThread()&&&&{&&&&&&&&new Thread(){&&&&&&&&&&&&@Override&&&&&&&&&&&&public void run() {&&&&&&&&&&&&&&&&JSONObject json = mTencent.request(Constants.GRAPH_SIMPLE_USER_INFO, null,&&&&&&&&&&&&&&&&&&&&&&&&Constants.HTTP_GET);&&&&&&&&&&&&&&&&&System.out.println(json);&&&&&&&&&&&&}&&&&&&&&}.start();&&&&}
3. 用户信息详情
12345678910111213141516
{&&&&"is_yellow_year_vip": "0",&&&&"ret": 0,&&&&"figureurl_qq_1": "/qqapp/C75BBE3DC6B0E9A64BDCB0/40",&&&&"figureurl_qq_2": "/qqapp/C75BBE3DC6B0E9A64BDCB0/100",&&&&"nickname": "小罗",&&&&"yellow_vip_level": "0",&&&&"msg": "",&&&&"figureurl_1": "/qzapp/C75BBE3DC6B0E9A64BDCB0/50",&&&&"vip": "0",&&&&"level": "0",&&&&"figureurl_2": "/qzapp/C75BBE3DC6B0E9A64BDCB0/100",&&&&"is_yellow_vip": "0",&&&&"gender": "男",&&&&"figureurl": "/qzapp/C75BBE3DC6B0E9A64BDCB0/30"}当前位置:
& Swift - QQ授权登录,并获取个人信息(用户资料)
Swift - QQ授权登录,并获取个人信息(用户资料)
发布:hangge
阅读:1618
现在很多APP或者网站都支持使用QQ帐号进行登录。本文演示如何实现QQ的第三方登录,以及登录后的获取用户的个人信息。
1,腾讯开放平台注册,以及SDK的配置
可以参考我原来写的这篇文章:
按照文章中的1,2,3步骤进行操作。
注意:如果应用未上线,这时需要在你的应用中的"应用调试者"设置调试账号才能使用,不然登录授权的时候就会报登录授权失败110406错误。
2,登录授权,并获取用户资料信息
(1)点击“登录并获取用户资料”按钮
(2)程序会自动跳转到QQ,显示登录页面(页面上会显示需要的授权)
(3)登录成功后又会自动返回原来的APP。本样例中我们在登录成功后,获取用户信息并打印出来
返回码。详见。
如果错误,返回错误信息。
判断是否有数据丢失。如果应用不使用cache,不需要关心此参数。
0或者不返回:没有数据丢失,可以缓存。
1:有部分数据丢失或错误,不要缓存。
国家(当pf=qzone、pengyou或qplus时返回)。
省(当pf=qzone、pengyou或qplus时返回)。
市(当pf=qzone、pengyou或qplus时返回)。
头像URL。详见:。
用户QQ号码转化得到的ID(当pf=qplus时返回)。
用户QQ等级(当pf=qplus时返回)。
qq_vip_level
用户QQ会员等级(当pf=qplus时返回)。
qplus_level
用户Q+等级(当pf=qplus时返回)。
is_yellow_vip
是否为黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回)
is_yellow_year_vip
是否为年费黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回)
yellow_vip_level
黄钻等级,目前最高级别为黄钻8级(如果是黄钻用户才返回此参数)。
(当pf=qzone、pengyou或qplus时返回)
is_yellow_high_vip
是否为豪华版黄钻用户(0:不是; 1:是)。
(当pf=qzone、pengyou或qplus时返回)
is_blue_vip
是否为蓝钻用户(0:不是; 1:是)。
(当pf=qqgame或3366时返回)
is_blue_year_vip
是否为年费蓝钻用户(0:不是; 1:是)。
(当pf=qqgame或3366时返回)
blue_vip_level
蓝钻等级(如果是蓝钻用户才返回此参数)。
(当pf=qqgame或3366时返回)
3366_level
3366用户的大等级。
(当pf=3366时返回)
3366_level_name
3366用户的等级名,如小游游、小游仙。
(当pf=3366时返回)
3366_grow_level
3366用户的成长等级。
(当pf=3366时返回)
3366_grow_value
3366用户的成长值。
(当pf=3366时返回)
is_super_blue_vip
是否是豪华蓝钻。
(当pf=qqgame或3366时返回)
(4)样例代码:
import UIKit
class ViewController: UIViewController, TencentSessionDelegate{
var _tencentOAuth:TencentOAuth!
override func viewDidLoad() {
super.viewDidLoad()
_tencentOAuth = TencentOAuth.init(appId: "", andDelegate: self)
//登录按钮点击
@IBAction func login(sender: AnyObject) {
//设置权限列表
let permissions = ["get_user_info","get_simple_userinfo"];
_tencentOAuth.authorize(permissions)
//登陆完成调用
func tencentDidLogin() {
if !_tencentOAuth.accessToken.isEmpty {
print("----------------------------------------")
print("登录成功!")
print("openId:\(_tencentOAuth.openId)",
"accessToken:\(_tencentOAuth.accessToken)",
"expirationDate:\(_tencentOAuth.expirationDate)")
print("开始获取用户资料")
_tencentOAuth.getUserInfo()
print("登录失败!没有获取到accessToken")
* 登录失败后的回调
func tencentDidNotLogin(cancelled:Bool) {
if cancelled {
print("用户取消登录!")
print("登录失败!")
* 登录时网络有问题的回调
func tencentDidNotNetWork() {
print("没有网络,无法登录!")
* 取得用户信息的回调
func getUserInfoResponse(response:APIResponse) {
print("----------------------------------------")
print("用户资料获取成功:")
print(response.jsonResponse)
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
3,退出登录
要退出登录、取消授权。只需要调用 TencentOAuth 对象的 logout() 方法即可。
_tencentOAuth.logout(self)
源码下载:
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作。

我要回帖

更多关于 环信设置昵称和头像 的文章

 

随机推荐