Files
youzan-datahub/docs/餐饮零售数据中台/有赞接口/1.自用型应用获取和刷新 access_token.md

97 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 自用型应用获取和刷新 access_token
## 1. 接口说明
* **接口功能**:用于“自用型应用”获取及刷新调用有赞云 API 所需的身份验证凭证(`access_token`)。
* **前提条件**:已在有赞云控制台完成自用型应用的创建,并且完成了店铺授权。
* **业务注意**
1. 一个店铺只能授权给一个自用型应用,而一个自用型应用可以有多个店铺授权(多店授权需通过有赞云审核)。
2. 建议开发者在代码中全局捕获 Token 失效的错误码,并实现 `access_token` 失效时自动重新获取的逻辑。
---
## 2. 请求说明
* **请求地址**`https://open.youzanyun.com/auth/token`
* **请求方式**`POST`
* **请求头 (Header)**`Content-Type: application/json`
> ⚠️ **注意**:必须严格使用 `POST` 加上 `application/json` 的请求方式,否则会报错。
---
## 3. 请求参数
在请求的 BodyJSON格式中传入以下参数
| 参数名称 | 类型 | 是否必须 | 示例值 | 描述说明 |
| :--- | :--- | :---: | :--- | :--- |
| `client_id` | String | **是** | `239ec70db50cfd...` | 有赞云颁发给开发者的应用 ID [1] |
| `client_secret` | String | **是** | `9ea25ab4513b7f...` | 有赞云颁发给开发者的应用密钥 (AppSecret) [1] |
| `authorize_type` | String | **是** | `silent` | 授权方式。自用型应用固定为 `"silent"` [1] |
| `grant_id` | String | **是** | `123456` | 授权店铺ID`kdt_id`。如果是API接口对接传店铺ID如果是支付商户对接传 `mchId` [1] |
| `refresh` | Boolean | 否 | `false` | 是否需要返回 `refresh_token`。默认为 `false`。如需通过 `refresh_token` 刷新凭证,需传入 `true` [1] |
*(注:`client_id`、`client_secret` 和店铺ID `grant_id`,请前往有赞云控制台的应用详情和授权页面查看 [1]。)*
---
## 4. 响应参数
响应主体为 JSON 格式,核心数据包裹在 `data` 节点中:
| 参数名称 | 类型 | 描述说明 |
| :--- | :--- | :--- |
| `success` | Boolean | 请求是否成功 |
| `code` | Integer | HTTP 状态码,`200` 表示成功 |
| `data.access_token` | String | 用于调用业务 API 接口的有效凭证 |
| `data.expires_in` | Long | `access_token` 的有效时间(单位:秒,通常为 7 天 / 604800秒 |
| `data.authority_id` | String | 授权店铺的 ID`kdt_id` |
| `data.refresh_token` | String | 用于刷新 `access_token` 的凭证(仅在请求参数 `refresh``true` 时返回) |
---
## 5. 请求与响应示例
### 5.1 CURL 请求示例 [1]
```bash
curl -X POST https://open.youzanyun.com/auth/token \
-H 'content-type: application/json' \
-d '{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"authorize_type": "silent",
"grant_id": "88888",
"refresh": false
}'
```
### 5.2 成功响应示例
```json
{
"success": true,
"code": 200,
"data": {
"access_token": "f59b1a6bb04f4eqweqd1c6af315d",
"expires_in": 604800,
"authority_id": "88888",
"refresh_token": "c3b21a6bb04f4eqweqd1c6af315d"
},
"message": null
}
```
---
## 6. 🔄 如何刷新 access_token
对于**自用型应用**,有赞云提供了两种刷新/重新获取 token 的策略:
### 方式一:直接静默重新获取(推荐做法)
因为自用型应用采用的是 `silent`(静默)授权模式,无需商家人工干预。因此当 `access_token` 过期时,**直接再次发送和首次获取时完全一样的 POST 请求**`authorize_type` 依然为 `silent`),即可直接生成并获取到一个全新的 `access_token`
### 方式二:通过 refresh_token 刷新
1. 在首次获取 token 时,必须将入参的 `refresh` 字段设置为 `true` [2],此时响应数据中会返回一个 `refresh_token`
2.`access_token` 过期后,可以改变请求参数来刷新 Token
*`authorize_type` 的值修改为 `"refresh_token"` [2]
* 增加传递 `"refresh_token": "你获取到的refresh_token字符串"` [2]
* 仍然携带 `client_id``client_secret` [2]
*(建议:业务中采取在 Redis / 本地缓存中托管 Token 及到期时间,在到期前提前 10-30 分钟使用方式一重新拉取即可。)*