# 抖音 Access Token

> 来源：https://help.gravity-engine.com/docs/server-integration/mini-game-tokens/douyin-access-token
> 说明抖音小游戏 Access Token 在广告变现数据拉取中的用途，以及密钥刷新、接口刷新和透传模式的配置。



## 1. Token 使用 [#1-token-使用]

`access_token` 是抖音小游戏的**全局唯一**接口调用凭据，小游戏调用各接口时都需使用，引力引擎主要在拉取抖音小游戏广告变现相关数据时使用。

> **如您的游戏是 iap 类型，不需要做广告变现收入的统计，则您不需要接入！**

## 2. 问题与解决方案 [#2-问题与解决方案]

由于抖音的限制，如果有多方业务同时调用[抖音接口](https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/rd-to-SCgame/server/interface-request-credential/get-access-token/)刷新 `access_token`，则会导致 Token 冲突进而影响整体业务，&#x2A;*可能产生数据异常，造成无可挽回的损失！**

针对此种情况，引力引擎提供了两种方案解决，请您根据具体业务情况来选择任意一种方案：

### 2.1 密钥刷新 [#21-密钥刷新]

在**引力后台-设置-应用管理-配置-抖音开发者**页面，token 接入模式选择：**密钥刷新**，此时需要您填写小游戏 `AppSecret`，引力引擎服务器会自动定时刷新以获取最新的 token。

> 此种方式需广告主保证：当前“开发者 ID”、“开发者密码”下，只有引力引擎可直接向抖小平台请求获取 `access_token`，&#x2A;*若多方服务器同时请求获取，则会导致 `access_token` 冲突与失效，进而可能产生数据异常，造成无可挽回的损失！**

### 2.2 接口刷新 [#22-接口刷新]

在**引力后台-设置-应用管理-配置-抖音开发者**页面，刷新模式选择：**接口刷新**，此时需要您填写由您的后端团队提供的客户刷新接口地址，引力引擎后续会定时发起 **GET** 请求此接口以获取最新的 token。

引力会在您提供的 URL 后面自动拼接两个参数：

* `gravity_timestamp`：为秒级时间戳
* `gravity_sign`：为签名（您可以考虑校验该值来避免接口被滥用）

#### 2.2.1 计算 `gravity_sign` 签名步骤 [#221-计算-gravity_sign-签名步骤]

1. 将引力 App 的 access\_token（该参数在 [应用管理](https://web.gravity-engine.com/#/manage/appmanage) 界面可以获取）、gravity\_timestamp 和小游戏 appid 三个 string 进行拼接。
2. 对拼接成的 string 进行 md5 哈希加密，转成 string。

**Java 代码示例**

```java
String str = GRAVITY_APP_ACCESS_TOKEN + GRAVITY_TIMESTAMP + MINI_GAME_APP_ID;
String sign = DigestUtils.md5DigestAsHex((str).getBytes()).toLowerCase();
```

例如：

```
GRAVITY_APP_ACCESS_TOKEN:b69faba2154c79d6c1cmfa879d6c1ca8
GRAVITY_TIMESTAMP:1688627637
MINI_GAME_APP_ID:wxia29f6ajdn987fj4

拼接后
b69faba2154c79d6c1cmfa879d6c1ca81688627637wxia29f6ajdn987fj4

签名生成
3b58c3a9002108ed28a9ce2a06666b0d
```

最终如果您提供的 URL 另有参数，会通过 `&gravity_timestamp=1688627637&gravity_sign=3b58c3a9002108ed28a9ce2a06666b0d` 拼在原有参数后面；如没有参数，则会将 `?gravity_timestamp=1688627637&gravity_sign=3b58c3a9002108ed28a9ce2a06666b0d` 拼接在 URL 后面。

您提供的后端接口需要遵循以下返回格式：`{"access_token": "********", "expires_in": 7200}`

* `access_token`：获取到的凭证
* `expires_in`：凭证有效时间，单位：秒

### 2.3 透传模式 [#23-透传模式]

客户自行接入[刷新微信/抖音 Access Token 接口](/docs/server-integration/mini-game-tokens/refresh-access-token)，在 Token 变更时，通过接口调用透传 `access_token` 给引力引擎。

> 此种方式，适合多方平台都需要使用 `access_token` 的情况，引力引擎后台将**不再**主动刷新，而是由您主动调用引力的接口，透传 `access_token` 到引力引擎。
