TapTap OAuth 接口
概述
TapTap OpenAPI 采用 MAC Token 签名来验证 API 请求的身份。
基本概念
- Access Token:用户通过 SDK 完成 TapTap 登录授权后,SDK 返回的凭证对象,包含
kid、mac_key等字段。 - MAC Token:使用 Access Token 中的字段,按照 HMAC-SHA1 算法签算生成的 Authorization 请求头,用于调用 TapTap OpenAPI 时的身份验证。
- openid:TapTap 用户 + Client ID =
openid(同一用户在不同游戏中 openid 不同) - unionid:TapTap 用户 + 开发者账号 =
unionid(同一用户在同一开发者的所有游戏中 unionid 相同)
字段命名对照
SDK 与 Authorization 头中对同一字段使用了不同的命名,下面给出对应关 系:
| SDK Access Token 字段 | Authorization 头中的名称 | 说明 |
|---|---|---|
kid | MAC id="..." 中的 id | 用于标识本次授权的 Access Token,每次登录授权后由 SDK 返回 |
mac_key | (不出现在请求头中) | 用于 HMAC-SHA1 签算的密钥,每次登录授权后由 SDK 返回。注意与开发者控制台中的 Server Secret 是不同的值 |
Access Token
开发者接入 SDK 登录模块,用户授权应用后即可获取 Access Token。游戏移动端可通过 GetCurrentTapAccount 方法获取当前有效的 Access Token。
Access Token 包含以下字段:
public String kid; // Access Token 标识符,用于 Authorization 头中的 MAC id 字段
public String token_type; // Token 类型,如 "mac"
public String mac_key; // 用于 HMAC-SHA1 签算的密钥
public String mac_algorithm; // 签算算法,如 "hmac-sha-1"
public Set<String> scopes; // 授权范围,如 "basic_info" 或 "public_profile"
- 单个 Access Token 的最长有效期为 30 天。但在某些情况下,Access Token 可能会提前失效,例如用户注销账号、用户在 TapTap 客户端解除授权等。接入方需处理 Token 失效的相关场景,避免使用已吊销的 Token 发起请求。
- SDK 在每次应用启动时会自动刷新 Access Token,确保用户会话的持续有效性。
- 注意:不建议在服务端或游戏客户端缓存 Access Token。需要使用时,应通过 SDK 获取最新的 Access Token。
MAC Token 签算方法见 MAC Token 签算 部分。
API
当 SDK 只请求 basic_info 的权限时,请使用基础信息接口,请求 public_profile 时,请使用详细信息接口。
获取当前账户基础信息
GET https://open.tapapis.com/account/basic-info/v1?client_id=xxx
Authorization mac token
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| client_id | string | 该应用的 Client ID,应与约定相同 |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
| openid | string | 授权用户唯一标识,每个玩家在每个游戏中的 openid 都是不一样的,同一游戏获取同一玩家的 openid 总是相同 |
| unionid | string | 授权用户唯一标识,一个玩家在一个厂商的所有游戏中 unionid 都是一样的,不同厂商 unionid 不同 |
请求示例
替换其中的 kid(即 Authorization 头中 MAC id="..." 的值)、mac_key(用于签算)和 Client ID 为实际值。
curl -s -H 'Authorization:MAC id="1/hC0vtMo7ke0Hkd-iI8-zcAwy7vKds9si93l7qBmNFxJkylWEOYEzGqa7k_9iw_bb3vizf-3CHc6U8hs-5a74bMFzkkz7qC2HdifBEHsW9wxOBn4OsF9vz4Cc6CWijkomnOHdwt8Km6TywOX5cxyQv0fnQQ9fEHbptkIJa
gCd33eBXg76grKmKsIR-YUZd1oVHu0aZ6BR7tpYYsCLl-LM6ilf8LZpahxQ28n2c-y33d-20YRY5NW1SnR7BorFbd00ZP97N9kwDncoM1GvSZ7n90_0ZWj4a12x1rfAWLuKEimw1oMGl574L0wE5mGoshPa-CYASaQmBDo3Q69XbjTs
KQ",ts="1618221750",nonce="adssd",mac="XWTPmq6A6LzgK8BbNDwj+kE4gzs="' "https://open.tapapis.com/account/basic-info/v1?client_id=<Client ID>"
获取当前账户详细信息
GET https://open.tapapis.com/account/profile/v1?client_id=xxx
Authorization mac token
请求参数
| 字段 | 类型 | 说明 |
|---|---|---|
| client_id | string | 该应用的 Client ID,应与约定相同 |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 用户名 |
| avatar | string | 用户头像图片地址 |
| openid | string | 授权用户唯一标识,每个玩家在每个游戏中的 openid 都是不一样的,同一游 戏获取同一玩家的 openid 总是相同 |
| unionid | string | 授权用户唯一标识,一个玩家在一个厂商的所有游戏中 unionid 都是一样的,不同厂商 unionid 不同 |
请求示例
替换其中的 kid(即 Authorization 头中 MAC id="..." 的值)、mac_key(用于签算)和 Client ID 为实际值。
curl -s -H 'Authorization:MAC id="1/hC0vtMo7ke0Hkd-iI8-zcAwy7vKds9si93l7qBmNFxJkylWEOYEzGqa7k_9iw_bb3vizf-3CHc6U8hs-5a74bMFzkkz7qC2HdifBEHsW9wxOBn4OsF9vz4Cc6CWijkomnOHdwt8Km6TywOX5cxyQv0fnQQ9fEHbptkIJa
gCd33eBXg76grKmKsIR-YUZd1oVHu0aZ6BR7tpYYsCLl-LM6ilf8LZpahxQ28n2c-y33d-20YRY5NW1SnR7BorFbd00ZP97N9kwDncoM1GvSZ7n90_0ZWj4a12x1rfAWLuKEimw1oMGl574L0wE5mGoshPa-CYASaQmBDo3Q69XbjTs
KQ",ts="1618221750",nonce="adssd",mac="XWTPmq6A6LzgK8BbNDwj+kE4gzs="' "https://open.tapapis.com/account/profile/v1?client_id=<Client ID>"