概念和术语
一、应用基本信息相关
1.AppID
字段类型:整型。
功能说明:申请QQ登录成功后,分配给应用的appid,用来标识唯一应用,不同应用的appid不可混用。
2.AppKey
字段类型:字符型。
功能说明:申请QQ登录成功后,分配给网站的appkey。appkey将在QQ登录过程中以及网站通过OpenAPI访问/修改空间受保护的资源时,用来计算签名值,以提高传输过程参数的防篡改性。
二、OAuth2.0协议相关
1.OAuth2.0协议
详见 :OAuth2.0简介。
2.access_token
访问OpenAPI时所必须的token。获取方式详见:获取access_token。
三、UnionID相关
1.接口说明:
此接口用于获取个人信息。开发者可通过openID来获取用户的基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用,可通过获取用户的unionID来区分用户的唯一性,因为只要是同一QQ互联平台下的不同应用,unionID是相同的。换句话说,同一用户,对同一个QQ互联平台下的不同应用,unionID是相同的。(已支持官网自助获取:点此查看操作指引)
2.请求方式:
(一)https请求方式:GET
https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
参数 | 是否必需 | 说明 |
---|---|---|
access_token | 是 | 用户凭证 |
unionid | 否 | 是否申请unionID |
fmt | 否 | 因历史原因,默认是jsonpb格式,如果填写json,则返回json格式 |
返回说明:
正确的返回结果(如果fmt参数未指定json)
callback( { "client_id":"YOUR_APPID", "openid":"YOUR_OPENID", "unionid":"YOUR_UNIONID" } );
错误的(如果fmt参数未指定json)返回示例
callback( { "error":100016, "error_description":"access token check failed", } );
错误码 | 描述 | 说明 |
---|---|---|
100016 | access token check failed | 用户凭据过期(60天)或者不正确 |
100048 | companyid not set | 未申请unionID接口调用权限,请邮件申请 |
(二)Android_SDK 请求方式:
调用获取unionID信息接口的示例代码如下
private void getUnionId() { if (mTencent != null && mTencent.isSessionValid()) { IUiListener listener = new IUiListener() { @Override public void onError(UiError e) { Toast.makeText(MainActivity.this,"onError",Toast.LENGTH_LONG).show(); } @Override public void onComplete(final Object response) { if(response != null){ JSONObject jsonObject = (JSONObject)response; try { String unionid = jsonObject.getString("unionid"); Util.showResultDialog(MainActivity.this, "unionid:\n"+unionid, "onComplete"); Util.dismissDialog(); }catch (Exception e){ Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show(); } }else { Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show(); } } @Override public void onCancel() { Toast.makeText(MainActivity.this,"onCancel",Toast.LENGTH_LONG).show(); } }; UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken()); unionInfo.getUnionId(listener); } else { Toast.makeText(this,"please login frist!",Toast.LENGTH_LONG).show(); } }
返回说明:
正确的返回结果
{ "client_id":"YOUR_APPID", "openid":"YOUR_OPENID", "unionid":"YOUR_UNIONID" }
(三)IOS_SDK 请求方式:
调用获取unionID信息接口的示例代码如下
BOOL bRet = [[[sdkCall getinstance] oauth] RequestUnionId]; if (!bRet) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"信息不足,请先登录。" delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil]; [alertView show]; __RELEASE(alertView); }
返回说明:
如果获取成功会在TencentLoginDelegate的didGetUnionID回调中回调,最后在oauth实例中获取,正确的返回结果
NSString *result = [NSString stringWithFormat:@"获取成功 appid = %@,\n openid = %@,\n unionid = %@", [[sdkCall getinstance].oauth.appId], [sdkCall getinstance].oauth.openId, [sdkCall getinstance].oauth.unionId];
3.参数说明:
说明 | |
---|---|
client_id | 应用唯一标识 |
openid | QQ用户在应用的唯一账号标识,同一个用户在不同应用的openid不一样。 |
unionid | QQ用户在开发者在多个应用间(打通后)的标识,打通后,不同应用的unionid一样 |
4.注意:
(1)开发者应该注意保存openID、unionID信息,以便以后在不同应用之间进行用户信息互通;
(2)同一开发者名下最多支持60个应用进行UnionID打通,请开发者申请时注意;
(3) unionID至少是36个字节长度,建议开发者预留64字节存储空间。