W76S(数智扫码闸机控制器)API

概述

W76S 是基于 4G 网络的无屏扫码闸机控制器,设备序列号以 W76S 开头。设备使用 UART3 连接二维码读头,默认参数为 9600 8N1。扫码后先在本地播放核验提示,再异步请求已配置的 HTTPS 核验服务;仅在核验成功时驱动继电器。

  • API 基础地址:https://wdev.wmj.com.cn
  • 设备命令地址:POST https://wdev.wmj.com.cn/deviceApi/send
  • UART3 扫码接收和直连核验已在 1.0.2 基线上完成联调
  • 本文标注的严格参数校验和敏感信息保护要求固件 1.0.3 或以上;部署后应通过 getdevinfo 回读版本
  • 平台 code=0 仅表示请求已送达;设备命令还必须检查 data.info.code

配置变更后应调用 getdevinfo 回读。不要通过反复发送开门或播放命令探测在线状态,应使用 getOnLine

点击下面的序号展开
1.注册设备

将设备绑定到开发者账号。注册成功后才能调用云端设备接口。

请求URL

POST https://wdev.wmj.com.cn/deviceApi/register

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}
参数 必选 类型 说明
app_id string 开发者 app_id
app_secret string 开发者 app_secret
device_sn string W76S 设备序列号
{
  "code": 0,
  "msg": "注册成功"
}
2.查询在线状态

请求URL

POST https://wdev.wmj.com.cn/deviceApi/getOnLine

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}
{
  "code": 0,
  "data": {
    "online": 1
  },
  "msg": "查询成功"
}

online=1 表示在线,online=0 表示离线。部分旧版服务可能返回同义字段 on_line

3.远程开门

请求URL

POST https://wdev.wmj.com.cn/deviceApi/send

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "open",
    "info": {
      "sn": "{{device_sn}}",
      "relay_ms": 1000,
      "tts": "核验成功,祝您游玩愉快",
      "volume": 6
    }
  }
}
参数 必选 类型 范围/说明
data.info object 开门参数对象
data.info.sn string 传入时必须与目标设备序列号一致
data.info.relay_ms number 20030000 ms,省略时使用设备配置
data.info.tts string 1~256 UTF-8 字节
data.info.volume number 07
{
  "code": 0,
  "data": {
    "device_sn": "{{device_sn}}",
    "cmd_type": "open",
    "info": {
      "sn": "{{device_sn}}",
      "relay_ms": 1000,
      "code": 0,
      "msg": ""
    }
  }
}

设备处于常开模式时只播放提示,不重复执行继电器脉冲。

4.获取设备信息
{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "getdevinfo",
    "info": {}
  }
}

主要返回字段

字段 类型 说明
version string 固件版本
project string 固件项目标识
imei / iccid string 蜂窝模组标识
rssi number 蜂窝网络信号值
door_state number 门磁输入状态
nonc_type number 0=常闭模式,1=常开模式
card_sum number 本地卡片数量
qrcode_reader_power number 读头供电:0=关,1=开
qrcode_reader_baud number UART3 波特率
qrcode_reader_frame_timeout number 静默成帧时间,单位 ms
qrcode_reader_max_length number 单帧最大字节数
qrcode_reader_dedupe_seconds number 普通二维码相同内容抑制时间;管理员码不受限制
qrcode_reader_debug number 原文调试日志开关,生产应为 0
scan_api_mode string directmqtt
scan_api_timeout_ms number 直连核验超时
code / msg number/string 设备业务结果

离线二维码密钥和偏移量不会返回。业务日志如需保存本接口响应,应对 IMEI、ICCID 和核验地址进行脱敏。

5.配置二维码读头与核验链路

命令类型固定为 setting。只需传入要修改的字段;未传字段保持不变。

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "setting",
    "info": {
      "qrcode_reader_power": 1,
      "qrcode_reader_baud": 9600,
      "qrcode_reader_frame_timeout": 200,
      "qrcode_reader_max_length": 512,
      "qrcode_reader_dedupe_seconds": 20,
      "qrcode_reader_debug": 0,
      "scan_api_mode": "direct",
      "scan_api_url": "https://example.com/api/device/scan",
      "scan_api_timeout_ms": 40000
    }
  }
}
字段 类型 允许值
qrcode_reader_power number 01
qrcode_reader_baud number 9600192003840057600115200
qrcode_reader_frame_timeout number 502000 ms
qrcode_reader_max_length number 82048 字节
qrcode_reader_dedupe_seconds number 0300 秒,默认 20 秒;仅作用于普通二维码,管理员码不受限制
qrcode_reader_debug number 01;生产必须为 0
scan_api_mode string direct=直连核验,mqtt=兼容上报
scan_api_url string HTTPS 地址,最长 256 字节
scan_api_timeout_ms number 500060000 ms

