# 授权登录第三方应用
使用知音楼授权登录功能并确认登录您的系统,在您的系统内获得正在访问用户的知音楼身份,而用户无需输入账户密码。
注意:此功能与企业自建应用/第三方企业应用无关,只能用于授权登录打开第三方应用,并且不是知音楼内的应用免登,此流程只能获取到用户身份(无手机号和企业相关信息)。
# 获取 AppID 及 AppSecret
通过知音楼联系李世东老师(lishidong2@tal.com;工号:352989),申请创建应用,应用创建完成后,您将获得您 APP 对应的 AppID 和 AppSecret。
如果您需要使用开发环境或测试环境,需要创建对应环境的应用,正式环境、开发环境、测试环境的 AppId 和 AppSecret 不通用。
# 获取用户的access_token
# host: https://yach-oapi.zhiyinlou.com 正式环境
# host: https://yach-oapi-test.zhiyinlou.com 测试环境
# 概述
名称 | 值 |
---|---|
地址 | /oauth2/get/access/token |
请求方式 | POST |
参数 | 见【参数】 |
返回值 | 见【返回值】 |
# 参数
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
grant_type | String | 是 | 授权类型,此处的值固定为"authorization_code",必填 |
code | String | 是 | 授权码(移动端授权登录成功后获取到的 Code),必填 |
redirect_uri | String | 是 | 您申请应用时配置的 Scheme,必填 |
app_id | String | 是 | 应用id,必填 |
signature | String | 是 | 签名,必填 |
# Signature 参数
签名算法为HmacSHA256,签名数据是除signature参数以外的所有参数,通过&符号连接起来,密钥是appId对应的appSecret计算出来的签名值。
发送HTTP请求时需要把signature进行urlEncode,如果您使用的是HTTP封装方法,请确保不要重复urlEncode。
注意:
1、参数的顺序请按照:code={code值}&grant_type={grant_type值}&redirect_uri={redirect_uri值}&app_id={app_id值}计算
2、code只能使用一次,有效期5分钟,access_token有效时间为2小时,快失效时请使用refresh_token刷新,refresh_token有效时间为180天,失效后请重新授权
签名计算代码示例(PHP)
$data = [
'code' => $params['code'],
'grant_type' => $params['grant_type'],
'redirect_uri' => $params['redirect_uri'],
'app_id' => $params['app_id'],
];
$str = http_build_query($data); // 注意:参数的顺序请按照:code={code值}&grant_type={grant_type值}&redirect_uri={redirect_uri值}&app_id={app_id值}计算
$signature = base64_encode(hash_hmac('sha256', $str, '第三方应用的密钥', true));
var_dump($signature);
# 返回值
{
"code": 200,
"msg": "",
"obj": {
"access_token": "******",
"expires_in": 7200,
"refresh_token": "******",
"scope": "******",
"unionid": "用户yachid",
"openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
}
}
# 刷新用户的refresh_token
# host: https://yach-oapi.zhiyinlou.com 正式环境
# host: https://yach-oapi-test.zhiyinlou.com 测试环境
# 概述
名称 | 值 |
---|---|
地址 | /oauth2/refresh/token |
请求方式 | POST |
参数 | 见【参数】 |
返回值 | 见【返回值】 |
# 参数
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
grant_type | String | 是 | 授权类型,此处的值固定为"refresh_token",必填 |
app_id | String | 是 | 应用id,必填 |
refresh_token | String | 是 | 填写通过获取用户的access_token接口获取到的 refresh_token 参数,必填 |
# 返回值
{
"code": 200,
"msg": "",
"obj": {
"access_token": "用户的access_token",
"expires_in": 7200,
"refresh_token": "刷新access_token时使用的token",
"scope": "权限范围",
"openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
}
}
# 获取授权用户的个人信息
# host: https://yach-oapi.zhiyinlou.com 正式环境
# host: https://yach-oapi-test.zhiyinlou.com 测试环境
# 概述
名称 | 值 |
---|---|
地址 | /oauth2/get/userinfo |
请求方式 | POST |
参数 | 见【参数】 |
返回值 | 见【返回值】 |
# 参数
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
access_token | String | 是 | 用户的access_token,必填 |
openid | String | 是 | 授权用户唯一标识,填写通过获取用户的access_token接口获取到的 openid 参数,必填 |
# 返回值
{
"code": 200,
"msg": "",
"obj": {
"openid": "授权用户唯一标识(普通用户标识,对该应用帐号唯一)",
"nickname": "用户昵称",
"head_img_url": "用户头像",
"unionid": "用户统一标识。针对一个开放平台帐号下的应用,同一用户的 unionid 是唯一的"
}
}