W76C(4G控制器)API
W76C 开发者API文档
概述
本文档描述了 W76C 智能门禁控制系统的云端 API 接口,开发者可通过这些接口实现设备注册、远程开门、设备控制等功能。
API基础地址: https://wdev.wmj.com.cn
硬件与当前固件版本
| 硬件版本 | 固件系列 | 当前说明 |
|---|---|---|
| 1.0.0 | 0.0.x | 旧硬件,不能使用 102.x.x 固件。 |
| 1.0.2 | 102.x.x | 当前量产版本为 102.0.7;102.0.6 已撤下。开门鸣叫约 1 秒,上电静音。 |
两种硬件的固件不兼容,升级前必须确认设备硬件版本,不可仅按版本号大小选择固件。
错误码说明
| 错误码 | 说明 |
|---|---|
| 0 | 成功 |
| 1001 | 网络超时 |
| 1002 | 设备不在线 |
| 1003 | 参数错误 |
| 1004 | 设备未注册 |
| 1005 | 设备已注册 |
| 1006 | 认证失败 |
点击下面的序号展开
1.注册设备
- 将设备和appid、appsecret绑定
请求URL
https://wdev.wmj.com.cn/deviceApi/register
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567"
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
返回示例
{
"code": 0,
"msg": "注册成功"
}
{
"code": 1005,
"msg": "设备已注册"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 0成功其他异常 |
| msg | string | 描述 |
备注
- 更多返回错误代码请看首页的错误代码描述
2.开门
- 触发继电器开门
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567",
"type": 1,
"data": {
"cmd_type": "open",
"info": {
"delay": 1200
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 命令类型:open |
| data.info.sn | 否 | string | 一旦传入sn,设备将校验传入sn是否与设备本身sn一致,校验成功才能开门 |
| data.info.delay | 否 | int | 延迟上锁时间(毫秒) |
返回示例
{
"code": 0,
"data": {
"device_sn": "W76C1234567",
"msg_id": 172,
"type": 1,
"cmd": "",
"app_id": "",
"cmd_type": "open",
"info": {
"code": 0,
"msg": "OK"
}
}
}
{
"code": 1002,
"msg": "设备不在线"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 调用接口错误码 0成功其他异常 |
| data.info.code | int | 业务错误码,0成功其他异常 |
| data.info.msg | string | 业务错误信息 |
3.重启设备
- 远程重启设备
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567",
"data": {
"cmd_type": "restart",
"info": {}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 命令类型:restart |
| data.info | 是 | object | 暂未使用 |
返回示例
{
"code": 0,
"data": {
"cmd_type": "restart",
"info": {
"code": 0,
"msg": "OK"
}
}
}
{
"code": 1001,
"msg": "网络超时"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 调用接口错误码 0成功其他异常 |
| data.info.code | int | 业务错误码,0成功其他异常 |
| data.info.msg | string | 业务错误信息 |
4.获取设备信息
- 获取设备详细信息
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567",
"data": {
"cmd_type": "getdevinfo",
"info": {}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 命令类型:getdevinfo |
| data.info | 是 | object | 暂未使用 |
返回示例
{
"code": 0,
"data": {
"device_sn": "W76C1234567",
"msg_id": 175,
"type": 1,
"cmd_type": "getdevinfo",
"info": {
"sn": "W76C1234567",
"model": "W76C",
"hw": "1.0.0",
"sw": "0.0.43",
"fwVer": "0.0.43",
"rssi": -65,
"doorstate": 0,
"nonc": 0,
"relayStatus": 0,
"ext_button_enabled": 1,
"code": 0,
"msg": "OK"
}
}
}
{
"code": 1002,
"msg": "设备不在线"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 调用接口错误码 0成功其他异常 |
| data.info.sn | string | 设备序列号 |
| data.info.model | string | 设备型号 |
info 中的 hw |
string | 硬件版本 |
| data.info.sw | string | 软件版本 |
| data.info.fwVer | string | 固件版本 |
| data.info.rssi | int | 信号强度(dBm) |
| data.info.doorstate | int | 门状态:0=关闭,1=打开 |
| data.info.nonc | int | 常开常闭模式:0=常闭,1=常开 |
| data.info.relayStatus | int | 继电器持久模式:0=常闭,1=常开 |
| data.info.ext_button_enabled | int | 开门按钮:0=停用,1=启用 |
| data.info.code | int | 业务错误码,0成功其他异常 |
| data.info.msg | string | 业务错误信息 |
5.获取门状态
- 获取当前门磁状态
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567",
"data": {
"cmd_type": "getdoorstate",
"info": {}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 命令类型:getdoorstate |
| data.info | 是 | object | 暂未使用 |
返回示例
{
"code": 0,
"data": {
"device_sn": "W76C1234567",
"msg_id": 176,
"type": 1,
"cmd_type": "getdoorstate",
"info": {
"doorstate": 0,
"code": 0,
"msg": "OK"
}
}
}
{
"code": 1002,
"msg": "设备不在线"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 调用接口错误码 0成功其他异常 |
| data.info.doorstate | int | 门状态:0=关闭,1=打开 |
| data.info.code | int | 业务错误码,0成功其他异常 |
| data.info.msg | string | 业务错误信息 |
6.设置常开常闭模式
- 控制继电器常开或常闭模式
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567",
"data": {
"cmd_type": "set_nonc",
"info": {
"type": 1
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 命令类型:set_nonc |
| data.info.type | 是 | int | 模式设置:0=常闭模式,1=常开模式 |
返回示例
{
"code": 0,
"data": {
"device_sn": "W76C1234567",
"msg_id": 181,
"type": 1,
"cmd_type": "set_nonc",
"info": {
"nonc": 1,
"code": 0,
"msg": "OK"
}
}
}
{
"code": 1001,
"msg": "网络超时"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 调用接口错误码 0成功其他异常 |
| data.info.nonc | int | 当前模式:0=常闭,1=常开 |
| data.info.code | int | 业务错误码,0成功其他异常 |
| data.info.msg | string | 业务错误信息 |
7.设置开门按钮
- 启用或停用开门按钮
- 该配置持久保存,设备重启或断电后仍然有效
- W76C 固件
0.0.43起提供;以getdevinfo回读到目标版本及ext_button_enabled字段为可用依据
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_ext_button",
"info": {
"enable": 0
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户 app_id |
| app_secret | 是 | string | 用户 app_secret |
| device_sn | 是 | string | 设备序列号 |
| data.cmd_type | 是 | string | 固定为 set_ext_button |
| data.info.enable | 是 | int | 0=停用,1=启用;只接受数字 0 或 1 |
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"type": 1,
"cmd_type": "set_ext_button",
"info": {
"code": 0,
"msg": "OK"
}
}
}
行为说明
- 默认值为
1。 enable=0后,开门按钮的按下、单击、长按和释放均不驱动继电器,也不上报ext_button事件。enable=1后,恢复开门按钮控制和事件上报。- 该配置不影响板载按钮,不主动改变设置命令执行前的继电器状态。
- 设备仅在配置成功持久化后返回成功;重复设置当前值不会重复写入 Flash。
8.OTA固件升级
适用于 W76C 硬件 1.0.2,目标量产版本 102.0.7。102.0.6 已撤下,请使用 102.0.7 对应的 OTA 文件或 USB 整包。
仅升级当前版本低于 102.0.7 的同硬件设备。旧硬件应使用其对应的 0.0.x 固件,不能跨硬件升级。
请求URL
POST https://wdev.wmj.com.cn/deviceApi/send
请求示例
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_ota",
"info": {
"hw_ver": "1.0.2",
"sw_ver": "102.0.7",
"url": "http://fm.wmj.com.cn/ota/W76C/HW1.0.2/W76C_HW1.0.2_V102.0.7_ota.bin"
}
}
}
| 参数 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 开发者 app_id |
| app_secret | 是 | string | 开发者 app_secret |
| device_sn | 是 | string | 已确认硬件版本的设备序列号 |
| type | 是 | number | 固定为 1 |
| data.cmd_type | 是 | string | 固定为 set_ota |
info 中的 hw_ver |
见下文 | string | 硬件版本,固定为 1.0.2 |
| data.info.sw_ver | 见下文 | string | 本次目标版本固定为 102.0.7,须高于设备当前 102.x.x 版本 |
| data.info.url | 是 | string | 与硬件及目标版本匹配的上述固件下载地址 |
版本兼容说明:设备当前为 102.0.2 至 102.0.6 时,必须保留示例中的 hw_ver 和 sw_ver。设备升级至 102.0.7 后,后续升级兼容仅提供 url,目标版本从下载地址中识别;若提供硬件或版本字段,仍须与实际目标一致。两种方式均要求使用硬件专用下载地址,且目标版本高于当前版本。
返回示例
{"code":0,"data":{"cmd_type":"set_ota","info":{"code":0,"msg":"OK"}}}
code 为接口结果,data.info.code 为设备命令结果。命令受理不代表升级完成;升级重启后须重新调用 getdevinfo,确认型号 W76C、硬件 1.0.2、固件版本已达到目标,并检查所需功能。
注意事项
- 当前版本已达到或高于目标版本时,不重复升级或降级。
- 保持供电和网络稳定,安排在设备空闲时升级;升级期间设备会重启。
- 此文件为 OTA 固件,不用于 USB 整包烧录。
- 使用对应版本发布时提供的文件大小和 SHA-256 核验文件,不使用已撤下的 OTA 文件。
- 102.0.7 OTA 大小:669796 字节;SHA-256:
218E1754F8AFE6120885B0630C991F48EF896DFE056EAB0A457723B10F9D0FCA。
9.回调通知
通知数据将发送到用户注册的回调地址上
a. 门状态变化通知
当门磁状态发生变化时,设备会主动上报:
{
"cmd_type": "door_state_notify",
"device_sn": "W76Cxxxxxxxx",
"info": {
"doorstate": 0
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| cmd_type | string | door_state_notify:门状态变化通知 |
| device_sn | string | 设备序列号 |
| info.doorstate | int | 门状态 0:关门状态 1:开门状态 |
b. 串口数据通知
当设备收到串口数据时,会上报到回调地址:
{
"cmd_type": "uart_data",
"device_sn": "W76Cxxxxxxxx",
"info": {
"data": "AABBCCDDEEFF"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| cmd_type | string | uart_data:串口数据通知 |
| device_sn | string | 设备序列号 |
| info.data | string | 串口数据(HEX字符串格式) |
c. 设备上线通知
当设备连接到服务器时,会发送上线通知:
{
"cmd_type": "online",
"device_sn": "W76Cxxxxxxxx",
"info": {
"model": "W76C",
"sw": "0.0.4",
"rssi": -65
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| cmd_type | string | online:设备上线通知 |
| device_sn | string | 设备序列号 |
| info.model | string | 设备型号 |
| info.sw | string | 软件版本 |
| info.rssi | int | 信号强度(dBm) |
d. 开门按钮通知
开门按钮启用且经过防抖确认按下后,设备以 type=2 主动上报一次:
{
"device_sn": "{{device_sn}}",
"type": 2,
"cmd_type": "ext_button",
"info": {
"event": "press",
"state": 1,
"uptime_ms": 123456,
"event_uid": "{{device_sn}}-2-123456-1"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| type | int | 固定为 2,表示设备主动事件 |
| cmd_type | string | 固定为 ext_button |
| info.event | string | 固定为 press |
| info.state | int | 固定为 1 |
| info.uptime_ms | int | 本次启动后的运行毫秒数 |
| info.event_uid | string | 事件唯一标识,业务服务可用于幂等去重 |
- 每次物理按压只上报一次,长按和释放不重复上报。
ext_button_enabled=0时不执行开门动作,也不上报该事件。- MQTT 离线时无法即时回调,但设备会将失败原因写入持久诊断日志。
10.查询在线状态
- 查询设备是否联网在线
请求URL
https://wdev.wmj.com.cn/deviceApi/getOnLine
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567"
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
返回示例
{
"code": 0,
"data": {
"on_line": 1
},
"msg": "查询成功"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 0成功其他异常 |
| data.on_line | int | 在线状态:0=离线,1=在线 |
| msg | string | 描述信息 |
11.解绑设备
- 解绑设备,将设备和appid解除绑定关系
请求URL
https://wdev.wmj.com.cn/deviceApi/logout
请求方式
- POST
请求格式
- json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "W76C1234567"
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| app_id | 是 | string | 用户app_id |
| app_secret | 是 | string | 用户app_secret |
| device_sn | 是 | string | 设备序列号 |
返回示例
{
"code": 0,
"msg": "解绑成功"
}
{
"code": 1004,
"msg": "设备未注册"
}
返回参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 0成功其他异常 |
| msg | string | 描述信息 |
+++
附录
设备序列号规则
W76C 设备序列号格式为:W76C + 7位数字
示例:W76C1234567
支持的命令类型汇总
| cmd_type | 说明 |
|---|---|
open |
开门/触发继电器 |
restart |
重启设备 |
getdevinfo |
获取设备信息 |
getdoorstate |
获取门状态 |
set_nonc |
设置常开/常闭模式 |
set_ext_button |
启用或停用开门按钮 |
set_ota |
OTA固件升级,请勿随意操作 |
回调通知类型汇总
| cmd_type | 说明 |
|---|---|
door_state_notify |
门状态变化通知 |
uart_data |
串口数据通知 |
online |
设备上线通知 |
ext_button |
开门按钮按下通知(type=2) |
更新日志
| 日期 | 内容 |
|---|---|
| 2026-09-10 | 【W76C HW1.0.2 / 102.0.7】发布量产固件,修复 OTA 升级兼容性;后续升级兼容仅传下载地址,保留硬件与目标版本校验。撤下 102.0.6 量产入口。 |
| 2026-09-10 | 【W76C HW1.0.2 / 102.0.6 撤下说明】先撤下该版本 OTA 文件及下载示例,随后由 102.0.7 替代量产烧录版本。请勿继续使用已撤下版本。 |
| 2026-09-10 | 【W76C HW1.0.2 / 102.0.6】发布新硬件量产固件及 OTA(OTA 随后撤下,见上条);改善启动、重启后联网和诊断记录稳定性;保留开门鸣叫约 1 秒、上电静音。旧硬件 0.0.x 固件保持独立。 |
| 2026-08-22 | 【W76C 0.0.43】增加开门按钮 type=2 事件;增加 set_ext_button 启停配置和 getdevinfo.ext_button_enabled 状态回读;配置持久保存,停用后不执行开门动作或事件上报。 |
| 2025-12-16 | 初始版本。 |
作者:李汪 创建时间:2025-12-15 14:26
最后编辑:极客师傅 更新时间:2026-09-11 17:30
最后编辑:极客师傅 更新时间:2026-09-11 17:30