# 获取普通 AccessToken

## 接口说明

获取网站应用全局唯一后台接口调用凭据（`access_token`）。**调用绝大多数后台接口时都需使用 access_token，开发者需要进行妥善保存。**

本接口应在服务器端调用。

## 关于网站授权 access_token 和普通 access_token 的区别

- 微信网站授权是通过 OAuth2.0 机制实现的，在用户授权给网站应用后，网站应用可以获取到一个网站应用页面授权特有的接口调用凭证（[网站授权 access_token](/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID)），通过网站授权 access_token 可以进行授权后接口调用，如获取用户基本信息；
- 其他微信接口，需要通过本文的接口「获取 access_token」来获取到的普通 access_token 调用。

## 注意事项

**access_token 的存储与更新**

- `access_token` 的存储至少要保留 512 个字符空间；
- `access_token` 的有效期目前为 **2 个小时**，需定时刷新，重复获取将导致上次获取的 `access_token` 失效；
- 建议开发者使用中控服务器统一获取和刷新 `access_token`，其他业务逻辑服务器所使用的 `access_token` 均来自于该中控服务器，不应该各自去刷新，否则容易造成冲突，导致 `access_token` 覆盖而影响业务；
- `access_token` 的有效期通过返回的 `expires_in` 来传达，目前是 7200 秒之内的值，中控服务器需要根据这个有效时间提前去刷新。在刷新过程中，中控服务器可对外继续输出的老 `access_token`，此时公众平台后台会保证在 5 分钟内，新老 `access_token` 都可用，这保证了第三方业务的平滑过渡；
- `access_token` 的有效时间可能会在未来有调整，所以中控服务器不仅需要内部定时主动刷新，还需要提供被动刷新 `access_token` 的接口，这样便于业务服务器在 API 调用获知 `access_token` 已超时的情况下，可以触发 `access_token` 的刷新流程。

## 接口调用请求说明

```
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
```

## 请求参数说明

| 参数 | 类型 | 是否必填 | 描述 |
| :--- | :--- | :--- | :--- |
| grant_type | string | 是 | 填写 client_credential |
| appid | string | 是 | 开放唯一凭证，即网站应用账号 ID。（需要已完成网站应用的开通，且账号没有异常状态） |
| secret | string | 是 | 开放唯一凭证密钥，即网站应用账号密钥 |

## 返回参数说明

| 参数 | 类型 | 描述 |
| :--- | :--- | :--- |
| access_token | string | 获取到的凭证 |
| expires_in | number | 凭证有效时间，单位：秒。目前是 7200 秒之内的值。 |
| errcode | number | 错误码 |
| errmsg | string | 错误信息 |

## 返回参数示例

正常返回

```json
{
  "access_token": "ACCESS_TOKEN",
  "expires_in": 7200
}
```

错误时返回

```json
{
  "errcode": 40013,
  "errmsg": "invalid appid"
}
```

## 错误码

| 错误码 | 错误描述 |
| :--- | :--- |
| 0 | 请求成功 |
| 40001 | AppSecret 错误或者 AppSecret 不属于这个网站应用，请开发者确认 AppSecret 的正确性 |
| 40002 | 请确保 grant_type 字段值为 client_credential |
| 40013 | 不合法的 AppID，请开发者检查 AppID 的正确性，避免异常字符，注意大小写 |
| 40125 | 不合法的 secret，请检查 secret 的正确性，避免异常字符，注意大小写 |
| 40164 | 调用接口的 IP 地址不在白名单中，请在接口 IP 白名单中进行设置 |
| 41004 | 缺少 secret 参数 |
| 50004 | 禁止使用 token 接口 |
| 50007 | 账号已冻结 |
| 61024 | 第三方平台 API 需要使用第三方平台专用 token |