读头供电或波特率变化后设备延迟约 3 秒重启。收到成功响应后,应等待重连并通过 getdevinfo 回读。

6.扫码核验回调协议

scan_api_mode=direct 时,设备向 scan_api_url 发起 HTTPS POST,并在 X-Device-Token 请求头携带设备访问令牌。核验服务应校验设备身份、二维码时效和业务余额,并保证同一请求的扣费幂等。

请求体

{
  "device_sn": "{{device_sn}}",
  "qr_code": "{{qrcode_content}}"
}

成功放行响应

{
  "code": 0,
  "action": "open",
  "scan_id": "{{scan_id}}",
  "relay_ms": 1000,
  "message": "核验成功,已扣除1积分,祝您游玩愉快",
  "volume": 6
}

只有 HTTP 200、合法 JSON、code=0action=open 同时满足时才开闸。relay_ms 有效范围为 20030000 ms,message 最长 256 UTF-8 字节,volume07。任何超时、格式错误或扣费结果不确定都必须保持闸机关闭。

失败时可返回非零 code 和面向游客的 message

{
  "code": 1002,
  "action": "deny",
  "message": "抱歉,您的积分不足"
}

设备不会在直连失败后自动改走 MQTT,以免同一会员码被两条链路重复扣费。

7.设置继电器与常开模式

设置继电器脉冲时长

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "set_relay",
    "info": {
      "relay1": 1000
    }
  }
}

relay1 必须为数字,范围 100030000 ms。

设置常开/常闭

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "set_nonc",
    "info": {
      "type": 0
    }
  }
}

type=0 为常闭,type=1 为常开。设置会立即改变继电器状态并持久保存。

8.语音播放与提示配置

立即播放TTS

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "play_tts",
    "info": {
      "tts": "设备维护中,请稍候",
      "volume": 6
    }
  }
}

tts 为 1~256 UTF-8 字节,volume07。命令成功表示设备接受播放请求,不代表扬声器已完整播放结束。

配置默认提示

cmd_type 改为 set_audioinfo 可包含 pass_ttsno_pass_ttslaunch_ttsvolume。文本长度为 1~256 UTF-8 字节;传单个空格可清除对应自定义值。

9.卡片管理

支持 card_addcard_editcard_delcard_findcard_sumcard_clr

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "card_add",
    "info": {
      "card_id": "27598FAF",
      "start_time": 0,
      "end_time": 2147483647
    }
  }
}
字段 说明
card_id 8 位十六进制卡号;建议使用大写
start_time 生效 Unix 时间戳,默认 0
end_time 失效 Unix 时间戳,默认 2147483647

card_delcard_find 需要 card_idcard_sumcard_clrinfo 可为空对象。清空操作不可撤销。

10.批量同步卡片

synccards 用于分批全量同步。第一批会清空设备现有卡片,业务端必须固定本次同步的 total_batches 并严格按 batch_num 从 1 递增;失败时不要跳过批次。

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "synccards",
    "info": {
      "batch_num": 1,
      "total_batches": 1,
      "cards": [
        {
          "card_id": "27598FAF",
          "start_time": 0,
          "end_time": 2147483647
        }
      ]
    }
  }
}

响应包含 batch_successbatch_failedtotal_processedprogressis_completedtotal_cards_in_device。只有最后一批返回 is_completed=true 才表示本次同步完成。

11.设备发卡与通知
{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "device_add_card",
    "info": {
      "state": 1,
      "start_time": 0,
      "end_time": 2147483647
    }
  }
}

state=1 进入发卡模式,state=0 退出。进入后应在业务完成时主动退出。

发卡成功后,平台向开发者回调地址推送:

{
  "cmd_type": "add_card_notify",
  "device_sn": "{{device_sn}}",
  "info": {
    "card_id": "27598FAF",
    "start_time": 0,
    "end_time": 2147483647
  }
}
12.门状态与开门通知

门磁变化时平台向开发者回调地址推送:

{
  "cmd_type": "door_state_notify",
  "device_sn": "{{device_sn}}",
  "info": {
    "state": 0
  }
}

state=0state=1 分别对应设备检测到的两种门磁电平;安装后应根据现场接线确认开门、关门语义。

本地认证或云端开门成功后推送 open_notify

{
  "cmd_type": "open_notify",
  "device_sn": "{{device_sn}}",
  "info": {
    "type": "member_qrcode",
    "data": "{{scan_id}}"
  }
}

常见 type 包括 open_cmdcardtemporary_passwdbluetoothmember_qrcodeoffline_admin_qrcode。业务系统应按敏感数据处理 info.data,不得直接写入公开日志。

13.管理员离线二维码

