登录鉴权方式介绍V2(推荐)
一、鉴权方式介绍
K歌的鉴权方式分为了两种:
应用级access_token不能请求用户类的接口和播放的接口。
适用场景:游客态请求一些歌单类接口。
用户级鉴权:校验的是用户级access_token+openid。用户级access_token和openid可以下发到客户端,由客户端直接调用K歌业务接口,但用户的refresh_token建议存放在服务端,并有服务端来维护。用户级access_token是针对一个用户而言,同一个appid同一时间同一用户只能有一个合法的用户级access_token,所以即使token被泄漏,影响也有限。
用户级token需要扫码登录后才能获取。
适用场景:客户端使用,只有用户级token可请求播放的接口,用于K歌播放。
注意⚠️:
1、使用【应用级token】,请求头X-Open-Id 不能传值。否则会认为票据无效。
2、如果客户端有未登录的使用场景,请通过业务后台进行转发。
二、授权api相关接口介绍
1、获取应用级token(getToken)
注意: refresh_token的有效期不返回,一般为30天。
请求URL
体验环境:https://api.kg.qq.com/test/api/v2/getToken
请求参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 业务透传过来,应用appid |
secret | 是 | string | 应用秘钥 |
grant_type | 是 | string | 获权类型, 固定填 client_credential |
返回参数
参数名 | 类型 | 说明 |
---|---|---|
access_token | string | access_token |
expires_in | int | access_token有效期 |
refresh_token | string | refresh_token 刷新access_token时使用 |
error_code | int | 错误码 |
error_msg | string | error_code非0时的错误消息 |
2、获取用户级token(access_token)
注意: refresh_token的有效期不返回,一般为30天(最长可延长至180天)。
请求URL
体验环境:https://api.kg.qq.com/test/oauth/v2/access_token
请求参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 业务透传过来,应用appid |
secret | 是 | string | 应用秘钥 |
code | 是 | string | 授权码,authcode |
grant_type | 是 | string | 获权类型, 固定填 authorization_code |
返回参数
参数名 | 类型 | 说明 |
---|---|---|
access_token | string | access token |
expires_in | int | access token有效期 |
refresh_token | string | refresh token 刷新access token时使用 |
openid | string | openid |
unionid | string | unionid |
scope | string | 本次授权范围 |
orig_acnt_type | int | (需要应用具备该权限才会返回)账号原始类型(1 QQ; 2 微信;) |
error_code | int | 错误码 |
error_msg | string | error_code非0时的错误消息 |
3、刷新access_token(refresh_token)
请求URL
体验环境:https://api.kg.qq.com/test/oauth/v2/refresh_token
请求参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 业务透传过来,应用appid |
openid | 否 | string | 用户openid。仅刷新用户级token需要 |
refresh_token | 是 | string | 用户的refresh_token |
sign | 是 | string | 应用接口请求签名,计算规则如下 |
ts | 是 | int | 时间戳(单位s) |
接口签名(sign)的计算规则
sign = md5(KG_APPID_TS_SECRET)
比如, appID为10001, 时间戳为1675748252,secret为xxxabc
那么要加密的字符串为 KG_10001_1675748252_xxxabc
再对字符串进行md5计算得到签名(32位小写)
示例代码如下:
fun sign(ts: Long): String {
val str = "KG_" + TmeRuntime.get().appId + "_" + ts + "_" + TmeRuntime.get().appKey
return MD5Util.md5(str)
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
access_token | string | 刷新获得的AccessToken |
expires_in | int | AccessToken有效期 |
error_code | int | 错误码 |
error_msg | string | error_code非0时的错误消息 |
1.
2.
4、获取授权码(light_qr_code)
请求url
正式环境:https://api.kg.qq.com/oauth/v2/light_qr_code
测试环境:https://api.kg.qq.com/test/oauth/v2/light_qr_code
请求参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 业务透传过来,应用appid |
response_type | 是 | string | 固定填 code |
scope | 是 | string | 固定填snsapi_login |
sign | 是 | string | 应用接口请求签名,参考refresh_token生成方式 |
ts | 是 | int | 当前时间戳(单位s) |
business_data | 否 | string | 二码合一支付透传数据 |
scan_side_redirect_uri | 否 | string | 扫码端登录成功后跳转地址 |
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
qr_code | string | 二维码 |
expires_in | int | 二维码有效期 |
qr_sig | string | 二维码签名 |
error_code | int | 错误码 |
error_msg | string | error_code非0时的错误消息 |