API 参考
API 参考
Open-PicDecode Demo 对外提供 一个 HTTP 接口,供平台服务解密告警图片。
POST /decodePic
解密 OSS 加密图片,返回 Base64 明文。
| 项 | 值 |
|---|---|
| Method | POST |
| Path | /decodePic |
| Content-Type | application/json |
| 成功 HTTP 状态 | 200(业务失败时 HTTP 仍为 200,见响应 code) |
PicDecodeRequest 字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
imgUrl | string | 是 | 加密图片完整 URL(Demo 内由原生库下载) |
deviceId | string | 是 | 设备序列号;用于 OpenAPI 查 deviceAbility 及解密参数 |
secretKey | string | 是 | 非 TCM:设备序列号、自定义密钥或设备密码(无自定义密钥时为设备密码);TCM:设备密码 |
token | string | 是 | 用户 accessToken,供 OpenAPI 与解密流程使用 |
校验失败(缺字段等)返回 code=404,desc 为字段级错误信息。
处理流程(实现逻辑)
- 使用
deviceId+token调用 OpenAPI/openapi/listDeviceDetailsByIds,解析deviceAbility。 - 若能力集包含
TCM,则useTcm=true,走 TCM 解密分支;否则走普通分支。 - 调用
LechangeEncryptUtil.imageEncrypt(imgUrl, secretKey, token, deviceId, useTcm)得到明文字节。 - 成功时
decodePic= Base64(明文字节);失败抛出业务异常(见 错误码)。
响应体 ApiResult
统一结构(与旧版 Map 响应兼容,code 为 Integer):
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 200 成功;404 参数无效;500 未预期错误;业务/OpenAPI 失败见具体码 |
desc | string | 描述 |
data | object | 成功时为 PicDecodeResponse |
PicDecodeResponse
| 字段 | 类型 | 说明 |
|---|---|---|
decodePic | string | Base64 编码的图片二进制,解码后即为 JPG/PNG 等 |
请求示例
POST /decodePic(路径见上表;body 为 JSON):
{
"imgUrl": "https://example.oss.aliyuncs.com/xxx/encrypted.jpg",
"deviceId": "设备序列号",
"secretKey": "设备密码或自定义密钥",
"token": "用户accessToken"
}
成功响应示例
{
"code": 200,
"desc": "success",
"data": {
"decodePic": "/9j/4AAQSkZJRg..."
}
}
失败响应示例(参数)
{
"code": 404,
"desc": "imgUrl: imgUrl required"
}
失败响应示例(解密 — SDK 码直出)
{
"code": 2,
"desc": "密钥错误"
}
失败响应示例(解密 / 服务层)
{
"code": 1109,
"desc": "decode picture failed"
}
原生 SDK 失败时 code 可能为 2、-2 等(见 错误码 — SDK 映射);1109 为服务层封装场景。OpenAPI 业务码多为 11xx;无法解析时可能映射为 500。
相关 OpenAPI(组件内部调用)
Demo 内置 LechangeOpenApiClient,直连配置的 open.host / open.port:
| OpenAPI | 用途 |
|---|---|
POST /openapi/listDeviceDetailsByIds | 获取 deviceAbility,判断是否 TCM |
签名与公共参数约定见 签名 及 OpenAPI 文档;凭证来自 安装与部署 中的 open.appid / open.secret。
集成方式
- HTTP 微服务:业务后台将告警消息中的图片 URL 转发到本服务,取回 Base64 或解码后存对象存储。
- 嵌入式:复制
openpicdecode包内service、lcopensdk、client等到自有 Spring 工程,去掉 HTTP 层直接调PicDecodeService#decodePic。
客户端侧解密 API 见各端 OpenSDK,不在本文档范围。