验密
验密
功能详情
入参 passwordV2(deviceId 上下文 AES 密文,非明文)。本方法不会出现在 device.capability.list 里。通过时 data 为 {}。与改密 oldPasswordV2 / newPasswordV2 同规则。改密见 改密。
请求地址
POST https://openapi.lechange.cn/openapi/v2/device.password.verify
最小权限
管理员操作自己绑定的设备不需要权限。操作被分享设备需要基础配置权限。子用户绑定不需要。子账号需要 Config。见 权限码。
传入参数说明
| 参数名 | 参数类型 | 是否必填 | 默认值 | 合法值 | 参数说明 |
|---|---|---|---|---|---|
token | String | 是 | 管理员、子用户或子账号 accessToken | ||
deviceId | String | 是 | 设备序列号 | ||
productId | String | 否 | 可省略。传了且与该设备实际型号不一致 → DV2009 | ||
passwordV2 | String | 是 | 设备密码 v2 密文(见下文「密码字段加密」) |
密码字段加密
设备密码字段加密(v2 OpenAPI)
适用字段:device.password.verify 的 passwordV2;device.password.set 的 oldPasswordV2、newPasswordV2。三者同一套算法(与绑定页 encryptCodeV2 同族,字段名不同)。
| 步骤 | 说明 |
|---|---|
| 1. 明文 | 设备密码 UTF-8 字符串(newPasswordV2 须先满足下文强度规则再加密) |
| 2. 因子 | pwdFactor = "op_api_" + appId + "_PWD_KEY_" + deviceId(appId 取请求 system.appId,须与派生时一致) |
| 3. Salt | salt = SHA-256(UTF-8(pwdFactor)) 的前 16 字节 |
| 4. PBKDF2 | PBKDF2WithHmacSHA256:password=deviceId,salt=上一步,迭代 1200 次,导出 256 位 → kdfRaw |
| 5. AES 密钥 | kdfBase64 = Base64(kdfRaw)(标准 Base64);aesKey = SHA-256(UTF-8(kdfBase64.toUpperCase())) → 32 字节 AES-256 密钥 |
| 6. Nonce | 加密时随机 12 字节(每次加密不同) |
| 7. 加密 | AES/GCM/NoPadding,GCM tag 128 bit;密文块 = AES-GCM(明文)(含 tag) |
| 8. 传参值 | Base64(nonce[12] ‖ 密文块),作为对应字段字符串 |
不使用 appSecret 参与 v2 密钥派生。
新密码明文(仅 newPasswordV2 加密前):长度 8~32;数字、大写字母、小写字母、特殊字符中至少两类;特殊字符为除 '、"、;、:、&、空格外的可见字符;不得含中文。
验密成功后改密:可将本次请求的 passwordV2 整段密文原样填入 oldPasswordV2(同一 appId、deviceId、同一明文)。
样例输入
{
"id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
"system": {
"ver": "1.0",
"appId": "lcdxxxxxxxxx",
"sign": "xjhCQBoJ9hRDsCjyDcHjtDNzRZ3ZJezcawsfWeiaoxU=",
"time": 1706511734,
"nonce": "f5a1ae2d-c09c-4d39-a744-83a5c2c653c2"
},
"params": {
"token": "<yourAccessToken>",
"deviceId": "TESTIPC000012345",
"passwordV2": "encrypted-password"
}
}
返回 data 字段说明
无业务字段。成功时 code 为 "0",data 为 {}。
样例输出
{
"id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
"result": {
"code": "0",
"msg": "Operation is successful",
"data": {}
}
}
错误码
本接口可能返回下列码。
网关
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
SN1001 | 签名异常 | 按 签名 核对 sign |
TK1002 | token 无效或过期 | 重新获取 token |
OP1002 | 缺少必填参数 | 补必填字段 |
OP1003 | 参数不合法 | 按本页参数表核对 |
OP1039 | 分钟级限流 | 等到下一分钟再试 |
OP1040 | 调用超限 | 降低频率 |
DV1007 | 设备离线或超时 | 等设备上线 |
DV20xx
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
DV1016 | 密码错误 | 核对密码 |
DV21xx
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
DV2101 | SDK 未就绪,需重新初始化 | 稍后重试 |
DV2102 | 设备侧网络断开 | 检查设备网络 |
DV2103 | 设备未连接平台,请求或事件无法送达 | 等设备上线 |
DV2104 | 设备侧超时 | 可重试查询类;写操作不要盲目重试 |
DV2105 | 设备侧内存或资源不足 | 稍后重试 |
DV2106 | 设备侧报文或协议格式错误 | 核对入参结构 |
DV2107 | 设备注册或登录失败 | 检查设备状态 |
DV2108 | 设备鉴权失败 | 核对设备密码 / 安全码 |
DV2109 | 用户名或密码错误 | 核对密码 |
DV2110 | 设备因认证失败次数过多已锁定 | 等待解锁 |
DV2111 | 请求签名、时间戳或防重放校验失败 | 核对签名与时间 |
DV2112 | WiFi 参数错误 | 核对 ssid / 密码 |
DV2113 | 设备身份不匹配(型号 / 序列号) | 核对序列号与型号 |
DV2114 | 物联网卡号非法 | 核对卡号 |
DV2115 | 请求方法或 URL 非法 | 核对路径 |
DV2116 | 设备不支持该能力或该请求 | 对照 list |
DV2117 | 设备侧属性、服务、事件或资源不存在 | 对照 list |
DV2118 | 设备侧参数或属性值非法 | 按取值修改 |
DV2119 | 设备侧未设置处理回调,无法响应 | 稍后重试或换接口 |
DV2120 | 设备侧属性只读 | 不要写 |
DV2121 | 已达数量或配置上限 | 先删再建 |
DV2122 | 目标已存在 | 改名或跳过 |
DV2123 | 不满足当前操作条件 | 见 msg;休眠设备先唤醒 |
DV2124 | 对讲忙或呼叫已挂断 | 稍后重试 |
DV2125 | 低电量拒绝操作 | 充电后再试 |
DV2126 | 升级失败 | 查 device.upgrade.process |
DV2127 | 设备内部错误 | 稍后重试 |
DV2128 | 设备未初始化 | 完成初始化 |
DV2129 | 设备已初始化或初始化失败 | 见 msg |
DV2130 | 子设备操作失败 | 核对子设备 |
DV2131 | 子设备不存在 | 核对子设备序列号 |
DV2132 | 存储介质异常 | 检查 SD / 硬盘 |
DV2133 | 名称冲突 | 改名 |
DV2134 | 设备侧权限不足 | 核对权限 |
DV2199 | 未收录的设备侧错误 | 读响应体 msg 字段 |