559 lines
17 KiB
Markdown
559 lines
17 KiB
Markdown
# AI 生图平台素材接口文档
|
||
|
||
> 用途:AI 生图平台统一通过同一条接口,查询 `标准模型白底图` 或 `任务-详情整套预览下载链接`
|
||
> 当前主域名:`https://sc.jiansun.vip`
|
||
> 当前资源主域名:`https://s3.jiansun.vip`
|
||
> 备用资源域名:`https://s3.yydd.ai`(备用 / 回切用,非默认对接地址)
|
||
> 旧应用域名:`https://3d.yydd.ai`(仅保留兼容跳转)
|
||
|
||
## 1. 基础信息
|
||
|
||
- 接口基地址:`https://sc.jiansun.vip/api/external/`
|
||
- 鉴权方式:请求头 `X-API-Key`
|
||
- 请求方式:`GET`
|
||
- 返回格式:`application/json`
|
||
- 主接口路径:`/api/external/standard-model-white-background`
|
||
- 默认资源类型:`white-background`
|
||
|
||
### 1.1 当前网络口径
|
||
|
||
- 接口查询、鉴权和下载 token 入口统一使用 `https://sc.jiansun.vip`
|
||
- `task-detail` 分支返回的预览图直链,当前默认资源域名使用 `https://s3.jiansun.vip`
|
||
- `https://s3.yydd.ai` 当前只保留为备用资源域名;除非单独通知切换,否则调用方继续以 `https://s3.jiansun.vip` 为准
|
||
|
||
返回统一格式:
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {}
|
||
}
|
||
```
|
||
|
||
失败时:
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": {
|
||
"code": "ERROR_CODE",
|
||
"message": "错误说明"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.2 响应诊断头
|
||
|
||
为便于调用方排查“接口慢”到底是服务端慢还是链路慢,当前接口额外返回以下响应头:
|
||
|
||
| 响应头 | 说明 |
|
||
|---|---|
|
||
| `X-Trace-Id` | 本次请求追踪 ID,排查时可提供给素材平台定位服务端日志 |
|
||
| `X-Server-Duration-Ms` | 服务端实际处理耗时,单位毫秒 |
|
||
| `Server-Timing` | 标准服务端耗时头,内容与上面一致 |
|
||
| `X-Resource-Type` | 本次实际走的资源分支 |
|
||
| `X-Request-Sku` | 本次实际识别后的 SKU;未传时不返回 |
|
||
| `X-Request-Spu` | 本次实际识别后的 SPU;未传时不返回 |
|
||
|
||
## 2. 通用请求规则
|
||
|
||
### 2.1 请求头
|
||
|
||
| 参数 | 必填 | 说明 |
|
||
|---|---|---|
|
||
| `X-API-Key` | 是 | 外部接口访问密钥 |
|
||
|
||
### 2.2 查询参数
|
||
|
||
| 参数 | 必填 | 说明 |
|
||
|---|---|---|
|
||
| `resourceType` | 否 | 资源类型。可选 `white-background` 或 `task-detail`。不传时默认 `white-background` |
|
||
| `sku` | 条件必填 | `sku` 和 `spu` 二选一即可 |
|
||
| `spu` | 条件必填 | `sku` 和 `spu` 二选一即可 |
|
||
|
||
补充说明:
|
||
|
||
- `sku`、`spu` 都按大小写不敏感查询,建议调用方统一传大写。
|
||
- 当前服务端会先把 `sku`、`spu` 标准化为大写后再做精确匹配,建议调用方直接传大写,避免自身重复大小写转换。
|
||
- 如果 `sku` 和 `spu` 同时传入,接口优先按 `spu` 处理。
|
||
- `shopName` 当前与 `categoryName` 含义一致,都是“店铺”。
|
||
|
||
## 3. 白底图查询
|
||
|
||
### 3.1 适用场景
|
||
|
||
- `resourceType=white-background`
|
||
- 不传 `resourceType` 时也走这一分支,兼容老调用方
|
||
- 支持两种查询方式:
|
||
- `sku`:直接拿到该 SKU 的完整白底图信息
|
||
- `spu`:先拿到该 SPU 下全部 SKU 清单,再让用户选 SKU
|
||
|
||
---
|
||
|
||
### 3.2 按 SKU 查询白底图
|
||
|
||
**请求**
|
||
|
||
```http
|
||
GET /api/external/standard-model-white-background?resourceType=white-background&sku={SKU}
|
||
X-API-Key: your-api-key
|
||
```
|
||
|
||
兼容老调用方式:
|
||
|
||
```http
|
||
GET /api/external/standard-model-white-background?sku={SKU}
|
||
X-API-Key: your-api-key
|
||
```
|
||
|
||
**成功响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"resourceType": "white-background",
|
||
"sku": "TEXT001452",
|
||
"materialId": "484bd047-c956-48cf-a0f4-401f696aef8d",
|
||
"productModel": "TEXT0014",
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"whiteBackgroundUploaded": true,
|
||
"whiteBackgroundComplete": false,
|
||
"whiteBackgroundFixedCount": 2,
|
||
"whiteBackgroundOtherCount": 1,
|
||
"whiteBackgroundCount": 3,
|
||
"missingViews": [
|
||
{
|
||
"key": "leftBack45",
|
||
"label": "左后45°"
|
||
}
|
||
],
|
||
"whiteBackground": {
|
||
"fixed": [
|
||
{
|
||
"key": "leftFront45",
|
||
"label": "左前45°",
|
||
"fileName": "左前45°.png",
|
||
"fileSize": 123456,
|
||
"downloadUrl": "https://sc.jiansun.vip/api/external/download?token=xxx"
|
||
},
|
||
{
|
||
"key": "rightFront45",
|
||
"label": "右前45°",
|
||
"fileName": "右前45°.png",
|
||
"fileSize": 123456,
|
||
"downloadUrl": "https://sc.jiansun.vip/api/external/download?token=yyy"
|
||
}
|
||
],
|
||
"other": [
|
||
{
|
||
"key": "other-1",
|
||
"label": "其他图片1",
|
||
"fileName": "detail-1.png",
|
||
"fileSize": 123456,
|
||
"downloadUrl": "https://sc.jiansun.vip/api/external/download?token=zzz"
|
||
}
|
||
]
|
||
},
|
||
"downloadUrls": {
|
||
"zip": "https://sc.jiansun.vip/api/external/download?token=zip-token"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**字段说明**
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `resourceType` | 固定为 `white-background` |
|
||
| `sku` | 实际命中的 SKU |
|
||
| `materialId` | 标准模型素材 ID |
|
||
| `productModel` | 所属 SPU |
|
||
| `categoryName` | 店铺 |
|
||
| `shopName` | 店铺,当前与 `categoryName` 相同 |
|
||
| `whiteBackgroundUploaded` | 是否已有白底图 |
|
||
| `whiteBackgroundComplete` | 固定 8 个角度是否已补齐 |
|
||
| `whiteBackgroundFixedCount` | 已有固定角度图数量 |
|
||
| `whiteBackgroundOtherCount` | 已有 other 图数量 |
|
||
| `whiteBackgroundCount` | 白底图总数 |
|
||
| `missingViews` | 还缺少的固定角度图 |
|
||
| `whiteBackground.fixed` | 固定角度白底图列表 |
|
||
| `whiteBackground.other` | 其他白底图列表 |
|
||
| `downloadUrls.zip` | 当前 SKU 白底图 ZIP 下载链接 |
|
||
|
||
固定角度顺序固定为:
|
||
|
||
1. `leftFront45`
|
||
2. `rightFront45`
|
||
3. `leftBack45`
|
||
4. `rightBack45`
|
||
5. `front`
|
||
6. `back`
|
||
7. `left`
|
||
8. `right`
|
||
|
||
单张图片对象字段:
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `key` | 固定图为固定角度 key,other 图为 `other-*` |
|
||
| `label` | 图片说明 |
|
||
| `fileName` | 文件名 |
|
||
| `fileSize` | 文件大小,单位字节 |
|
||
| `downloadUrl` | 单张白底图下载链接 |
|
||
|
||
---
|
||
|
||
### 3.3 按 SPU 查询白底图 SKU 清单
|
||
|
||
**请求**
|
||
|
||
```http
|
||
GET /api/external/standard-model-white-background?resourceType=white-background&spu={SPU}
|
||
X-API-Key: your-api-key
|
||
```
|
||
|
||
**成功响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"resourceType": "white-background",
|
||
"spu": "TEXT0014",
|
||
"materialId": "484bd047-c956-48cf-a0f4-401f696aef8d",
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"skuCount": 2,
|
||
"skuList": [
|
||
{
|
||
"skuName": "TEXT001452",
|
||
"skuId": "sku-id-1",
|
||
"hasWhiteBackground": true,
|
||
"whiteBackgroundCount": 2,
|
||
"previewImage": {
|
||
"downloadUrl": "https://sc.jiansun.vip/api/external/download?token=xxx",
|
||
"fileName": "右前45°.png",
|
||
"fileSize": 123456
|
||
}
|
||
},
|
||
{
|
||
"skuName": "TEXT001453",
|
||
"skuId": "sku-id-2",
|
||
"hasWhiteBackground": false,
|
||
"whiteBackgroundCount": 0,
|
||
"previewImage": null
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**字段说明**
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `resourceType` | 固定为 `white-background` |
|
||
| `spu` | 实际命中的 SPU |
|
||
| `materialId` | 标准模型素材 ID |
|
||
| `categoryName` | 店铺 |
|
||
| `shopName` | 店铺,当前与 `categoryName` 相同 |
|
||
| `skuCount` | 该 SPU 下 SKU 数量 |
|
||
| `skuList[].skuName` | SKU 名称 |
|
||
| `skuList[].skuId` | SKU 记录 ID |
|
||
| `skuList[].hasWhiteBackground` | 是否已有任意白底图 |
|
||
| `skuList[].whiteBackgroundCount` | 当前固定角度白底图数量 |
|
||
| `skuList[].previewImage` | 右前 45° 预览图;如果没有该角度则为 `null` |
|
||
|
||
说明:
|
||
|
||
- 这个接口主要给 AI 平台先展示 SKU 列表用。
|
||
- 选定 SKU 后,再调用“按 SKU 查询白底图”接口拿完整白底图信息。
|
||
|
||
## 4. 任务-详情整套查询
|
||
|
||
### 4.1 适用场景
|
||
|
||
- `resourceType=task-detail`
|
||
- 按 `任务-详情` 素材类型直接查询,不再要求先存在 `标准模型`
|
||
- 只返回:
|
||
- `materialType='任务-详情'`
|
||
- 同时拥有主图、SKU 图、详情图
|
||
- `deletedAt=null`
|
||
的候选素材
|
||
- 返回的是**预览图直链数组**,不是 zip,也不是 token 下载链接
|
||
- 返回顺序按 `uploadedAt` 倒序,也就是最新上传的排前面
|
||
- 当前默认返回的资源直链域名是 `https://s3.jiansun.vip`
|
||
- `https://s3.yydd.ai` 保留备用说明,但不是当前默认示例地址
|
||
|
||
---
|
||
|
||
### 4.2 按 SPU 查询任务-详情整套候选
|
||
|
||
**请求**
|
||
|
||
```http
|
||
GET /api/external/standard-model-white-background?resourceType=task-detail&spu={SPU}
|
||
X-API-Key: your-api-key
|
||
```
|
||
|
||
注意:
|
||
|
||
- `task-detail` 响应顶层的 `categoryName` / `shopName` 是便捷字段,取本次返回候选列表中的第一条候选素材。
|
||
- 如果 AI 平台要展示候选素材的实际店铺,请优先读取 `candidates[].categoryName` 或 `candidates[].shopName`。
|
||
- 如果同一个 SPU 下有多条候选素材,且它们店铺不同,请以各自 `candidates[]` 内的字段为准。
|
||
|
||
**成功响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"resourceType": "task-detail",
|
||
"spu": "SPU001",
|
||
"sku": null,
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"candidateCount": 1,
|
||
"candidates": [
|
||
{
|
||
"materialId": "material-2",
|
||
"taskNo": "TASK202601141713525624",
|
||
"productModel": "SPU001",
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"sceneName": "客厅",
|
||
"uploadedAt": "2026-03-18T10:00:00.000Z",
|
||
"isFullSet": true,
|
||
"downloadUrls": {
|
||
"main": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/main-1.jpg"
|
||
],
|
||
"sku": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/sku-1.jpg"
|
||
],
|
||
"detail": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/detail-1.jpg"
|
||
],
|
||
"all": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/main-1.jpg",
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/sku-1.jpg",
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/detail-1.jpg"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 4.3 按 SKU 查询任务-详情整套候选
|
||
|
||
**请求**
|
||
|
||
```http
|
||
GET /api/external/standard-model-white-background?resourceType=task-detail&sku={SKU}
|
||
X-API-Key: your-api-key
|
||
```
|
||
|
||
**处理逻辑**
|
||
|
||
- 先通过 `SKU -> 标准模型 SPU`
|
||
- 再按这个 SPU 查询所有整套 `任务-详情` 候选
|
||
- 顶层 `categoryName` / `shopName` 是便捷字段,取本次返回候选列表中的第一条候选素材
|
||
- 如果 AI 平台要展示候选素材的实际店铺,请优先读取 `candidates[].categoryName` 或 `candidates[].shopName`
|
||
|
||
**成功响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"resourceType": "task-detail",
|
||
"spu": "SPU001",
|
||
"sku": "SKU001",
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"candidateCount": 1,
|
||
"candidates": [
|
||
{
|
||
"materialId": "material-2",
|
||
"taskNo": "TASK202601141713525624",
|
||
"productModel": "SPU001",
|
||
"categoryName": "旗舰店",
|
||
"shopName": "旗舰店",
|
||
"sceneName": "客厅",
|
||
"uploadedAt": "2026-03-18T10:00:00.000Z",
|
||
"isFullSet": true,
|
||
"downloadUrls": {
|
||
"main": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/main-1.jpg"
|
||
],
|
||
"sku": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/sku-1.jpg"
|
||
],
|
||
"detail": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/detail-1.jpg"
|
||
],
|
||
"all": [
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/main-1.jpg",
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/sku-1.jpg",
|
||
"https://s3.jiansun.vip/gongxiangpan/preview/detail-1.jpg"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**候选素材字段说明**
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| `materialId` | 任务-详情素材 ID |
|
||
| `taskNo` | 任务号 |
|
||
| `productModel` | 对应 SPU |
|
||
| `categoryName` | 店铺 |
|
||
| `shopName` | 店铺,当前与 `categoryName` 相同 |
|
||
| `sceneName` | 场景 |
|
||
| `uploadedAt` | 上传时间,ISO 8601 格式 |
|
||
| `isFullSet` | 是否整套;当前规则为“同时拥有主图、SKU 图、详情图” |
|
||
| `downloadUrls.main` | 主图预览直链数组 |
|
||
| `downloadUrls.sku` | SKU 图预览直链数组 |
|
||
| `downloadUrls.detail` | 详情图预览直链数组 |
|
||
| `downloadUrls.all` | `main + sku + detail` 合并后的数组 |
|
||
|
||
说明:
|
||
|
||
- `task-detail` 分支返回的是**全部候选**,不是只返回一条。
|
||
- 预览链接可以直接打开或下载。
|
||
- 历史 `任务-详情` 会按同一套资产规则判断,不再依赖人工勾选。
|
||
- 顶层 `categoryName` / `shopName` 是便捷字段;如果要给用户展示候选素材的真实店铺,请优先使用 `candidates[].shopName`。
|
||
|
||
## 5. 下载说明
|
||
|
||
### 5.1 白底图
|
||
|
||
白底图返回的是下载链接:
|
||
|
||
- 单张图:`whiteBackground.fixed[*].downloadUrl` / `whiteBackground.other[*].downloadUrl`
|
||
- 整包 ZIP:`downloadUrls.zip`
|
||
|
||
调用方式:
|
||
|
||
```http
|
||
GET https://sc.jiansun.vip/api/external/download?token=xxx
|
||
```
|
||
|
||
### 5.2 任务-详情整套
|
||
|
||
任务-详情返回的是可直接访问的预览图直链数组:
|
||
|
||
- `downloadUrls.main`
|
||
- `downloadUrls.sku`
|
||
- `downloadUrls.detail`
|
||
- `downloadUrls.all`
|
||
|
||
这一分支**不返回 zip**,也**不需要再调下载 token 接口**。
|
||
|
||
补充说明:
|
||
|
||
- 当前默认回包中的预览图资源域名为 `https://s3.jiansun.vip`
|
||
- `https://s3.yydd.ai` 仅保留为备用资源域名说明,不作为当前默认对接地址
|
||
|
||
## 6. 错误码
|
||
|
||
### 6.1 通用错误
|
||
|
||
| HTTP 状态码 | 错误码 | 说明 |
|
||
|---|---|---|
|
||
| 401 | `INVALID_API_KEY` | API Key 无效或缺失 |
|
||
| 400 | `MISSING_PARAM` | 没有传 `sku` 或 `spu` |
|
||
| 400 | `RESOURCE_TYPE_INVALID` | `resourceType` 不是 `white-background` 或 `task-detail` |
|
||
| 500 | `SERVER_ERROR` | 服务器内部错误 |
|
||
|
||
### 6.2 白底图分支错误
|
||
|
||
| HTTP 状态码 | 错误码 | 说明 |
|
||
|---|---|---|
|
||
| 404 | `SKU_NOT_FOUND` | 未找到对应的标准模型 SKU |
|
||
| 409 | `SKU_NOT_UNIQUE` | SKU 重复,暂无法对外提供白底图 |
|
||
| 404 | `SPU_NOT_FOUND` | 未找到对应的标准模型 SPU |
|
||
| 404 | `NO_SKUS` | 该 SPU 下没有 SKU 数据 |
|
||
| 404 | `WHITE_BACKGROUND_NOT_FOUND` | 该 SKU 暂无白底图 |
|
||
|
||
### 6.3 任务-详情分支错误
|
||
|
||
| HTTP 状态码 | 错误码 | 说明 |
|
||
|---|---|---|
|
||
| 404 | `SKU_NOT_FOUND` | 未找到对应的标准模型 SKU |
|
||
| 409 | `SKU_NOT_UNIQUE` | SKU 重复,暂无法对外提供任务-详情整套素材 |
|
||
| 404 | `TASK_DETAIL_NOT_FOUND` | 该 SPU 下,或该 SKU 所属 SPU 下暂无任务-详情素材 |
|
||
| 404 | `FULL_SET_NOT_FOUND` | 有任务-详情素材,但没有任何一条同时拥有主图、SKU 图、详情图 |
|
||
|
||
## 7. cURL 示例
|
||
|
||
### 7.1 按 SKU 查询白底图
|
||
|
||
```bash
|
||
curl -X GET \
|
||
"https://sc.jiansun.vip/api/external/standard-model-white-background?sku=TEXT001452" \
|
||
-H "X-API-Key: your-api-key"
|
||
```
|
||
|
||
### 7.2 按 SPU 查询白底图 SKU 清单
|
||
|
||
```bash
|
||
curl -X GET \
|
||
"https://sc.jiansun.vip/api/external/standard-model-white-background?resourceType=white-background&spu=TEXT0014" \
|
||
-H "X-API-Key: your-api-key"
|
||
```
|
||
|
||
### 7.3 按 SPU 查询任务-详情整套候选
|
||
|
||
```bash
|
||
curl -X GET \
|
||
"https://sc.jiansun.vip/api/external/standard-model-white-background?resourceType=task-detail&spu=SPU001" \
|
||
-H "X-API-Key: your-api-key"
|
||
```
|
||
|
||
### 7.4 按 SKU 查询任务-详情整套候选
|
||
|
||
```bash
|
||
curl -X GET \
|
||
"https://sc.jiansun.vip/api/external/standard-model-white-background?resourceType=task-detail&sku=SKU001" \
|
||
-H "X-API-Key: your-api-key"
|
||
```
|
||
|
||
## 8. 接入建议
|
||
|
||
- 老的白底图调用方可以不改,继续传 `sku` 即可。
|
||
- 如果是 AI 生图平台新流程,建议:
|
||
- 白底图:`spu -> sku -> 白底图详情`
|
||
- 任务-详情:直接按 `spu` 或 `sku` 查整套候选
|
||
- `task-detail` 返回多个候选时,建议调用方按 `uploadedAt` 再做一次前端展示排序或筛选。
|
||
- `task-detail` 使用的是预览图直链,不适合再按源文件 zip 的思路处理。
|
||
|
||
## 9. 当前联调状态
|
||
|
||
截至 `2026-03-21`,正式环境已部署并验证通过的内容:
|
||
|
||
- `/api/external/standard-model-white-background` 已支持 `white-background` 和 `task-detail`
|
||
- 不传 `resourceType` 时,白底图老调用方式保持兼容
|
||
- `task-detail` 已支持 `spu` / `sku` 两种查询
|
||
- 返回中已补充 `shopName`
|
||
- `任务-详情` 整套字段 `isFullSet` 已改为按主图 / SKU 图 / 详情图自动判定
|
||
- 对外文档默认资源域名已统一到 `https://s3.jiansun.vip`,同时保留 `https://s3.yydd.ai` 作为备用说明
|
||
- 相关测试已通过:`standard-model-white-background-route`、`task-detail-full-set`、`url-rewrite`
|
||
- 构建验证已通过:`npm run build`
|
||
- 正式环境健康检查已通过:`/api/health`
|
||
- 正式环境真实调用已验证:
|
||
- `resourceType=task-detail&spu=CTG0290` 返回 `200`
|
||
- `resourceType=task-detail&sku=DNZ025802` 返回 `200`
|
||
- 白底图 `spu=CTG0149` 返回 `200`
|