Appearance
开放接口
本页按接口顺序说明开放接口的接入方式、请求参数、实际请求示例和返回结构。
基础信息
官方服务地址:
http
https://hcgl.top私有部署说明
如果你使用的是私有部署版本,请将文档中的 https://hcgl.top 替换为你自己的服务地址。
开放接口统一返回结构如下:
json
{
"code": 0,
"data": {},
"message": "ok"
}API Key 获取与使用
开放接口通过 API Key 鉴权,不使用网页登录态。
获取方式:
- 登录系统
- 打开个人中心
- 进入
API Key 管理 - 创建或重置
API Key - 复制创建时返回的明文 key
使用方式:
- 在请求头中传入
X-API-Key - 每个用户当前只有一把 key
- 重置后,旧 key 会立即失效
- 禁用后,当前 key 无法继续调用需要鉴权的开放接口
请求头示例:
http
X-API-Key: mph_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx注意
API Key 只在创建或重置时展示一次,请妥善保存。
接口列表
当前开放接口定位是外部系统只读查询。
| 接口 | 方法 | 是否需要 X-API-Key | 说明 |
|---|---|---|---|
/api/open/ping | GET | 否 | 开放接口健康检查 |
/api/open/whoami | GET | 是 | 查询当前 Open API 调用身份 |
/api/open/device/{deviceId} | GET | 是 | 查询设备信息 |
1. 健康检查
用于确认开放接口服务是否可访问。
请求地址
http
GET https://hcgl.top/api/open/ping鉴权
不需要传 X-API-Key。
实际请求示例
GET
/api/open/ping请求地址
https://hcgl.top/api/open/pingbash
curl -X GET 'https://hcgl.top/api/open/ping'返回示例
json
{
"code": 0,
"data": "pong",
"message": "ok"
}2. 查询当前调用身份
用于验证当前 API Key 是否有效,并返回后端识别到的用户 ID 和 API Key ID。
请求地址
http
GET https://hcgl.top/api/open/whoami请求头
| 名称 | 必填 | 说明 |
|---|---|---|
X-API-Key | 是 | 当前用户的开放接口凭证 |
实际请求示例
GET
/api/open/whoami请求地址
https://hcgl.top/api/open/whoamibash
curl -X GET \
'https://hcgl.top/api/open/whoami' \
-H 'X-API-Key: 这里替换成你的apikey'返回示例
json
{
"code": 0,
"data": {
"userId": "1",
"apiKeyId": "10"
},
"message": "ok"
}data 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
userId | string | 当前 API Key 绑定的用户 ID |
apiKeyId | string | 当前 API Key 的记录 ID |
3. 查询设备信息
用于查询当前用户名下指定打印机的开放设备信息。
请求地址
http
GET https://hcgl.top/api/open/device/{deviceId}路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceId | string | 是 | 打印机设备 ID |
请求头
| 名称 | 必填 | 说明 |
|---|---|---|
X-API-Key | 是 | 当前用户的开放接口凭证 |
实际请求示例
GET
/api/open/device/{deviceId}请求地址
https://hcgl.top/api/open/device/{deviceId}bash
curl -X GET \
'https://hcgl.top/api/open/device/DEVICE_ID' \
-H 'X-API-Key: 这里替换成你的apikey'返回示例
json
{
"code": 0,
"data": {
"name": "客厅 P1S",
"deviceId": "DEVICE_ID",
"model": "P1S",
"printStatus": "RUNNING",
"printProgress": 42,
"taskImage": "https://example.com/task-cover.png",
"remainingTime": 126,
"chamberLight": "on",
"chamberLight2": "off",
"workLight": "on",
"bedTemp": 60,
"chamberTemp": 35,
"nozzleTemp": 220,
"activeNozzle": "single",
"targetNozzleTemp": 220,
"leftNozzleTemp": null,
"leftTargetNozzleTemp": null,
"rightNozzleTemp": null,
"rightTargetNozzleTemp": null,
"layerNum": 88,
"totalLayerNum": 210,
"trayType": "PLA",
"hmsErrors": [
{
"code": "HMS_0300_0100_0001_0001",
"message": "热床温控异常,加热器可能短路。",
"severity": "fatal",
"module": "mc"
}
]
},
"message": "ok"
}data 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 打印机名称 |
deviceId | string | 设备 ID |
model | string | 打印机型号,枚举见下方 |
printStatus | string | 当前打印状态,枚举见下方 |
printProgress | number | 当前打印进度,范围 0-100 |
taskImage | string | 当前任务封面图地址,可能为空 |
remainingTime | number | 预计剩余打印时间,单位分钟 |
chamberLight | string | 主打印腔灯状态,常见值为 on / off |
chamberLight2 | string | 第二路打印腔灯状态,常见值为 on / off |
workLight | string | 工作灯状态,常见值为 on / off |
bedTemp | number | 当前热床温度 |
chamberTemp | number | 当前仓温 |
nozzleTemp | number | 活动喷嘴当前温度,单位摄氏度 |
activeNozzle | string | 活动喷嘴,可能值为 single / left / right |
targetNozzleTemp | number | 活动喷嘴目标温度,单位摄氏度 |
leftNozzleTemp | number | 左喷嘴当前温度,双喷嘴设备可能返回 |
leftTargetNozzleTemp | number | 左喷嘴目标温度,双喷嘴设备可能返回 |
rightNozzleTemp | number | 右喷嘴当前温度,双喷嘴设备可能返回 |
rightTargetNozzleTemp | number | 右喷嘴目标温度,双喷嘴设备可能返回 |
layerNum | number | 当前层数 |
totalLayerNum | number | 总层数 |
trayType | string | 当前使用中的耗材类型,枚举见下方 |
hmsErrors | array | 当前设备 HMS 错误列表,只包含可展示字段 |
喷嘴温度说明
单喷嘴设备通常返回 activeNozzle: "single",并通过 nozzleTemp / targetNozzleTemp 表示当前喷嘴温度。
双喷嘴设备会同时返回左右喷嘴温度字段,并通过 activeNozzle 标识当前活动喷嘴;未上报的喷嘴温度字段可能为空。
hmsErrors 字段说明
hmsErrors 与系统内设备详情接口 GET /api/device/{deviceId}/complete 的 HMS 错误展示结构一致。后端会根据设备上报的 HMS 信息和打印机型号解析错误码,只返回可展示的错误项。
当设备当前没有可展示 HMS 错误时,该字段通常为空数组。
| 字段 | 类型 | 说明 |
|---|---|---|
code | string | 标准 HMS 错误码,例如 HMS_0300_0100_0001_0001 |
message | string | 中文错误描述 |
severity | string | 严重级别,可能值为 fatal / serious / common / info / unknown |
module | string | 错误模块,可能值为 mainboard / xcam / ams / toolhead / mc / unknown |
权限校验说明
该接口会同时校验:
API Key对应的用户- 设备缓存归属
- 数据库中的设备归属
如果设备不属于当前 API Key 用户,或缓存归属与数据库归属不一致,请求会直接返回错误,不继续处理。
printStatus 枚举
printStatus 来自设备状态中的 gcode_state,当前项目中使用的枚举值如下:
| 值 | 含义 |
|---|---|
FAILED | 失败 |
FINISH | 完成 |
IDLE | 空闲 |
OFFLINE | 离线 |
PREPARE | 准备中 |
RUNNING | 打印中 |
PAUSE | 暂停 |
SLICING | 切片中 |
INIT | 初始化 |
说明
不同设备型号或不同阶段上报的状态可能不完全一致,但当前系统内部已明确使用并兼容以上值。
model 枚举
model 返回的是系统映射后的型号文本,当前项目中已定义的型号如下:
| 返回值 | 底层设备型号值 |
|---|---|
X1C | BL-P001 |
P1P | C11 |
P1S | C12 |
X1E | C13 |
A1MINI | N1 |
A1 | N2S |
X2D | N6-V2 |
P2S | N7-V2 |
H2C | O1C2-V2 |
H2D | O1D |
H2S | O1S |
说明
如果后端收到未在映射表中的设备型号,接口会直接返回原始型号值,而不是上表中的文本。
trayType 枚举
trayType 表示当前使用中的耗材类型,当前可能的值包括:
| 值 | 值 | 值 | 值 |
|---|---|---|---|
ABS | ABS-GF | ASA | ASA-AERO |
ASA-CF | BVOH | EVA | HIPS |
PA | PA-CF | PA-GF | PA6-CF |
PC | PCTG | PE | PE-CF |
PET-CF | PETG | PETG-CF | PHA |
PLA | PLA-AERO | PLA-CF | PP |
PP-CF | PP-GF | PPA-CF | PPA-GF |
PPS | PPS-CF | PVA | TPU |
TPU-AMS |
说明
trayType 由设备当前激活的料盘信息解析得到;当设备未上报耗材信息或当前槽位无法识别时,该字段可能为空。
常见错误
| 场景 | 说明 |
|---|---|
未传 X-API-Key | 请求未通过开放接口鉴权 |
API Key 无效或已禁用 | 无法识别当前调用用户 |
deviceId 不存在 | 目标设备不存在 |
| 当前用户无权访问该设备 | 设备不属于当前 API Key 用户 |
| 设备归属校验不一致 | Redis 缓存归属与数据库归属不一致 |
错误返回示例
接口错误时同样会返回统一响应结构,通常格式如下:
json
{
"code": 40101,
"data": null,
"message": "无权访问该设备"
}常见错误示例
未传 X-API-Key 或身份缺失:
json
{
"code": 40100,
"data": null,
"message": "Open API 调用身份缺失"
}API Key 无效:
json
{
"code": 40100,
"data": null,
"message": "API Key 无效"
}API Key 已禁用:
json
{
"code": 40100,
"data": null,
"message": "API Key 已禁用"
}无权访问该设备:
json
{
"code": 40101,
"data": null,
"message": "无权访问该设备"
}设备不存在:
json
{
"code": 40400,
"data": null,
"message": "设备不存在"
}设备归属校验不一致:
json
{
"code": 40101,
"data": null,
"message": "设备归属校验不一致"
}调试建议
- 先调用
GET /api/open/ping确认开放接口服务可访问 - 再调用
GET /api/open/whoami验证当前API Key是否生效 - 最后调用
GET /api/open/device/{deviceId}验证设备访问权限和设备数据 - 如果出现归属不一致,请先检查设备绑定关系和缓存同步是否正常