管理员离线二维码用于工作人员在断网时扫码通行。管理平台为每个闸机配置独立密钥,生成带编号、生效时间、失效时间和签名的二维码;设备本地完成解密、签名、时间和废除列表校验。固件 1.0.3 或以上不存在通用默认密钥,只有显式配置后才启用;Air724 设备应升级至 1.0.7 或以上。管理员码走本地优先通道,不播放云端核验等待语音,校验成功后立即播放放行语音并开门;不受普通二维码防重扫时间或会员云核验忙状态限制。

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "set_offline_qrcode",
    "info": {
      "header": "{{offline_qrcode_header}}",
      "sm4_key": "{{16_byte_secret_key}}",
      "sm4_offset": "{{16_byte_secret_iv}}"
    }
  }
}

header 为 1~64 字节,sm4_keysm4_offset 必须分别为 16 字节。三个值应由管理平台随机分配、加密保存,禁止使用示例值投入生产。重新配置密钥会使以前生成的管理员二维码全部失效。设备不会通过 getdevinfo 回传密钥或偏移量。

废除指定管理员二维码:

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "revoke_offline_qrcode",
    "info": {
      "id": "A1B2C3D4E5F6",
      "expire_at": 1798761600
    }
  }
}

id 为 12 位十六进制编号,expire_at 为该二维码的 Unix 失效时间。设备只保留尚未自然过期的废除记录,最多 64 条;达到上限时应更换密钥。废除必须以设备返回业务码 0 为生效依据;设备离线时管理平台应显示“废除待同步”,不能把平台记录更新当成设备已废除。

管理员码校验和开门均在设备本地完成,不依赖联网。设备可异步向所配置的管理平台记录校验成功、失败原因和二维码编号;日志上报不阻塞开门,且不包含二维码原文、密钥或签名。

14.蓝牙临时密码开门

先调用 POST https://wdev.wmj.com.cn/deviceApi/TPassword 获取一次性临时密码:

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}

通过 BLE 向写特性 FEE1 写入:

{
  "cmd_type": "ble_pwd_open_lock",
  "info": {
    "data": "12345678"
  }
}

设备通过通知特性 FEE2 返回执行结果。临时密码带滚码状态,成功使用后不可重复使用。

15.重启与恢复出厂设置

远程重启使用 restart

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}",
  "type": 1,
  "data": {
    "cmd_type": "restart",
    "info": {}
  }
}

reset 会清空本地卡片和设备配置后重启,属于不可撤销操作。调用前必须由业务系统进行二次确认,并先保存需要恢复的配置。

16.兼容性与常见错误
  • W76S 没有显示屏和摄像头,不支持 W766 的 set_qrcode 或屏幕二维码字段。
  • UART3 已用于二维码读头,不支持 W766 键盘配置字段。
  • W76S 无键盘,不支持 pwd_addpwd_editpwd_delpwd_findpwd_sumpwd_clr
  • test_card_addsm4_encrypt 是已禁用的遗留调试命令,固件 1.0.3 或以上返回设备业务码 2
  • 平台返回成功但配置未变化:检查 data.info.code,等待设备重连后用 getdevinfo 回读。
  • 设备离线:调用 getOnLine,不要用开门、重启或语音命令探活。
  • 扫码提示后未开门:检查核验服务 HTTP 状态、响应 JSON、codeaction 和扣费幂等日志。
  • HTTP 或 MQTT 应答只表示命令链路完成;真实开闸仍应结合门磁、继电器和现场行为验证。
17.解绑设备

解除设备与当前开发者账号的绑定。解绑后该账号不能再控制设备。

请求URL

POST https://wdev.wmj.com.cn/deviceApi/logout

{
  "app_id": "{{wmjv2appid}}",
  "app_secret": "{{wmjv2appsecret}}",
  "device_sn": "{{device_sn}}"
}
{
  "code": 0,
  "msg": "解绑成功"
}
更新日志
日期 内容
2026-08-31 W76S 1.0.7:管理员二维码改为本地优先放行,校验成功立即语音提示并开门,不受普通二维码防重扫时间和会员云核验忙状态限制。
2026-08-31 管理员二维码配置、密钥更换和废除改为平台自动同步;设备离线时保留任务,恢复在线后自动生效,无需人工重试。
2026-08-31 普通二维码去重窗口改为可配置且默认 20 秒;管理员二维码不参与去重,并增加设备端 100 条持久化事件队列,断网可开门、联网后按事件编号补传。
2026-08-31 修正 Air724 管理员离线二维码签名校验兼容性;增加不阻塞开门的本地校验结果日志。
2026-08-31 管理员离线二维码增加独立编号、起止有效期、签名校验和按编号废除;明确设备离线时废除为待同步。
2026-08-31 首次发布 W76S 独立接口文档;补充扫码核验、二维码读头配置、开闸、卡片管理、事件通知、离线码安全边界及无屏硬件差异。
作者:极客师傅  创建时间:2026-08-31 10:58
最后编辑:极客师傅  更新时间:2026-09-09 10:08