100apps / openshare

不用官方SDK,利用社交软件移动客户端(微信/QQ/微博/人人/支付宝)分享/登录/支付。
http://www.gfzj.us/series/openshare/
GNU General Public License v3.0
3.64k stars 661 forks source link

怎么获取QQ用户信息 #12

Closed nicknull closed 9 years ago

nicknull commented 9 years ago

[OpenShare QQAuth:@"get_user_info" Success:^( 貌似目前只能获取用户的openid 至于用户的 昵称头像获取不到啊

“get_user_info”也获取不到

100apps commented 9 years ago

我们用OpenShare登录以后,获得的信息:

{
    "access_token" = 427934383126190ABBE2CE79BAE07559;
    encrytoken = 1c0b6ec57669ea566664f949d44f85e9;
    "expires_in" = 7776000;
    msg = "";
    openid = 04566F19F51F1CD76169EDBC5351BA04;
    "pay_token" = E5C937B566AD2CE33189EABFEF1E427E;
    pf = "openmobile_ios";
    pfkey = 947ff5a77691503846a81d24220c3a86;
    ret = 0;
    "user_cancelled" = NO;
}

比如获取用户信息的API:http://wiki.connect.qq.com/get_user_info 根据官方文档,我们需要请求:

//oauth_consumer_key是`[OpenShare connectQQWithAppId:@"1103194207"];`中的appid。
https://graph.qq.com/user/get_user_info?oauth_consumer_key=1103194207&access_token=427934383126190ABBE2CE79BAE07559&openid=04566F19F51F1CD76169EDBC5351BA04&format=json

这是一个GET请求,你可以用你熟悉的网络库来请求,服务器返回:

{
    "ret": 0,
    "msg": "",
    "is_lost":0,
    "nickname": "qzuser",
    "gender": "男",
    "province": "广东",
    "city": "深圳",
    "year": "1990",
    "figureurl": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/30",
    "figureurl_1": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/50",
    "figureurl_2": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100",
    "figureurl_qq_1": "http://q.qlogo.cn/qqapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/40",
    "figureurl_qq_2": "http://q.qlogo.cn/qqapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100",
    "is_yellow_vip": "0",
    "vip": "0",
    "yellow_vip_level": "0",
    "level": "0",
    "is_yellow_year_vip": "0"
}

正如上面的例子,OpenShare只获得了最基本的信息,具体你想做哪些操作,还是要看官方文档的API。对于需要secret验证的API(比如修改头像),签名和验证强烈推荐放在服务器端,因为把secret放在客户端,几乎没有任何方法保证不泄漏。

nicknull commented 9 years ago

返回结果正如你给出的结果 无论怎么请求都不能正常获取 昵称和头像的

100apps commented 9 years ago

这个是由于你的appid的问题。如果没有上线,可以把测试QQ添加到应用调试者里面。或者,你可以用「唱吧」的appid(100261904)测试: 返回:

{
    "ret": 0,
    "msg": "",
    "is_lost":0,
    "nickname": "文库专家",
    "gender": "男",
    "province": "上海",
    "city": "黄浦",
    "year": "1993",
    "figureurl": "http:\/\/qzapp.qlogo.cn\/qzapp\/100261904\/9BEA07AD04306CFE1489904D55A09B49\/30",
    "figureurl_1": "http:\/\/qzapp.qlogo.cn\/qzapp\/100261904\/9BEA07AD04306CFE1489904D55A09B49\/50",
    "figureurl_2": "http:\/\/qzapp.qlogo.cn\/qzapp\/100261904\/9BEA07AD04306CFE1489904D55A09B49\/100",
    "figureurl_qq_1": "http:\/\/q.qlogo.cn\/qqapp\/100261904\/9BEA07AD04306CFE1489904D55A09B49\/40",
    "figureurl_qq_2": "http:\/\/q.qlogo.cn\/qqapp\/100261904\/9BEA07AD04306CFE1489904D55A09B49\/100",
    "is_yellow_vip": "0",
    "vip": "0",
    "yellow_vip_level": "0",
    "level": "0",
    "is_yellow_year_vip": "0"
}

为了调试方便,你可以用:

 [auth addEventHandler:^(id sender) {
        [OpenShare QQAuth:@"get_user_info" Success:^(NSDictionary *message) {
            ULog(@"QQ登录成功\n%@",message);
            NSLog(@"%@",message);

            NSString *url=[NSString stringWithFormat: @"https://graph.qq.com/user/get_user_info?oauth_consumer_key=100261904&access_token=%@&openid=%@&format=json",message[@"access_token"],message[@"openid"]];
            NSLog(@"url: %@\n%@",url,[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]] options:NSJSONReadingAllowFragments error:nil]);

        } Fail:^(NSDictionary *message, NSError *error) {
            ULog(@"QQ登录失败\n%@\n%@",error,message);
        }];
    } forControlEvents:UIControlEventTouchUpInside];
