W76R(4G UHF RFID电瓶车门禁控制器)API
W76R(4G UHF RFID电瓶车门禁控制器)API
概述
W76R 用于电瓶车停车场、车棚和出入口门禁。设备读取车辆标签的 EPC 与芯片 TID,在本地授权库内完成判断,授权通过后输出约 1 秒开门信号。
| 项目 | 说明 |
|---|---|
| 设备序列号 | 以 W76R 开头,以设备标签为准 |
| 接口域名 | https://wdev.wmj.com.cn |
| 请求格式 | application/json |
| 本地标签容量 | 每台最多 4096 张 |
| 通行判定 | 本地完成,正常通行不依赖当次云端往返 |
| 防复制校验 | 同时校验只读 TID 与 EPC |
| 重复识别 | 同一 EPC 持续停留时,每 3 秒可重新触发 |
API 凭据请在微门禁开放平台申请。示例中的 {{wmjv2appid}}、{{wmjv2appsecret}} 和 {{device_sn}} 均为环境变量占位符,请勿把正式密钥写入客户端、日志或公开代码仓库。
接入流程
- 注册 W76R,将设备绑定到客户账号。
- 查询设备在线状态。
- 在天线读区内只放置一张待发标签,读取 EPC 和 TID。
- 可选:改写 EPC,再次读取并确认。
- 把 TID、EPC 和有效期写入需要放行的 W76R。
- 车辆进入读区后,设备本地判断权限并输出开门信号。
写标签和授权通行是两个独立操作。任意一台已注册、在线且 RFID 功能正常的 W76R 都可以作为写标签设备,请用
device_sn指定实际执行设备。标签需要通过几台 W76R,就必须向这几台设备分别下发同一条 TID 与 EPC 授权记录。
设备命令公共规则
本文所有设备命令均复用硬件云 APIv2 通用接口:
- 请求 URL:
https://wdev.wmj.com.cn/deviceApi/send - 请求方式:
POST - 请求格式:
application/json type固定为1- 命令名放在
data.cmd_type - 命令参数放在
data.info
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "命令名称",
"info": {}
}
}
平台同步等待设备响应,默认最长约 15 秒。顶层 code 表示硬件云处理结果;data.info.code 表示设备执行结果。两层 code 都为 0 才表示命令真正成功。
1.注册设备
请求URL
https://wdev.wmj.com.cn/deviceApi/register
请求方式
POST
请求格式
json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
app_id |
是 | string | APIv2 应用 ID |
app_secret |
是 | string | APIv2 应用密钥 |
device_sn |
是 | string | W76R 设备序列号 |
返回示例
{
"code": 0,
"msg": "注册成功"
}
2.查询设备在线状态
简要描述
查询设备是否连接硬件云。本接口只读取平台在线记录,不向设备发送命令。
请求URL
https://wdev.wmj.com.cn/deviceApi/getOnLine
请求方式
POST
请求格式
json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
返回示例
{
"code": 0,
"msg": "查询成功",
"data": {
"on_line": 1
}
}
| 返回字段 | 类型 | 说明 |
|---|---|---|
code |
number | 0 表示查询成功 |
data.on_line |
number | 1 在线,0 离线 |
3.查询设备信息
简要描述
查询型号、软硬件版本、4G 信号和门禁输入输出状态。设备必须在线。
请求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": "getdevinfo",
"info": {}
}
}
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "getdevinfo",
"info": {
"code": 0,
"msg": "OK",
"model": "W76R",
"hw": "1.0.0",
"sw": "0.1.11",
"fwVer": "0.1.11",
"rssi": -55,
"csq": 24,
"ber": 0,
"doorstate": 0,
"relayStatus": 0
}
}
}
| 返回字段 | 类型 | 说明 |
|---|---|---|
data.info.model |
string | 产品型号 |
data / info / hw |
string | 硬件版本 |
data.info.sw / fwVer |
string | 固件版本 |
data.info.rssi |
number | 4G 接收信号强度,单位 dBm |
data.info.csq |
number | 蜂窝网络信号质量 |
data.info.ber |
number | 蜂窝网络误码率指标 |
data.info.doorstate |
number | 门磁输入状态 |
data.info.relayStatus |
number | 开门输出状态 |
响应可能同时包含设备和 SIM 网络标识字段。客户系统应按最小必要原则保存,不应公开这些标识。
4.读取现场标签
简要描述
获取设备最近一次成功读取的 EPC、芯片 TID 和本地授权数量。该接口不会自动注册标签,也不会主动开门。发卡时请确保天线有效读区内只有一张待发标签。
请求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": "rfid_tag_get",
"info": {}
}
}
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_tag_get",
"info": {
"code": 0,
"msg": "OK",
"epc": "{{tag_epc}}",
"tid": "{{tag_tid}}",
"card_count": 1250,
"registry_ready": 1,
"registry_last_error": 0,
"storage_free": 40960,
"auto_authorize_feedback": 1,
"tid_read_ok": 17,
"tid_read_failed": 2,
"tid_retry_recovered": 6,
"tid_last_attempts": 1,
"tid_last_status": 0,
"tid_last_tag_error": 0
}
}
}
| 返回字段 | 类型 | 说明 |
|---|---|---|
data.info.epc |
string | 标签 EPC,十六进制字符串 |
data.info.tid |
string | 标签芯片只读 TID,十六进制字符串 |
data.info.card_count |
number | 当前设备本地授权记录数量 |
data.info.registry_ready |
number | 卡库可用状态,1 表示可正常读写 |
data.info.registry_last_error |
number | 最近一次卡库错误码,0 表示正常 |
data.info.storage_free |
number | 文件系统剩余字节数 |
data.info.auto_authorize_feedback |
number | 未知标签自动登记提示模式,1 表示已开启 |
data.info.tid_read_ok |
number | 本次启动后 TID 最终读取成功次数 |
data.info.tid_read_failed |
number | 本次启动后重试结束仍失败的次数 |
data.info.tid_retry_recovered |
number | 首次失败、后续重试成功的次数 |
data.info.tid_last_attempts |
number | 最近一次 TID 读取使用的尝试次数 |
data.info.tid_last_status |
number | 最近一次 TID 读取状态,0 表示成功 |
data.info.tid_last_tag_error |
number | 最近一次 M100 标签错误码,0 表示无错误 |
- 尚未成功读到标签时,
epc和tid为空字符串。 - EPC、TID 不带
0x、空格或分隔符。 - 返回的是最近一次成功读取结果,发卡软件应提示操作员核对当前标签。
- 固件
0.1.16起会在 M100 盘存功放切换稳定后读取 TID,并对瞬时未响应进行有界重试。固件0.1.17起,最终读取失败仅记录诊断,不再播放“标签读取失败”;排障时应结合tid_read_ok、tid_read_failed、tid_retry_recovered和最近状态字段判断。
5.改写标签 EPC(可选)
简要描述
按当前 EPC 选中读区内标签并改写 EPC 存储区。多数项目可直接使用标签出厂 EPC,无需改写。
改写 EPC 不会改变 TID,也不会自动授权。写入后必须回读确认,再用原 TID 与新 EPC 调用“新增或更新车辆标签”。
请求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": "rfid_tag_epc_write",
"info": {
"current_epc": "{{current_tag_epc}}",
"new_epc": "{{new_tag_epc}}",
"access_password": 0
}
}
}
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
data.info.current_epc |
是 | string | 当前 EPC,2~16 字节 |
data.info.new_epc |
是 | string | 新 EPC,必须与当前 EPC 等长 |
data.info.access_password |
否 | number | 标签访问密码的十进制无符号 32 位数,默认 0 |
EPC 必须为偶数字节长度的十六进制字符串。写入时读区内只能有一张目标标签。本接口不开放标签锁定、销毁或修改 TID。
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_tag_epc_write",
"info": {
"code": 0,
"msg": "OK"
}
}
}
6.新增或更新车辆标签
简要描述
以芯片 TID 为唯一键,在目标 W76R 本地新增或更新授权记录。相同请求可以安全重试。
请求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": "rfid_card_upsert",
"info": {
"card_id": "EV-000001",
"tid": "{{tag_tid}}",
"epc": "{{tag_epc}}",
"enabled": 1,
"valid_from": 0,
"valid_until": 0
}
}
}
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
data.info.card_id |
是 | string | 客户业务卡号,最长 19 个字符 |
data.info.tid |
是 | string | 标签 TID,最长 16 字节 |
data.info.epc |
是 | string | 标签当前 EPC,最长 16 字节 |
data.info.enabled |
否 | number / boolean | 1 / true 启用,0 / false 停用;默认启用 |
data.info.valid_from |
否 | number | 生效时间,Unix 秒;0 表示不限制 |
data.info.valid_until |
否 | number | 失效时间,Unix 秒;0 表示不限制 |
valid_from 和 valid_until 同时非零时,开始时间不得晚于结束时间。同一 EPC 不能绑定到另一个 TID。
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_card_upsert",
"info": {
"code": 0,
"msg": "OK"
}
}
}
多设备部署时,本地授权库不会自动互相复制。客户平台应保存“标签—设备”关系,并向所有允许通行的 W76R 分别下发授权。
7.分页查询车辆标签
简要描述
分页查询目标 W76R 的本地授权记录,用于发卡结果确认、设备迁移和数据核对。
请求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": "rfid_card_list",
"info": {
"offset": 0,
"limit": 5
}
}
}
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
data.info.offset |
否 | number | 起始位置,默认 0 |
data.info.limit |
否 | number | 返回数量,默认 5,最大 5 |
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_card_list",
"info": {
"code": 0,
"msg": "OK",
"total": 1,
"offset": 0,
"limit": 5,
"cards": [
{
"card_id": "EV-000001",
"tid": "{{tag_tid}}",
"epc": "{{tag_epc}}",
"enabled": 1,
"valid_from": 0,
"valid_until": 0
}
]
}
}
}
| 返回字段 | 类型 | 说明 |
|---|---|---|
data.info.total |
number | 本地授权记录总数 |
data.info.offset |
number | 本页起始位置 |
data.info.limit |
number | 本页请求数量 |
data.info.cards |
array | 授权记录数组 |
offset 或 limit 超出范围、不是整数时,设备返回 data.info.code=-1 和明确的参数错误说明,不会静默改用默认值。此行为要求固件 0.1.8 或更高版本。
8.启用或停用车辆标签
简要描述
按 TID 修改一条授权记录的启用状态,不删除车辆信息。
请求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": "rfid_card_enable",
"info": {
"tid": "{{tag_tid}}",
"enabled": 0
}
}
}
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
data.info.tid |
是 | string | 标签只读 TID |
data.info.enabled |
是 | number | 1 启用,0 停用 |
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_card_enable",
"info": {
"code": 0,
"msg": "OK"
}
}
}
9.删除车辆标签
简要描述
按 TID 删除目标 W76R 中的一条本地授权记录。删除后该标签在该设备上立即失去通行权限。
请求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": "rfid_card_delete",
"info": {
"tid": "{{tag_tid}}"
}
}
}
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "rfid_card_delete",
"info": {
"code": 0,
"msg": "OK"
}
}
}
10.设备声音设置
固件 0.1.12 起,设备默认音量提高为 80%,并支持后台持久设置。音量配置保存在设备文件系统中,重启或断网后仍然生效。
设置音量时发送 setting,volume_percent 为 0~100 的整数:
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "setting",
"info": {"volume_percent": 80}
}
}
成功响应中的 data.info.volume 是设备实际应用的百分比音量。查询当前值时发送:
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {"cmd_type": "get_play_status", "info": {}}
}
旧字段 volume=1~10 保留十档兼容语义;新系统应使用 volume_percent,避免 1~10 数值产生歧义。播放命令携带的音量只修改当前运行音量,不写入持久配置;设备重启后恢复后台持久设置值。
固件 0.1.14 起,自动登记业务可同时设置未知标签的本地提示方式:
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "setting",
"info": {"auto_authorize_feedback": 1}
}
}
auto_authorize_feedback=1 时,设备首次识别未知标签会播报“标签读取成功”,但仍不输出开门信号;业务平台收到 unknown_card 回调后建档并下发授权,标签再次进入识别区才按正常授权开门。设为 0 时恢复“未授权,禁止通行”。该设置持久保存,重启后继续生效。可用 rfid_tag_get 返回的 auto_authorize_feedback、registry_ready 和 registry_last_error 核对设置与本地卡库状态。
11.本地鉴权和开门逻辑
W76R 识别标签后依次检查:
- TID 是否存在于本地授权库;
- 当前 EPC 是否与该 TID 保存的 EPC 一致;
- 授权记录是否启用;
- 当前时间是否处于有效期;
- 授权库是否可以正常读取。
全部通过后,设备输出约 1 秒开门信号。未注册、已停用、未生效、已过期、TID/EPC 不一致或定时授权无法取得有效时间时,均不输出开门信号。
固件 0.1.10 起,语音在本地鉴权完成后播放,并与实际结果一致:
| 鉴权结果 | 本地语音 |
|---|---|
| 允许通行 | 验证成功,请通行 |
| 未登记卡 | 普通模式:未授权,禁止通行;自动登记提示模式:标签读取成功 |
| 卡片停用 | 卡片已停用,禁止通行 |
| 尚未生效 | 卡片尚未生效 |
| 已过期 | 卡片已过期 |
| TID/EPC 防复制校验失败 | 卡片安全校验失败 |
| 设备时间不可用 | 设备时间未同步,禁止通行 |
| TID 读取失败 | 标签读取失败,请重试 |
这些短语音随固件内置,启动时写入设备文件系统,断网时仍可播放,不需要现场实时合成。固件 0.1.9 起,每次完成本地鉴权后都会按下一节格式上报允许或拒绝结果。
12.通行记录回调
简要描述
W76R 完成本地 RFID 鉴权后,主动向硬件云发布 type=2、cmd_type=rfid_passage 消息。硬件云再以 HTTP POST 转发到开放平台应用配置的回调地址。
回调链路为:
W76R设备 → MQTT → 微门禁硬件云 → HTTP POST → 客户业务系统
设备不会直接请求客户业务系统。允许和拒绝事件都会回调;只有允许事件会输出开门信号。
回调方式
- 请求方式:
POST - 请求格式:
application/json - 回调地址:开放平台应用中配置的 Callback URL
- 版本要求:W76R 固件
0.1.9或更高版本
回调示例
{
"device_sn": "{{device_sn}}",
"type": 2,
"msg_id": 125,
"cmd_type": "rfid_passage",
"info": {
"event_uid": "{{device_sn}}-1787220000-84215-125-A1B2C3D4",
"event_time": 1787220000,
"card_id": "EV-000001",
"tag_tid": "{{tag_tid}}",
"tag_epc": "{{tag_epc}}",
"rssi": -48,
"pass_result": 1,
"auth_result": 0,
"reason": "granted",
"relay_output": 1
}
}
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
device_sn |
string | 产生事件的 W76R 序列号 |
type |
number | 主动上报固定为 2 |
msg_id |
number | 本次开机期间递增的事件序号 |
cmd_type |
string | 固定为 rfid_passage |
info.event_uid |
string | 事件唯一标识,业务系统应据此幂等去重 |
info.event_time |
number | 设备鉴权时间,Unix 秒;设备时间无效时可能为 0 |
info.card_id |
string | 授权通过时返回业务卡号;未匹配或拒绝时可能为空 |
info.tag_tid |
string | 标签芯片 TID,十六进制字符串 |
info.tag_epc |
string | 标签当前 EPC,十六进制字符串 |
info.rssi |
number | 标签被识别时的射频信号强度 |
info.pass_result |
number | 1 放行,2 拒绝 |
info.auth_result |
number | 设备本地鉴权结果码 |
info.reason |
string | 便于日志展示的鉴权原因 |
info.relay_output |
number | 1 已触发开门输出,0 未触发 |
鉴权结果
| auth_result | reason | 说明 |
|---|---|---|
0 |
granted |
授权通过 |
-1 |
unknown_card |
TID 未注册或授权库不可用 |
-2 |
disabled |
授权已停用 |
-3 |
not_yet_valid |
尚未到生效时间 |
-4 |
expired |
授权已过期 |
-5 |
tid_epc_mismatch |
TID 与登记 EPC 不一致,疑似复制标签 |
-6 |
time_unavailable |
定时授权无法取得有效设备时间 |
业务系统处理要求
- 收到事件后应尽快返回 HTTP 2xx,不要在回调请求中执行耗时任务。
- 使用
device_sn + event_uid建立唯一约束;重复事件直接返回成功。 - 以
pass_result判断是否放行,不要以语音提示、card_id是否为空代替。 event_time=0时可使用业务系统接收时间,但应保留原始值用于排查。- 本地鉴权和开门不依赖回调。设备离线时仍可本地通行,但当前版本不会持久化补传离线期间的通行事件。
13.安全和多设备部署
- TID 通常由标签芯片提供且不可改写,EPC 可以改写。W76R 同时校验 TID 和 EPC,降低只复制 EPC 获得权限的风险。
- EPC 改写后,仍保存旧 EPC 的设备会拒绝通行,必须重新下发授权。
- RFID 管理命令应通过本文 HTTPS 接口发送,不支持客户直接向设备发送明文管理命令。
- 发卡区应限制射频覆盖范围,并确保一次只有一张标签。
- 客户平台应保存原始 TID、当前 EPC、业务卡号、授权设备和有效期,设备更换或恢复时据此重新下发。
- 3000 张以上标签建议使用后台任务队列逐台、逐条下发,保存每条命令的双层返回,并在完成后分页核对总数与抽样数据。
14.错误处理和常见问题
平台层常见返回
| code | 说明 | 建议处理 |
|---|---|---|
0 |
平台处理成功 | 设备命令继续检查 data.info.code |
1000 |
无权操作设备 | 先注册设备并核对账号归属 |
1001 |
参数错误、发布失败或等待超时 | 检查请求;超时前不要重复并发下发 |
1002 |
设备不在线 | 等待设备上线后重试 |
1003 |
设备尚未激活或不存在 | 确认设备已上电联网 |
设备命令失败时,以 data.info.code 和 data.info.msg 为准。管理命令返回 -403 表示未通过受保护通道,请使用本文的 /deviceApi/send,不要绕过硬件云协议。
写入 EPC 成功后为什么不能开门?
写入 EPC 不等于授权。请先回读确认,再把原 TID、新 EPC 写入每台需要放行的 W76R。
一台 W76R 写的标签能否在另一台使用?
可以。写标签设备不限制通行设备,但另一台设备必须保存相同 TID 与 EPC 的有效授权。
设备离线时车辆还能通行吗?
已保存且仍有效的授权可在本地判断。新增、修改、停用或删除授权需要设备重新在线后下发。
读标签接口为什么返回空字符串?
设备还没有成功读取标签,或标签不在有效读区。请调整距离和方向,并确保读区内只有目标标签。
15.解绑设备
简要描述
解除 W76R 与当前账号的绑定。解绑不会清空本地 RFID 授权库,不能用解绑代替删除标签。
请求URL
https://wdev.wmj.com.cn/deviceApi/logout
请求方式
POST
请求格式
json
参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
返回示例
{
"code": 0,
"msg": "解绑成功"
}
更新日志
| 日期 | 内容 |
|---|---|
| 2026-09-02 | 固件 0.1.17 将标签瞬时离场导致的最终读取失败改为静默,仅保留诊断计数和错误码 |
| 2026-09-02 | 固件 0.1.16 优化 M100 盘存后 TID 读取时序和有界重试,并增加 TID 读取诊断字段 |
| 2026-09-02 | 固件 0.1.14 增加自动登记提示模式、卡库状态诊断与计数自愈,并保证 4096 条本地授权库具有可靠写入余量 |
| 2026-08-21 | 固件 0.1.12 提高默认音量并增加后台百分比音量查询、持久设置与重启恢复 |
| 2026-08-21 | 固件 0.1.11 增加 MQTT QoS 1 PUBACK 确认和有界重试,减少瞬时网络波动造成的通行事件丢失 |
| 2026-08-21 | 固件 0.1.10 起按放行和拒绝原因播放不同的离线缓存语音 |
| 2026-08-21 | 增加 type=2 的 rfid_passage 通行记录回调,说明硬件云转发链路、字段、鉴权结果和幂等要求 |
| 2026-08-20 | 首次公开 W76R 注册、在线查询、RFID 发卡、标签管理、本地鉴权和多设备部署接口;分页参数错误改为明确返回 |
最后编辑:极客师傅 更新时间:2026-09-14 10:34