nicknull commented 9 years ago

明白了 这个要求必须同时是网页应用 并且审核通过才能获取 已经在审核了 希望能通过
谢谢回复

100apps commented 9 years ago

腾讯的这个开放平台,坑真不少。@nicknull 可以记录一下,等都弄好了,来跟我们分享一下。

nicknull commented 9 years ago

腾讯确实坑 等弄好了 把 微信 微博 qq的登录大坑总结下 再分享吧 哈哈

iStig commented 7 years ago

根据以下方法 我用在这个项目中 [auth addEventHandler:^(id sender) { [OpenShare QQAuth:@"get_user_info" Success:^(NSDictionary *message) { ULog(@"QQ登录成功\n%@",message); NSLog(@"%@",message);

        NSString *url=[NSString stringWithFormat: @"https://graph.qq.com/user/get_user_info?oauth_consumer_key=1103194207&access_token=%@&openid=%@&format=json",message[@"access_token"],message[@"openid"]];
        NSLog(@"url: %@\n%@",url,[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]] options:NSJSONReadingAllowFragments error:nil]);

    } Fail:^(NSDictionary *message, NSError *error) {
        ULog(@"QQ登录失败\n%@\n%@",error,message);
    }];
} forControlEvents:UIControlEventTouchUpInside];

获取的数据是 { "ret": 0, "msg": "", "is_lost":0, "nickname": "qzuser", "gender": "男", "province": "广东", "city": "深圳", "year": "1990", "figureurl": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/30", "figureurl_1": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/50", "figureurl_2": "http://qzapp.qlogo.cn/qzapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100", "figureurl_qq_1": "http://q.qlogo.cn/qqapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/40", "figureurl_qq_2": "http://q.qlogo.cn/qqapp/111111/942FEA70050EEAFBD4DCE2C1FC775E56/100", "is_yellow_vip": "0", "vip": "0", "yellow_vip_level": "0", "level": "0", "is_yellow_year_vip": "0" }

这里有个疑问 我在自己的项目中也是 "nickname": "qzuser" 貌似这个接口返回给我的数据都是模拟数据一样 并不是我真实用户的信息 这是什么情况 有谁知道吗

iStig commented 7 years ago

对于我那个问题我发现一个很有意思的东西 以下是腾讯开放平台问答地址http://wiki.open.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91FAQ#20._.E4.BD.BF.E7.94.A8API.E8.8E.B7.E5.8F.96.E7.94.A8.E6.88.B7.E6.98.B5.E7.A7.B0.E6.97.B6.E8.BF.94.E5.9B.9E.E2.80.9Cqzuser.E2.80.9D.E6.98.AF.E6.80.8E.E4.B9.88.E5.9B.9E.E4.BA.8B.EF.BC.9F

在腾讯开发平台中有这么一段问答

  1. 使用API获取用户昵称时返回“qzuser”是怎么回事? 可能是所使用的API没有激活,可以到管理中心的控制台查看已激活API列表中是否有该API。 也可能是用户使用qq登录时跳过了授权步骤。

然后我跳转到了qq互联竟然发现这里也需要申请app qq互联申请app 我以在腾讯开放平台申请了app

难道竟然要在两个平台上都要申请app才能获取有效的用户信息吗?待我验证

domingoxx commented 7 years ago

大兄弟,验证完了吗, 我也遇到相同的问题, 找客户直接把我挂断了。。。 @iStig

iStig commented 7 years ago

@domingoxx 我验证过qq互联 和 腾讯开放平台都申请app 但仍旧不行 。还需要在另一个平台也注册

domingoxx commented 7 years ago

唉,大兄弟加油, 我按照上面那个兄弟说的, 在去申请一个网页版的应用试试 @iStig

taooba commented 6 years ago

@iStig @domingoxx 我也和两位碰到了同样的问题,请问最后是怎么解决的呢?