版本明细
日期 | 版本 | 说明 | 作者 |
---|---|---|---|
2019-08-05 | v0.1.0 | 初稿,待评审 | 林惠武 |
2019-08-13 | v0.2.0 | 1. 初始化流程完善 2. 新增设备恢复出厂设置协议 3. 新增获取服务端时间协议 4. 新增服务端通用错误码 5. 业务心跳协议修改 6. 其他细节描述完善 |
林惠武、梁贤森、李仙平 |
2019-08-26 | v0.3.0 | 1. 优化设备信息参数命名规范 2. 去掉固件升级协议 |
林惠武、梁贤森 |
2019-12-25 | v0.4.0 | 1. 新增门禁、访客相关协议; 2. 完善设置客户端选项协议; |
林惠武 |
2020-02-12 | v0.4.1 | 1. 新增常开时间段门禁属性; 2. 【更新门禁组】参数命名规范优化; 3. 【更新人员门禁权限】参数命名规范优化; 4. 【删除门禁时间段】参数命名规范优化; 5. 【删除门禁组】参数命名规范优化; 6. 【删除节假日】参数命名规范优化; 7. 【删除访客信息】参数命名规范优化; |
林惠武 |
2020-02-14 | v0.4.2 | 统一best系列命名规范 1. 【设备信息】命名规范整改; 2. 【上传设备特性】命名规范整改; 3. 【设置客户端的选项】命名规范整改 4. 【获取客户端的选项】命名规范整改; 3. 【节假日】相关协议命名规范整改 |
林惠武 |
2020-04-13 | v0.4.3 | 【更新人员门禁权限】、【上传打卡记录】新增规则类别 | 林惠武 |
2020-05-08 | v0.4.4 | 1. 新增上传文件协议; 2. 新增上传打卡照片协议; |
林惠武 |
2020-05-28 | v0.4.5 | 新增设置打卡照片参数协议 | 林惠武 |
2020-07-13 | v0.4.6 | 【更新人员门禁权限】新增验证方式类型属性 | 林惠武 |
2020-07-27 | v0.4.7 | 1. 新增【上传门实时状态】、【上传设备实时状态】协议 2. 【设置门禁参数】新增本地报警参数 |
林惠武 |
2020-12-15 | v0.5.1 | 新增远程登记生物特征协议 | 林惠武 |
2021-04-06 | v0.6.1 | 新增(门禁)二维码参数配置协议 | 林惠武 |
2021-04-13 | v0.6.2 | 设备上报新增门禁二维码相关参数 | 林惠武 |
2021-06-02 | v0.6.3 | 设备上报门禁二维码相关参数修改 | 蔡火添 |
2021-07-05 | v0.7.1 | 1. 新增【设备上报】辅助输入功能参数 2. 新增【设置门禁参数】辅助输出相关参数 |
林惠武 |
2021-09-06 | v1.1.0 | 1. 修改【上传门实时状态】协议,新增辅助输出状态 2. 修改【更新访客信息】协议,修改访客密码信息、有效期等信息标准 3. 新增【更新访客照片】协议 4. 新增【更新开门密码】协议 |
林惠武 |
2021-09-17 | v1.1.1 | 1. 新增【删除开门密码】协议 2. 新增【清除开门密码】协议 |
林惠武 |
2021-12-27 | v1.2.1 | 1. 新增【重置设备参数】协议,包括人脸、门禁、音量等系统参数重置指令 2. 设备上报新增门禁、人脸相关参数 |
林惠武 |
2022-05-08 | v1.2.2 | 设备上报时新增funcIds参数 | 林惠武 |
2022-07-20 | v1.3.0 | 1.新增【获取代理服务器信息】 2. 设备上报新增支持自动注册参数 |
林惠武 |
协议说明
背景
目前市场上ZKTeco的产品使用的通讯协议大部分是基于http/https的PUSH协议,短连接数据协议,经过多年的使用,发现了一些不足,主要是性能方面的,包括:
- HTTP的连接问题,HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1支持持久连接)因为TCP连接的建立过程是有开销的,如果使用了SSL/TLS开销就更大。
- HTTP消息头问题,现在的客户端会发送大量的HTTP消息头。
- HTTP通信方式问题,HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,设备想要获取服务器命令,就需要不断地轮询服务器
综上为解决各种性能问题,由此引进面向长连接数据协议的ZKTeco BEST数据协议。
BEST 简介
BEST协议是Biometric Exchange Synchronization Transmission Protocol缩写,应用于ZKTeco相关产品,其强调的是数据协议,可应用于各种网络传输协议,如mqtt、websocket等
BEST-T 简介
BEST-T,即Best over tencent,表示基于腾讯IoT Hub 的BEST协议,采用mqtt协议通讯,,本文档只说明关于通道建立之后的数据通讯协议,关于设备端如何接入请直接参考腾讯IoT签名认证接入指引。
特别注意:BEST系列协议,如BEST-T,与主流BEST协议,其除了初始化(鉴权)流程多了一步腾讯的签名认证,其余数据格式均一致。
Broker声明
腾讯IoT Hub分为公有云及ZKTeco专有云,对应的Mqtt Broker Address如下:
服务端 | 地址 | 端口 | 备注 |
---|---|---|---|
腾讯公有云 | iotcloud-mqtt.gz.tencentdevices.com | 8883 | 公有云取决于账号所指定节点,此处为广州 |
ZKTeco专有云 | zk-iotcloud-mqtt.gz.tencentdevices.com | 8883 | 专有云目前建设的只提供广州节点 |
注:从v1.3.0开始,提供broker信息动态获取操作
Topic声明
以腾讯IoT Hub鉴权为基础,以下相关数据交互与Topic关系:
- ${productId}/${deviceName}/event
对设备而言属于消息发布topic,凡是设备主动上报的消息,包含数据上传、命令回复、心跳、登录等,都固定发布到此topic。
- ${productId}/${deviceName}/control
对设备而言属于消息订阅topic,凡是服务端主动下发的消息,包含命令下发、设备消息回复等,都固定发布到此topic。
设备初始化流程
获取代理服务器信息
此步骤为http/https请求,在获取不到通讯服务器地址时,默认一直请求,直到获取到通讯服务器地址为止,请求时间间隔默认30秒。
Request:
URL: https://${ServerAddress}/v3/device/getBrokerServer?sn={SN}&type={TYPE}&nonce={NONCE}×tamp={timestamp}&sign={SIGN}
Method: Get
参数 | 是否必须 | 描述 |
---|---|---|
sn | 是 | 设备序列号 |
type | 是 | 通讯协议类型,取值范围(全小写): push:表示获取push通讯地址; best-w:表示获取best over websocket 通讯服务器地址 best-t:表示获取best over tencent broker地址 best-m:表示获取best over mqtt() best-a:表示获取best over aws iot core ZKTeco+ 此处暂时固定best-t即可 |
nonce | 是 | 随机数,不得超过32位,随机数不得重复 |
timestamp | 是 | 时间戳,精确到毫秒,服务端结合nonce一起做防重放攻击 |
sign | 是 | 数字签名,{SN}+{nonce}+{timestamp}+{secretKey} 经32位小写md5摘要之后得到的签名,如SN=abcd, nonce=123456, timestamp=1646102871000, secretKey=aabbcc, 则sign的值为字符串“abcd1234561646102871000aabbcc”的32位md5摘要内容,即bdd58420c142a11569ff3eb8a9ec535c,注意secretKey是在生产时由生产系统调用ZKTeco+预注册时返回,并写入到设备的,此处不会直接明文传输 |
- 正常回复:
{
"code": "00000000",
"message": "success",
"payload": {
"results": {
"url": "mqtts://xxxx:port",
"tProductId":"xxxxxxxxxx",
"tSecretKey":"xxxxxxxx"
}
}
}
参数 | 必填 | 描述 |
---|---|---|
url | 是 | 通讯(代理)服务器地址 |
tProductId | 是 | 该设备所属腾讯iot的产品id |
tSecretKey | 是 | 该设备在腾讯iot的设备密钥,用于密钥模式下的安全认证 |
- 异常回复:
设备没权限或服务异常时回复
{
"code": "其他不等于00000000的错误码",
"message": "错误描述"
}
设备注册
设备注册,主要是为了获取授权码。
当设备Flash中不存在授权码,或者设备登录失败时调用。
若设备注册成功,则继续请求设备授权;
若设备注册失败,则60秒之后重新请求设备注册;
设备请求:
{
"funcId": "dev.register",
"sn": "xxxx",
"mid": "xxxx",
"payload": {
"params": {
"protType": "best-t",
"protVer": "1.0.0",
"devKey": "xxxx",
"devType": "att"
}
}
}
参数描述:
参数名 | 是否必须 | 描述 |
---|---|---|
protType | 是 | 协议名称,取值: best-w: 基于主流websocket; best-m:基于主流mqtt best-t:基于腾讯IoT Hub |
protVer | 是 | 协议版本 |
devType | 是 | 设备类型, 取值: att:考勤/简单门禁/高级门禁业务 acc:专业门禁业务 elev:梯控业务 |
devKey | 是 | 约定的设备key,代表ZKTeco设备 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "00000000",
"message": "消息内容",
"mid": "xxxxxxxx",
"payload": {
"results": {
"authCode": "xxxxx"
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
authCode | 是 | 授权码 |
设备授权
设备请求:
授权是为了获取登录密码。
设备注册成功后调用,若授权失败,则需重新注册,获取授权码。
{
"funcId": "dev.accredit",
"sn": "xxxx",
"mid": "xxxx",
"payload": {
"params": {
"devKey": "xxxx",
"authCode": "xxxx"
}
}
}
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "00000000",
"message": "消息内容",
"mid": "xxxxxxxx",
"payload": {
"results": {
"secret": "xxxxxxx"
}
}
}
参数名 | 描述 |
---|---|
secret | 设备登录密码 |
设备登录
授权成功后走设备登录
若收到00000000成功编码,则继续走下一步流程【设备上报】;
若收到S00E0001、S00E0002、S00E0003、S00E0004等错误码,则重新走初始化流程;
若收到其他错误编码,则60秒之后继续登录;
设备请求:
{
"funcId": "dev.login",
"sn": "xxxx",
"mid": "xxxx",
"payload": {
"params": {
"devKey": "xxxx",
"authCode": "xxxx",
"secret": "xxxx"
}
}
}
服务端回复:
登录成功回复:
{
"funcId": "cmd.dev.response",
"code": "xxxxxxxx",
"message": "消息内容",
"mid": "xxxxxxxx"
}
设备上报
设备登录成功后,必须上报设备信息
设备信息上报仅仅在初始化流程上报,若服务端需要设备重新上报所有设备信息,则让设备重新走登录流程即可。
上报设备信息,包括设备容量、设备属性、固件信息等
设备请求:
{
"funcId":"dev.report",
"mid":"xxxx",
"payload":{
"params":{
"devModel":"IFace302",
"fwVer":"xxx",
"maxUserCount":"10000",
"userCount":"500",
"maxAttLogCount":"50000",
"attLogCount":"50000",
"fpFunOn":"1",
"fpVer":"10.0",
"maxFpCount":"10000",
"fpCount":"10000",
"faceFunOn":"1",
"faceVer":"9.0",
"maxFaceCount":"1000",
"faceCount":"1000",
"visLightFunOn":"1",
"maxVisLightCount":"5000",
"visLightCount":"5000",
"ip":"192.168.213.10",
"mac":"00:17:61:10:01:26",
"wirelessSSID":"ZKTeco-wifi",
"lockFunOn":"0",
"qrCodeSupport":"1",
"qrCodeDec":"1",
"qrCodeOn":"1",
"auxInFunOn":"0",
"lockOn":"1",
"doorSensorTimeout":"10",
"doorSensorAlarmTimeout":"5",
"doorSensorMode":"0",
"isHolidayValid":"0",
"localAlarmOn":"1",
"faceMThr":"74",
"faceVThr":"63",
"faceEThreshold":"70",
"facePitchThreshold":"35",
"faceRollYawThreshold":"25",
"modifyClarityCond":"40",
"faceMinThreshold":"80",
"motionDetectSensitivity":"4",
"grayThroldValue":"80",
"faceLivenessThreshold":"50",
"enableBioTest":"1",
"IRLivenessFunOn":"0",
"WDRStatus":"0",
"volume" : "10",
"funcIds": ["dev.option.upload", "dev.data.upload.user", "xxxxx"],
"autoRegisterFunOn":"0"
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
devModel | 是 | 设备型号 |
fwVer | 是 | 固件版本号 |
maxUserCount | 是 | 设备用户容量 |
userCount | 是 | 当前设备用户数 |
maxAttLogCount | 否 | 设备考勤记录容量 |
attLogCount | 否 | 当前设备考勤记录数 |
fpFunOn | 否 | 指纹模板功能参数,1: 支持, 0: 不支持(默认) |
fpVer | 否 | 指纹算法版本,当fpFunOn=1时必传 |
maxFpCount | 否 | 设备指纹容量,当fpFunOn=1时必传 |
fpCount | 否 | 当前设备指纹模板数,当fpFunOn=1时必传 |
faceFunOn | 否 | 近红外人脸模板功能参数,1: 支持, 0: 不支持(默认) |
faceVer | 否 | 近红外人脸算饭版本,当faceFunOn=1时必传 |
maxFaceCount | 否 | 设备近红外人脸模板容量,当faceFunOn=1时必传 |
faceCount | 否 | 当前设备近红外人脸模板数,当faceFunOn=1时必传 |
visLightFunOn | 否 | 可见光人脸功能参数,1: 支持, 0: 不支持(默认) |
maxVisLightCount | 否 | 设备可见光人脸容量,当visLightFunOn=1时必传 |
visLightCount | 否 | 当前设备可见光人脸数,当visLightFunOn=1时必传 |
ip | 是 | 设备ip地址 |
mac | 是 | 设备mac地址 |
wirelessSSID | 否 | wifi名称 |
lockFunOn | 否 | 门禁功能参数,0:关闭(默认),1:简单门禁,15:高级门禁 |
multiBioEnrollSupport | 否 | 设备多模态生物特征远程登记功能支持, 详见生物识别类型进行按位定义, 不同类型间用冒号隔开, 0:不支持, 1:支持, 如:0:1:1:0:0:0:0:0:0:0, 默认为0:0:0:0:0:0:0:0:0:0,即所有特征都不支持远程登记,表示支持指纹模板支持和近红外人脸远程登记功能支持 |
qrCodeSupport | 否 | 二维码支持情况,取值如下: 0:不支持二维码功能(默认) 1:支持二维码功能 |
qrCodeDec | 否 | 是否支持加密方式解析二维码, 0:二维码按非加密方式解析, 1:二维码按加密方式解析 |
qrCodeOn | 否 | 二维码功能开关,若设备支持二维码,但未开启二维码功能,也不可使用,取值范围 0:关闭, 1:开启 |
auxInFunOn | 否 | 辅助输入功能参数,1: 支持, 0: 不支持(默认) |
lockOn | 否 | 锁驱动时长,取值范围(单位:秒):0~10,为空时默认为0 |
doorSensorTimeout | 否 | 门磁延时,取值范围(单位:秒):1~255,为空时默认为1 |
doorSensorAlarmTimeout | 否 | 门磁报警延时,取值范围(单位:秒):0~999,为空时默认为0 |
doorSensorMode | 否 | 门磁模式,0:常开型,1:常闭型,2:关闭,为空时默认为0 |
isHolidayValid | 否 | 节假日是否有效,用于常开/常闭判断中是否增加节假日的判断,取值范围:1:有效,0:无效 |
localAlarmOn | 否 | 本地报警,本地报警开了后,如果出现拆机情况设备会发出报警声 取值范围,1:打开本地报警(默认) 0:关闭本地报警 |
faceMThr | 否 | 1:N阈值 在1:N模式下(iT1只有1:N模式)进行人脸比对时,超过默认值时才能比对通过 |
faceVThr | 否 | 1:1阈值 在1:1模式下进行人脸比对时,超过默认值时才能比对通过 |
faceEThreshold | 否 | 面部登记阀值 在进行面部登记时的匹配值 |
facePitchThreshold | 否 | 人脸俯仰角度 人脸登记、比对时的俯视、仰视的角度,超过该值,将会被过滤 |
faceRollYawThreshold | 否 | 人脸旋转角度 人脸登记、比对时的左右角度,超过该值,将会被算法过滤 |
modifyClarityCond | 否 | 图像质量 人脸登记、比对时的图像质量,值越高,图像要求越清晰 |
faceMinThreshold | 否 | 最小人脸像 登记、比对时要求的人脸大小,低于该值将会被过滤。例:本机登记时人站的远近,照片下发登记时,人脸的大小 |
motionDetectSensitivity | 否 | 移动侦测灵敏度 从待机到唤醒比对界面的灵敏值,值越大越灵敏,越容易进入比对界面 |
grayThroldValue | 否 | 补光灯开启灵敏度 控制补光灯开启的值,值越大,越容易开启补光灯 |
faceLivenessThreshold | 否 | 活体检测阈值 判断可见光图像是否为活体的阈值,值越大,可见光防伪越严格 |
enableBioTest | 否 | 活体检测开关 利用可见光图像进行活体检测 |
IRLivenessFunOn | 否 | 近红外防伪开关 利用近红外图像进行防伪检测 |
WDRStatus | 否 | WDR开关 宽动态,场景中特别亮的部位和特别暗的部位同时都能看得特别清楚 |
volume | 否 | 音量 |
funcIds | 是 | 设备端支持的funcIds列表,增加funcId交换的背景:为了解决新增功能时,设备同时支持老服务器和新服务器(服务器同时支持老设备和新设备),需要增加功能参数来标识是否支持对应数据或功能,统一funcId交换,避免一直新增功能参数来做兼容,其中dev.register、dev.accredit、dev.login、dev.report、cmd.dev.response、dev.cmd.response默认必须支持。 |
autoRegisterFunOn | 否 | 支持自动注册,用于确认设备中的产品id和设备密钥等认证参数需不需要,可不可以动态变更 0:不支持(默认) 1:支持 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx",
"payload": {
"results": {
"timezone": "+08:00",
"supportHeartbeat": "1",
"heartbeatInterval": "60",
"fpFunOn": "0",
"faceFunOn": "0",
"visLightFunOn": "0",
"punchPhotoFunOn": "0",
"qrCodeDecryptType": "2",
"qrCodeDecryptKey": "UkhGaXpuaXE2bjQ3YkxqNFhVVlpMUzF5eVFFVzhTaUo="
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
timezone | 否 | 设备时区,默认为+08:00,即表示东八区北京时间 |
supportHeartbeat | 否 | 服务端是否支持业务心跳,1:支持(默认),0:不支持 |
heartbeatInterval | 否 | 业务心跳时间间隔,单位:秒,默认60秒 |
fpFunOn | 否 | 服务端指纹功能参数,1:支持(默认),0:不支持,当服务端不支持时,设备不能上传指纹 |
faceFunOn | 否 | 服务端近红外人脸参数,1:支持(默认),0:不支持,当服务端不支持时,设备不能上传近红外人脸模板 |
visLightFunOn | 否 | 服务端可见光人脸参数,1:支持(默认),0:不支持,当服务端不支持时,设备不能上传可见光模板或照片 |
qrCodeDecryptType | 否 | 门禁二维码解密方式。2:利用AES256算法加密; |
qrCodeDecryptKey | 否 | 门禁二维码加密密钥 |
心跳
设备登录成功才需要发送业务心跳。
此处心跳为业务心跳,主要作用是告知服务端设备当前的运行状态,以便服务端能够准确的下发设备命令;
设备请求:
{
"funcId": "dev.heartbeat",
"mid": "xxxx",
"payload": {
"params": {
"isFree": "1"
}
}
}
参数名 | 是否必须 | 描述 |
---|---|---|
isFree | 否 | 是否处于空闲状态, 即没有在处理命令。 0:繁忙(设备有在处理命令),1:空闲(设备没有在处理命令) 为空时默认为1 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "00000000",
"message": "xxxx",
"mid": "xxxx"
}
业务心跳使用约定:
- 长连接本身系统心跳(如ping/pong)仍然保留;
- 初始化流程走完才能发送业务心跳;
- 若设备在处理命令,可不用发业务心跳;
- 业务心跳的时间间隔默认60秒,可由服务端控制(初始化返回参数或者单独下发设置客户端选项命令);
为什么需要业务心跳:
业务心跳主要是补救措施,假设服务端一批命令下发了100条,设备只回复了99条,这个时候服务端没法准确的判断剩下的一条是在执行中,还是已丢失(可能网络传输丢失,也可能设备拿到数据之后因某些原因丢失),此时服务端不知道是要重新下发命令,还是继续等待设备回复。
如何关闭心跳:
服务端可以不依赖此心跳,自己内部实现解决上面描述的问题,此时设备不应该再开启业务心跳功能,会浪费流量,给服务端压力,所以可以将其关闭掉。仅需要在设备信息请求回复不支持心跳功能即可,即supportHeartbeat为0
设备上传数据
上传设备参数
上传设备参数,主要是上传设备记录数据,如人员数、指纹数、打卡记录数等等信息。
若设备数据有产生变动,则应上传相关的数据记录信息。
设备请求:
{
"funcId":"dev.option.upload",
"mid":"xxxx",
"payload":{
"params":{
"option":{
"optionName1":"optionValue1",
"optionName2":"optionValue2"
}
}
}
}
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
上传人员信息
上传设备上的人员信息,包含基本信息、设备密码、角色、卡号、模板信息等
设备请求
{
"funcId": "dev.data.upload.user",
"mid": "xxxx",
"payload": {
"params": {
"users": [{
"pin": "2956",
"name": "luther.lin",
"passwd": "",
"pri": "0",
"verifyMode": "0",
"cards": ["4010846978"],
"bioDatas": [{
"no": "0",
"index": "0",
"valid": "1",
"duress": "0",
"type": "2",
"majorVer": "10",
"minorVer": "1",
"fmt": "0",
"tmp": "xxxxxxxxxxxxxxxxxxxx"
}]
}]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 描述 |
---|---|
pin | 员工工号 |
name | 员工姓名 |
passwd | 密码 |
pri | 用户设备上的角色,0:普通员工,14:管理员 |
verifyMode | 验证方式,默认为0,详见验证方式说明 |
cards | 卡号集合 |
no | 生物具体个体编号 【指纹】编号是: 0-9。对应的手指是:左手:小拇指/无名指/中指/食指/拇指,右手:拇指/食指/中指/无名指/小拇指; 【指静脉】和指纹相同 【面部】no=0 【虹膜】no 按照 0 为左眼 1为右眼 【掌静脉】no 按照 0 为左手, 1为右手. 如果no 没有明确定义,则默认值为 0。 |
index | 生物具体个体模板编号,如 1个手指存储多枚模板。从 0 开始计算 |
valid | 是否有效标示, 0:无效, 1:有效,默认为 1 |
duress | 是否胁迫标示, 0:非胁迫, 1:胁迫,默认为 0 |
type | 生物识别类型,详见生物识别类型 |
majorVer | 模板算法版本之主版本,如: 指纹算法版本 10.3,主版本是 10,副版本是 3 |
minorVer | 模板算法版本之副版本,如: 指纹算法版本 10.3,主版本是 10,副版本是 3 |
fmt | 模板格式, 如指纹有ZK\ISO\ANSI 等格式 0: ZK 1: ISO 2: ANSI |
tmp | 指纹、面部、手掌模板信息,需进行base64编码传输 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
响应参数详解:
通用部分见附录1
上传打卡记录
设备请求
{
"funcId": "dev.data.upload.attLog",
"mid": "xxxx",
"payload": {
"params": {
"attLogs": [{
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T08:59:59+08:00",
"type": "1"
}, {
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T14:59:59+08:00",
"type": "1"
}]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 员工工号 |
attState | 否 | 考勤状态 |
verifyMode | 是 | 验证方式 |
workCode | 否 | 工作号码 |
punchTime | 是 | 打卡时间,ISO标准时间格式:yyyy-MM-ddTHH:mm:ss+hh:mm |
type | 否 | 记录类别,1:考勤(默认);2:门禁;3:考勤+门禁; 为空时默认考勤 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
上传生物特征图片
设备请求
{
"funcId": "dev.data.upload.bioPhoto",
"mid": "xxxx",
"payload": {
"params": {
"bioPhotos": [{
"pin": "2956",
"type": "9",
"no": "0",
"index": "0",
"size": "95040",
"content": "AAAA........",
"extension": "xxxx"
}]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 员工工号 |
type | 是 | 生物识别类型,详见生物识别类型 |
no | 否 | 生物具体个体编号,详见生物具体个体编号, 如果no没有明确定义, 则默认值为0 |
index | 否 | 生物具体个体模板编号, 如1个手指存储多枚模板, 从0开始计算, index没有明确定义, 则默认值为0 |
size | 是 | 生物特征图片base64 编码之后的长度 |
content | 是 | 图片内容,值为原始二进制生物特征图片base64编码 |
extension | 否 | 图片的扩展名, extension没有明确定义, 则默认值为jpg |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
上传访客记录
预约访客的来访记录
设备请求
{
"funcId": "dev.data.upload.visitLog",
"mid": "xxxxxxxx",
"payload": {
"params": {
"logs": [{
"pin": "8065",
"verifyMode": "1",
"visitTime": "2019-07-31T08:59:59+08:00"
}
]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 访客临时工号 |
verifyMode | 是 | 验证方式,默认为0,详见验证方式说明 |
visitTime | 是 | 来访时间 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx"
}
上传文件
此协议主要针对需上传大文件时使用,此处不强调具体文件格式,仅读取文件字节流base64进行传输,具体文件目标格式以目标业务使用时为准;
注:大数据时也可以直接使用此协议进行预先传输,然后再具体功能协议中指定大数据内容所属fileId,此时fileId可以理解为是一个大数据标识
上传开始
通知服务端要开始上传文件,指定文件的fileId、大小、checksum等文件基础信息
设备请求
{
"funcId": "dev.file.upload.start",
"mid": "xxxx",
"payload": {
"params": {
"fileId": "e78dc2cef23d495ab4f890fe3362bee9",
"size": "1208",
"checksum": ""
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
fileId | 是 | 设备内文件唯一标识, 由字母和数字组成, 最高不能超过64位, 建议使用32位uuid |
size | 是 | 整包字节长度 |
checksum | 否 | 总和校验码,值为整包二进制字节md5摘要,服务端根据checksum是否为空进行checksum校验文件完整性 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx"
}
上传文件包
上传文件分包内容到服务端,其中分包内容为读取文件分包字节base64加密串
设备请求
{
"funcId": "dev.file.upload.package",
"mid": "xxxx",
"payload": {
"params": {
"fileId": "e78dc2cef23d495ab4f890fe3362bee9",
"offset": "215",
"content": "xxxxxxxxxxxxxxx"
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
fileId | 是 | 设备内文件唯一标识, 由字母和数字组成, 最高不能超过64位, 建议使用32位uuid |
offset | 是 | 上次已传输文件偏移位置 |
content | 是 | 文件分包内容,读取二进制数据流base64加密 |
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx"
}
上传完成
设备请求
{
"funcId": "dev.file.upload.end",
"mid": "xxxx",
"payload": {
"params": {
"fileId": "e78dc2cef23d495ab4f890fe3362bee9"
}
}
}
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx"
}
上传打卡照片
设备请求
{
"funcId": "dev.data.upload.punchPhoto",
"mid": "xxxx",
"payload": {
"params": {
"punchPhotos": [{
"pin": "2956",
"punchTime": "2019-07-31T08:59:59+08:00",
"type": "1",
"content": "xxxxxxxxxxxxxxxxxxxxx",
"contentFileId": "xxxxxxxxxxxxx"
}]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
pin | 否 | 员工工号,有此内容时需填入,理论上仅有当比对失败时不用存在此内容 |
punchTime | 是 | 打卡时间 |
type | 否 | 比对类别,指抓拍的照片是比对成功还是比对失败的照片,取值范围,1:成功(默认),0:失败 |
content | 否 | 照片内容,值为原始二进制打卡照片base64编码,与contentFileId不能同时为空,优先使用content |
contentFileId | 否 | 照片内容文件id,当上传照片超过通讯协议限制的大小时使用,将照片预先分包上传,详见(上传文件)[#file_upload],然后指定fileId,与content不能同时为空 |
上传门实时状态
设备上传门实时状态到服务端
设备请求:
{
"funcId":"dev.data.upload.doorRealStatus",
"mid":"xxxx",
"payload":{
"params":{
"realStatuss":[
{
"time":"2020-12-30T20:00:00+08:00",
"sensor":"2",
"relay":"0",
"alarm":"0",
"coerce":"0",
"auxOut":"0"
}
]
}
}
}
请求参数详解:
参数名 | 必填 | 描述 |
---|---|---|
time | 是 | 时间, ISO标准时间格式:yyyy-MM-ddTHH:mm:ss±HH:mm, (yyyy-MM-ddTHH:mm:ss):设备的本地时间, (HH:mm):时区偏移量 |
sensor | 否 | 门磁开关状态, 0:当前门无门磁, 1:当前门有门磁(门是关闭状态), 2:当前门有门磁(门是打开状态) |
relay | 否 | 门继电器开关状态, 0:继电器吸合, 1:继电器断开 |
alarm | 否 | 报警状态, 0:无报警, 1:意外开门事件, 2:门磁超时报警 |
coerce | 否 | 胁迫状态, 0:无胁迫, 1:密码, 2:指纹 |
auxOut | 否 | 辅助输出联动状态,取值如下: -1:未触发(默认) 0:无 1:触发开门 2:触发报警 3:触发开门和报警 此处表示有无触发联动,默认是未触发,当触发联动时将此前设置的辅助输出类型(即0、1、2、3等)上报 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
上传设备实时状态
设备上传设备实时状态到服务端
设备请求:
{
"funcId":"dev.data.upload.devRealStatus",
"mid":"xxxx",
"payload":{
"params":{
"realStatuss":[
{
"time":"2020-12-30T20:00:00+08:00",
"tamper":"0"
}
]
}
}
}
请求参数详解:
参数名 | 必填 | 描述 |
---|---|---|
time | 是 | 时间, ISO标准时间格式:yyyy-MM-ddTHH:mm:ss±HH:mm, (yyyy-MM-ddTHH:mm:ss):设备的本地时间, (HH:mm):设备的时区 |
tamper | 否 | 设备拆机报警, 0:正常, 1:拆机 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
设备实时请求
获取服务端时间
设备请求服务端获取当前时间,2秒之内没收到服务端的回复此同步时间无效。
设备请求:
{
"funcId": "dev.system.sync.time",
"imme": "1",
"mid": "xxxx"
}
服务端响应:
{
"funcId": "cmd.dev.response",
"code": "xxxx",
"message": "xxxx",
"mid": "xxxx",
"payload": {
"results": {
"time": "2019-08-12T20:01:01+08:00"
}
}
}
参数名 | 描述 |
---|---|
time | 当前ISO8601时间,格式为yyyy-MM-ddTHH:mm:ss+hh:mm,如2019-08-12T20:01:01+08:00 |
物理重置通知
人工手动对设备进行恢复出厂设置时触发事件,通知服务端。
恢复出厂设置之后,设备可能网络已经断开,所以设备需在下一次联网初始化成功后告知服务端。
设备请求
{
"funcId": "dev.system.reset",
"mid": "xxxx",
"payload": {
"params": {
"time": "2019-08-12T20:01:01+08:00"
}
}
}
参数名 | 描述 |
---|---|
time | 重置时间,ISO8601格式,格式为yyyy-MM-ddTHH:mm:ss+hh:mm,如2019-08-12T20:01:01+08:00 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
指纹登记进度通知【已过时】
设备接收到服务端下发的远程登记指纹命令后,需将指纹登记进度实时通知服务端。
但远程登记指纹协议已过时,建议使用远程登记生物特征
设备请求:
{
"funcId":"dev.data.tip.fp",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"num":"xxxx",
"code":"xxxx",
"message":"xxxx"
}
}
}
请求参数详解:
参数 | 描述 |
---|---|
num | 第N次按手指 |
code | 第N次按手指返回值 |
message | 第N次按手指返回值对应的消息内容 |
code与message消息列表:
code | message |
---|---|
0 | 成功 |
-1 | 用户不存在 |
-2 | 指纹容量已满 |
-3 | 指纹重复 |
-4 | 超时退出 |
-5 | 指纹合成失败 |
-6 | 获取数据异常 |
-7 | 添加到内存失败 |
-10 | 模板提取异常【位置不对】 |
-12 | 其他异常 |
服务端响应:
{
"funcId":"cmd.dev.response",
"code":"xxxx",
"message":"xxxx",
"mid":"xxxx"
}
控制命令
登记指纹【已过时】
设备接收到此命令,则自动打开登记指纹窗口,登记指定员工工号的指纹模板;
此接口已过时,建议使用远程登记生物特征
服务端请求:
{
"funcId":"cmd.control.enter.fp",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"pin":"xxxx",
"no":"xxxx"
}
}
}
请求参数详解:
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 设备员工工号 |
no | 是 | 指纹编号, 取值范围:0-9。 对应的手指是:左手:小拇指/无名指/中指/食指/拇指,右手:拇指/食指/中指/无名指/小拇指; |
设备响应:
取消登记指纹
设备收到此命令,要取消登记指纹动作,退出登记指纹窗口。
服务端请求:
{
"funcId":"cmd.control.cancel.fp",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
见命令回复
重启客户端
重启设备
服务端请求:
{
"funcId":"cmd.control.reboot",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
请求参数详解:
设备响应:
见命令回复
重新登录
设备收到此命令,重新请求设备登录
服务端请求:
{
"funcId":"cmd.control.relogin",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
见命令回复
远程开门
Request:
{
"funcId": "cmd.control.open.door",
"imme": "1",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxxx"
}
}
}
设备响应:
见命令回复
远程登记生物特征
服务端下发远程登记生物特征命令,固件端实时响应打开对应的登记生物特征窗口,并实时上报登记进度和结果。
服务端需根据设备上报的multiBioEnrollSupport参数来判断设备是否支持远程登记功能
服务端请求:
{
"funcId": "cmd.control.enroll.bio",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"pin": "2956",
"type": "1",
"no" : "0"
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
imme | 是 | 表示该命令为紧急命令,实时性要求最高,实时响应 |
pin | 是 | 员工工号 |
type | 是 | 生物特征类型,详见生物识别类型,如type=1时,表示远程控制登记指纹 |
no | 否 | 生物具体个体编号 【指纹】编号是: 0-9。对应的手指是:左手:小拇指/无名指/中指/食指/拇指,右手:拇指/食指/中指/无名指/小拇指; 【指静脉】和指纹相同 【面部】no=0 【虹膜】no 按照 0 为左眼 1为右眼 【掌静脉】no 按照 0 为左手, 1为右手. 如果no 没有明确定义,则默认值为 0。 |
设备响应
- 上传生物特征登记进度/结果
{
"funcId": "dev.data.tip.bio",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"num":"1",
"code": "0",
"message": "成功",
"end": "1"
}
}
}
参数 | 描述 |
---|---|
num | 第N次操作结果 登记指纹时表示第N次按手指 登记手掌时表示第N次探测手掌模板 |
code | 第N次操作结果编码 |
msg | 第N次操作结果描述 |
end | 表示整个登记生物特征过程是否结束,0:否,1:是(默认) 当需要上报多次执行结果时,如录制指纹,需上报此参数为0,否则认为本次上报即为此次远程登记会话的执行结果 |
code及message说明
code | message |
---|---|
0 | 成功 |
-1 | 用户不存在 |
-2 | 指纹容量已满 |
-3 | 指纹重复 |
-4 | 超时退出 |
-5 | 指纹合成失败 |
-6 | 获取数据异常 |
-7 | 添加到内存失败 |
-8 | 手掌容量已满 |
-9 | 手掌重复 |
-10 | 模板提取异常【位置不对】 |
-11 | 手掌离摄像头距离不对 |
-12 | 容量已满 |
-13 | 数据异常 |
-14 | 添加数据库失败 |
-15 | 模板重复 |
-16 | 设备录入中 |
-17 | 人脸合成失败 |
- 回复命令执行结果, 见命令回复
取消登记生物特征
设备收到此命令,要取消登记生物特征动作,退出登记生物特征窗口
服务端请求:
{
"funcId": "cmd.control.cancel.bio",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx"
}
}
}
设备响应:
见命令回复
清除命令
清除全部数据
清除设备中所有数据,包括人员信息、生物模板、打卡记录等。
服务端请求:
{
"funcId":"cmd.data.clear.all",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
见命令回复
清除用户信息
删除设备中的所有用户,包含模板等关联信息
服务端请求:
{
"funcId":"cmd.data.clear.user",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
见命令回复
清除打卡记录
删除设备中的打卡记录
服务端请求:
{
"funcId":"cmd.data.clear.attLog",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
见命令回复
清除节假日信息
删除设备中所有的节假日信息
Request:
{
"funcId": "cmd.data.clear.holiday",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxxx"
}
}
}
设备响应:
见命令回复
清除开门密码
Request:
{
"funcId": "cmd.data.clear.doorPassword",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxxx"
}
}
}
设备响应:
见命令回复
删除命令
删除人员
删除设备中人员信息
服务端请求:
{
"funcId":"cmd.data.delete.user",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"pins":[
"xxxx",
"xxxx",
"xxxx"
]
}
}
}
请求参数详解:
参数名 | 必填 | 描述 |
---|---|---|
pins | 是 | 员工工号 |
设备响应:
见命令回复
删除模板
删除设备中的生物模板
服务端请求:
{
"funcId":"cmd.data.delete.bioData",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"bioDatas":[
{
"pin":"2956",
"type":"2",
"no":"0"
}
]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 必填 | 描述 |
---|---|---|
cmdId | 是 | 命令Id |
bioDatas | 是 | 模板 |
pin | 是 | 工号 |
type | 否 | 生物识别类型,为空时表示删除该员工所有模板信息 |
no | 否 | 生物具体个体编号, 为空时表示删除指定type的全部模板信息 |
设备响应:
见命令回复
删除门禁时间段
Request:
{
"funcId": "cmd.data.delete.accTimezone",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"timezoneIds": ["100","101"]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
timezoneIds | 是 | 时间段编号数组 |
设备响应:
见命令回复
删除门禁组
Request:
{
"funcId": "cmd.data.delete.accGroup",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"groupIds": ["100","101"]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
groupIds | 是 | 门禁组编号数组 |
设备响应:
见命令回复
删除节假日
Request:
{
"funcId": "cmd.data.delete.holiday",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"holidayIds": ["xx"]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
holidayIds | 是 | 节假日编号数组 |
设备响应:
见命令回复
删除访客信息
Request:
{
"funcId": "cmd.data.delete.visitor",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxxx",
"pins": ["xxx","xxxx"]
}
}
}
参数名 | 描述 |
---|---|
pins | 访客临时工号数组 |
设备响应:
见命令回复
删除开门密码
Request:
{
"funcId": "cmd.data.delete.doorPassword",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxxx",
"operators": ["xxx","xxxx"]
}
}
}
参数名 | 描述 |
---|---|
operators | 操作者/密码标签 |
设备响应:
见命令回复
更新命令
更新人员信息
服务端请求:
{
"funcId":"cmd.data.update.user",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"users":[
{
"pin":"2956",
"name":"林某某",
"passwd":"123456",
"pri":"1",
"cards":[
"4010846978",
"521186050"
],
"verifyMode":"0",
"bioDatas":[
{
"no":"0",
"index":"0",
"valid":"1",
"duress":"0",
"type":"2",
"majorVer":"10",
"minorVer":"1",
"fmt":"0",
"tmp":"xxxxxxxxxxxx"
}
]
}
]
}
}
}
请求参数详解:
通用部分见附录1
其他参数信息参考人员信息上传
注:人员信息除了pin号为必填字段,其他为选填,当不包含某个属性key时,表示该属性不做变更。
// 举例说明,以下为表示更新员工设备密码
{
"funcId": "cmd.data.update.user",
"mid": "b488030912294ff29d5cc4435248452e",
"payload": {
"params": {
"cmdId": "1001",
"users": [{
"pin": "2956",
"passwd": "123456"
}]
}
}
}
设备响应:
见命令回复
更新比对照片
服务端请求:
{
"funcId":"cmd.data.update.bioPhoto",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"bioPhotos":[
{
"pin":"xxxx",
"type":"xxxx",
"content":"xxxx",
"url":"xxxx"
}
]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 描述 |
---|---|
pin | 工号 |
type | 生物特征图片类型,详见生物特征类别 |
content | 传输生物特征图片时,需要对原始二进制生物特征图片进行base64 编码 |
url | 比对照片下载地址, content和url不能同时为空 |
设备响应:
见命令回复
更新门禁时间段
Request:
{
"funcId": "cmd.data.update.accTimezone",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"timezones": [
{
"timezoneId": "1",
"monStart": "0",
"monEnd": "2359",
"tuesStart": "0",
"tuesEnd": "2359",
"wedStart": "0",
"wedEnd": "2359",
"thurStart": "0",
"thurEnd": "2359",
"friStart": "0",
"friEnd": "2359",
"satStart": "0",
"satEnd": "2359",
"sunStart": "0",
"sunEnd": "2359"
}
]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
timezoneId | 是 | 时间段编号,数字字符串 |
monStart | 是 | 周一开始时间,取值如下:01:01=101,23:59=2359,06:00=600 |
monEnd | 是 | 周一截止时间,格式同上 |
tuesStart | 是 | 周二开始时间,格式同上 |
tuesEnd | 是 | 周二截止时间,格式同上 |
wedStart | 是 | 周三开始时间,格式同上 |
wedEnd | 是 | 周三截止时间,格式同上 |
thurStart | 是 | 周四开始时间,格式同上 |
thurEnd | 是 | 周四截止时间,格式同上 |
friStart | 是 | 周五开始时间,格式同上 |
friEnd | 是 | 周五截止时间,格式同上 |
satStart | 是 | 周六开始时间,格式同上 |
satEnd | 是 | 周六截止时间,格式同上 |
sunStart | 是 | 周日开始时间,格式同上 |
sunEnd | 是 | 周日截止时间,格式同上 |
设备响应:
见命令回复
更新门禁权限组
Request:
{
"funcId": "cmd.data.update.accGroup",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"groups": [
{
"groupId": "1",
"verifyMode": "0",
"timezoneIds": ["xx","xx","xx"],
"vaildHoliday": "0"
}
]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
groupId | 是 | 门禁组编号,数字字符串 |
verifyMode | 是 | 验证方式,详见验证方式说明 |
timezoneIds | 是 | 所属时间段,根据设备具体情况而定,目前考勤高级门禁只支持三个 |
vaildHoliday | 是 | 节假日是否有效, 0:否,:是 |
设备响应:
见命令回复
更新节假日
Request:
{
"funcId": "cmd.data.update.holiday",
"mid": "xxxxxxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"holidays":[{
"holidayId": "x",
"holidayName": "NationalDay",
"startDate": "2018-10-01",
"endDate": "2018-10-07",
"startTime": "0",
"endTime": "2359"
}]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
holidayId | 是 | 节假日编号,数字字符串 |
holidayName | 是 | 节假日名称 |
startDate | 是 | 节假日开始日期 |
endDate | 是 | 节假日截止日期 |
startTime | 是 | 门禁时间段开始时间,取值如下:00:00=0,01:01=101,23:59=2359,06:00=600 |
endTime | 是 | 门禁时间段截止时间,取值如下:01:01=101,23:59=2359,06:00=600 |
设备响应:
见命令回复
更新访客信息
Request:
{
"funcId": "cmd.data.update.visitor",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"visitors": [
{
"pin": "xxxx",
"name": "xxxx",
"password":"fbfe82e76c06ea568e3301ab17a9d4677c1481b8a4f1ca137411e10153deabc3",
"passwordSalt":"c09eb7463827cda245f3a398bd453c42",
"startTime":"2020-01-01T00:00:00+08:00",
"endTime":"2020-12-31T23:59:59+08:00"
}
]
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 访客编号 |
name | 是 | 访客姓名 |
password | 否 | 访客密码,算法:PBKDF2WithHmacSHA256,密文长度:32字节,迭代次数:1000 |
passwordSalt | 否 | 访客密码加密盐值,十六进制字符串,允许为空字符串 |
startTime | 是 | 访客有效期开始时间 |
endTime | 是 | 访客有效期截止时间 |
设备响应:
见命令回复
更新人员门禁权限
设置人员门禁权限,如时间段、门禁组等信息
服务端请求:
{
"funcId": "cmd.data.update.userAccPrivilege",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx",
"userAccPrivileges": [{
"pin": "xxxx",
"timezoneType": "1",
"timezoneIds": ["xxx", "xxx", "xxx"],
"groupIds": ["xx", "xx"],
"customTimezones": [{
"monStart": "0",
"monEnd": "2359",
"tuesStart": "0",
"tuesEnd": "2359",
"wedStart": "0",
"wedEnd": "2359",
"thurStart": "0",
"thurEnd": "2359",
"friStart": "0",
"friEnd": "2359",
"satStart": "0",
"satEnd": "2359",
"sunStart": "0",
"sunEnd": "2359"
}],
"ruleType": "1",
"verifyModeType": "0"
}]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 必填 | 描述 |
---|---|---|
timezoneType | 否 | 时间段类型,取值如下: 0:个人门禁时间段,为空时默认为0 1:门禁组时间段 2:自定义时间段 |
timezoneIds | 否 | 个人门禁时间段,当且仅当timezoneType=0时有效 |
groupIds | 否 | 用户所属门禁组,默认属于1组,当且仅当timezoneType=1时有效 |
customTimezones | 否 | 自定义个人时间段,详细属性内容可参考更新门禁时间段,,当且仅当timezoneType=2时有效 |
ruleType | 否 | 规则类别,打卡记录需要回传此标记 取值范围:1:考勤(默认);2:门禁;3:考勤+门禁; |
verifyModeType | 否 | 使用的验证方式类型,取值范围,0:个人验证方式(默认),1:组验证方式 |
设备响应:
见命令回复
更新访客照片
服务端请求:
{
"funcId":"cmd.data.update.visitorBioPhoto",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"visitorBioPhotos":[
{
"pin":"2956",
"type":"9",
"content":"base64",
"url":"https://test.zkteco.com/xxxx.jpg"
}
]
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 必填 | 描述 |
---|---|---|
pin | 是 | 访客编号 |
type | 是 | 详见生物特征类别 |
content | 否 | 传输生物特征图片时,需要对原始二进制生物特征图片进行base64 编码 |
url | 否 | 比对照片下载地址, content和url不能同时为空 |
设备响应:
见命令回复
更新开门密码
服务端下发密码命令到设备, 用于临时密码或者远程密码开门
服务端请求:
{
"funcId": "cmd.data.update.doorPassword",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1001",
"doorPasswords": [{
"operator": "luther",
"startTime": "2020-01-01T00:00:00+08:00",
"endTime": "2020-02-01T00:00:00+08:00",
"password": "fbfe82e76c06ea568e3301ab17a9d4677c1481b8a4f1ca137411e10153deabc3",
"passwordSalt": "c09eb7463827cda245f3a398bd453c42",
"passwordType": "0"
}]
}
}
}
请求参数详解:
参数名 | 必填 | 描述 |
---|---|---|
operator | 否 | 操作者,也作为开门密码唯一标签 |
startTime | 否 | 有效开始时间, ISO标准时间格式:yyyy-MM-ddTHH:mm:ss±HH:mm, (yyyy-MM-ddTHH:mm:ss):服务端的本地时间, (HH:mm):时区偏移量 |
endTime | 否 | 有效结束时间, ISO标准时间格式:yyyy-MM-ddTHH:mm:ss±HH:mm, (yyyy-MM-ddTHH:mm:ss):服务端的本地时间, (HH:mm):时区偏移量 |
password | 是 | 密码,算法:PBKDF2WithHmacSHA256,密文长度:32字节,迭代次数:1000 举例:原始密码:123456 盐:c09eb7463827cda245f3a398bd453c42 加密后:fbfe82e76c06ea568e3301ab17a9d4677c1481b8a4f1ca137411e10153deabc3 |
passwordSalt | 否 | password加密的盐值,十六进制字符串,允许为空字符串 |
passwordType | 否 | password类型,0:永久密码(默认),一个操作者对一个门只能设置一个永久密码;1:临时密码,一个操作者对一个门只能设置一个临时密码,startTime和endTime必传 |
使用密码开门将会产生一条门禁记录,使用上传打卡记录上传数据,其中pin=operator,type=2即门禁记录
设备响应:
见命令回复
获取数据命令
重新上传人员信息
重新上传设备人员信息到服务端
服务端请求:
{
"funcId":"cmd.data.reupload.user",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
- 重新上传人员信息
重新上传人员信息,与人员信息上传一样,只多了cmdId:
设备请求:
{
"funcId":"dev.data.upload.user",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"users":[
{
"pin":"xxxx",
"name":"xxxx",
"passwd":"xxxx",
"pri":"xxxx",
"cards":[
"xxxx",
"xxxx"
],
"bioDatas":[
{
"no":"xxxx",
"index":"xxxx",
"valid":"xxxx",
"duress":"xxxx",
"type":"xxxx",
"majorVer":"xxxx",
"minorVer":"xxxx",
"fmt":"xxxx",
"tmp":"xxxx"
}
]
}
]
}
}
}
- 回复命令执行结果,见命令回复
打卡数据自动校对
打卡数据自动校对
服务端请求:
{
"funcId":"cmd.data.check.attLog",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"startTime":"2019-07-31T00:00:00+08:00",
"endTime":"2019-07-31T23:59:59+08:00",
"logCount":"20"
}
}
}
请求参数详解:
参数名 | 是否必须 | 描述 |
---|---|---|
cmdId | 是 | 命令Id |
startTime | 是 | 打卡记录开始时间,ISO标准时间格式:yyyy-MM-ddTHH:mm:ss+hh:mm |
endTime | 是 | 打卡记录结束时间,ISO标准时间格式:yyyy-MM-ddTHH:mm:ss+hh:mm |
logCount | 是 | 服务端在此时间端内该设备的打卡记录总数 |
设备响应:
- 上传时间段内的数据
如果设备在此时间段内的打卡记录总数大于服务端的,则要重新上传此时间段内的所有打卡记录,入参与上传打卡记录基本一致,仅多回传了cmdId.
设备请求:
{
"funcId":"dev.data.upload.attLog",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"attLogs":[
{
"pin":"2956",
"attState":"255",
"verifyMode":"0",
"workCode":"0",
"punchTime":"2019-07-31T08:59:59+08:00"
}
]
}
}
}
- 回复命令执行结果,见命令回复
查询打卡记录
查询指定时间段内的打卡记录
服务端请求:
{
"funcId":"cmd.data.query.attLog",
"imme":"xxxx",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"startTime":"2019-07-31T00:00:00+08:00",
"endTime":"2019-07-31T23:59:59+08:00"
}
}
}
设备响应:
- 上传时间段内的数据
上传此时间段内的所有打卡记录,入参与上传打卡记录基本一致,仅多回传了cmdId.
设备请求:
{
"funcId": "dev.data.upload.attLog",
"mid": "xxxx",
"payload": {
"params": {
"cmdId":"xxxx",
"attLogs": [{
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T08:59:59+08:00"
}, {
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T08:59:59+08:00"
}]
}
}
}
参数描述详见上传打卡记录
- 回复命令执行结果,见命令回复
重新上传打卡记录
重新上传设备上的所有打卡记录
服务端请求:
{
"funcId":"cmd.data.reupload.attLog",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
设备响应:
重新上传打卡记录
重新上传设备上打卡记录,与上传打卡记录一样,只多传了cmdId
设备请求:
{
"funcId": "dev.data.upload.attLog",
"mid": "xxxx",
"payload": {
"params": {
"cmdId":"xxxx",
"attLogs": [{
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T08:59:59+08:00"
}, {
"pin": "2956",
"attState": "255",
"verifyMode": "0",
"workCode": "0",
"punchTime": "2019-07-31T08:59:59+08:00"
}]
}
}
}
参数描述详见上传打卡记录
- 回复命令执行结果,见命令回复
设备参数命令
设置设备参数
请求规范
服务端请求:
{
"funcId":"cmd.option.set",
"imme":"xxxx",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"option":{
"optionName1":"optionValue1",
"optionName2":"optionValue2"
}
}
}
}
设备响应:
见命令回复
设置门禁参数
请求案例如下,按需设置参数:
{
"funcId": "cmd.option.set",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1",
"option":{
"lockOn": "1",
"doorSensorTimeout": "10",
"doorSensorAlarmTimeout": "5",
"doorSensorMode": "0",
"doorOpenTimezone": "1",
"doorCloseTimezone": "1",
"isHolidayValid": "0",
"localAlarmOn": "1",
"auxOutKeepTime":"255",
"auxOutOption":"1"
}
}
}
}
参数名 | 必填 | 描述 |
---|---|---|
lockOn | 否 | 锁驱动时长,取值范围(单位:秒):0~10,为空时默认为0 |
doorSensorTimeout | 否 | 门磁延时,取值范围(单位:秒):1~255,为空时默认为1 |
doorSensorAlarmTimeout | 否 | 门磁报警延时,取值范围(单位:秒):0~999,为空时默认为0 |
doorSensorMode | 否 | 门磁模式,0:常开型,1:常闭型,2:关闭,为空时默认为0 |
doorOpenTimezone | 否 | 常开时间段,值为门禁时间段中的时间段编号 |
doorCloseTimezone | 否 | 常闭时间段,值为门禁时间段中的时间段编号 |
isHolidayValid | 否 | 节假日是否有效,用于常开/常闭判断中是否增加节假日的判断,取值范围:1:有效,0:无效 |
localAlarmOn | 否 | 本地报警,本地报警开了后,如果出现拆机情况设备会发出报警声 取值范围,1:打开本地报警(默认) 0:关闭本地报警 |
auxOutKeepTime | 否 | 辅助输出开锁时间设置(单位秒,限制1到255秒),默认255,为255表示常开 |
auxOutOption | 否 | 辅助输出类型,取值如下: 0:无 1:触发开门(默认) 2:触发报警 3:触发开门和报警 |
名词解释:
名词 | 解释 |
---|---|
锁驱动时长 | 设备控制电锁处于开启状态的时间长度 |
门磁类型 | 包括三种类型:关闭、常开型、常闭型;关闭指不使用门磁开关,常开指门打开为正常状态, 常闭指门关闭为正常状态。 |
门磁报警延时 | 检测到门磁状态不正常后,相隔一定时间再产生报警信号,这段时间就是门磁报警延时 |
门磁延时 | 门后相隔一定时间检测门磁与门磁开关的状态,如果不一致,则开始报警,这段时间叫做门磁延时 |
设置设备音量
请求案例如下,按需设置参数:
{
"funcId": "cmd.option.set",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1",
"option":{
"volume": "10"
}
}
}
}
参数名 | 必填 | 说明 |
---|---|---|
volume | 是 | 音量大小,取值0~100,0时表示静音,此处取值配合固件,目前是10的倍数 |
设置人脸阈值
请求案例如下,按需设置参数:
{
"funcId": "cmd.option.set",
"imme": "1",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1",
"option":{
"faceMThr": "74",
"faceVThr": "63"
}
}
}
}
参数名 | 描述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
faceMThr | 1:N阈值 在1:N模式下(iT1只有1:N模式)进行人脸比对时,超过默认值时才能比对通过 |
74 | 65 | 120 |
faceVThr | 1:1阈值 在1:1模式下进行人脸比对时,超过默认值时才能比对通过 |
63 | 55 | 120 |
faceEThreshold | 面部登记阀值 在进行面部登记时的匹配值 |
70 | 0 | 100 |
facePitchThreshold | 人脸俯仰角度 人脸登记、比对时的俯视、仰视的角度,超过该值,将会被过滤 |
35 | 0 | 90 |
faceRollYawThreshold | 人脸旋转角度 人脸登记、比对时的左右角度,超过该值,将会被算法过滤 |
25 | 0 | 90 |
modifyClarityCond | 图像质量 人脸登记、比对时的图像质量,值越高,图像要求越清晰 |
40 | 0 | 100 |
faceMinThreshold | 最小人脸像 登记、比对时要求的人脸大小,低于该值将会被过滤。例:本机登记时人站的远近,照片下发登记时,人脸的大小 |
80 | 60 | 180 |
motionDetectSensitivity | 移动侦测灵敏度 从待机到唤醒比对界面的灵敏值,值越大越灵敏,越容易进入比对界面 |
4 | 0 | 10 |
grayThroldValue | 补光灯开启灵敏度 控制补光灯开启的值,值越大,越容易开启补光灯 |
80 | 0 | 100 |
faceLivenessThreshold | 活体检测阈值 判断可见光图像是否为活体的阈值,值越大,可见光防伪越严格 |
50 | 0 | 100 |
enableBioTest | 活体检测开关 利用可见光图像进行活体检测 |
1 | 0 | 1 |
IRLivenessFunOn | 近红外防伪开关 利用近红外图像进行防伪检测 |
0 | 0 | 1 |
WDRStatus | WDR开关 宽动态,场景中特别亮的部位和特别暗的部位同时都能看得特别清楚 |
0 | 0 | 1 |
设置打卡照片参数
人员在设备人脸识别比对时的相关配置
请求案例如下,按需设置参数:
{
"funcId": "cmd.option.set",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1",
"option":{
"punchPhotoFunOn": "1",
"capturePic": "2",
"captureAlarm": "80",
"captureFailInterval": "5",
"captureSuccInterval": "5",
"captureSaveType": "0",
"captureVoiceOn": "0"
}
}
}
}
参数名 | 必填 | 说明 |
---|---|---|
punchPhotoFunOn | 否 | 是否支持打卡照片功能,0:不支持,1:支持 当为0时下面的其他配置与否都无所谓 |
capturePic | 否 | 拍照模式。取值范围: 0:不拍照。 1:拍照不保存。有拍照动作,但是不会生成照片。 2:拍照并保存 。有拍照动作,不管是验证成功还是失败都会生成照片。 3:验证成功保存 。只会在验证成功的时候有拍照动作和生成照片。 4:验证失败保存。只会在验证失败的时候有拍照动作和生成照片。 |
captureAlarm | 否 | 满容量预警阈值。即磁盘空间占用百分比,例如 90,占用比超过 90%就会发出警告 |
captureFailInterval | 否 | 验证失败照片保存频率。单位秒,取值范围0~1000,为空则使用设备默认。 captureFailInterval=5,表示验证没通过的情况下,5秒内只会保存一张考勤照片 |
captureSuccInterval | 否 | 验证成功照片保存频率。单位秒,取值范围0~1000,为空则使用设备默认。 captureSuccInterval=5表示同一个人连续验证时,5秒内只会保存一张考勤照片 |
captureSaveType | 否 | 照片保存方式: 0:彩色和黑白人脸照; 1:彩色人脸照; 2:标清全景照; 3:高清全景照; 为空时则由设备默认 |
captureVoiceOn | 否 | 拍照是否播放拍照音。 0:不播放 1:播放 |
设置门禁二维码参数
{
"funcId": "cmd.option.set",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "1",
"option":{
"qrCodeDecryptType": "2",
"qrCodeDecryptKey": "UkhGaXpuaXE2bjQ3YkxqNFhVVlpMUzF5eVFFVzhTaUo="
}
}
}
}
参数名 | 必填 | 说明 |
---|---|---|
qrCodeDecryptType | 是 | 二维码解密方式。2:利用AES256算法加密; |
qrCodeDecryptKey | 是 | 加密密钥 |
获取设备参数
服务端获取设备参数信息
服务端请求:
{
"funcId":"cmd.option.get",
"imme":"xxxx",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"options":[
"xxxx",
"xxxx"
]
}
}
}
- 上传设备参数
参考上报设备参数
设备请求:
{
"funcId":"dev.option.upload",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
"option":{
"xxxx":"xxxx"
}
}
}
}
请求参数详解:
通用部分见附录1
- 回复命令执行结果,见命令回复
重置设备参数
设备重置分为以服务端为主和以设备端为主,以服务端为主时,服务端自行定义默认配置值,重置时下发对应参数的设备设置指令即可,以设备端为主时,只需下发一条指令,设备端自行根据端侧默认配置进行重置。
此处重置设备参数指令只要指的是以设备端为主的业务场景指令。
重置所有参数
以设备端为主,重置所有设备参数为默认值,即设备参数配置恢复出厂设置
服务端请求:
{
"funcId":"cmd.option.reset",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
}
}
}
设备响应:
见命令回复
人脸参数重置
以设备端为主,重置人脸相关参数为默认值,涉及参数可参考设置人脸阀值
服务端请求:
{
"funcId":"cmd.option.reset.face",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
}
}
}
设备响应:
见命令回复
门禁参数重置
以设备端为主,重置门禁相关参数为默认值,涉及参数可参考设置门禁参数
服务端请求:
{
"funcId":"cmd.option.reset.acc",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
}
}
}
设备响应:
见命令回复
设备音量重置
以设备端为主,重置音量相关参数为默认值,涉及参数可参考设置设备音量
服务端请求:
{
"funcId":"cmd.option.reset.volume",
"imme":"1",
"mid":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx",
}
}
}
设备响应:
见命令回复
命令回复
设备收到服务端下发的命令之后,回复命令执行结果
设备请求:
{
"funcId":"dev.cmd.response",
"mid":"xxxx",
"code":"xxxx",
"message":"xxxx",
"payload":{
"params":{
"cmdId":"xxxx"
}
}
}
请求参数详解:
通用部分见附录1
参数名 | 必填 | 描述 |
---|---|---|
code | 是 | 错误码 |
message | 是 | 错误描述 |
附录
请求规范说明
业务功能命名规范
每个消息都带有业务功能标识,即funcId。
绑定流程请求以及心跳请求格式固定,其他请求数据格式要求如下:
funcId: xxxx.xxxx.xxxx.xxxx
第一个xxxx,请求类型,cmd表示命令下发,dev表示设备请求
第二个xxxx,数据大类,data表示基础数据,option表示参数数据,firmware表示固件数据,system表示系统数据,cmd表示命令数据,control表示控制数据,......
第三个xxxx,操作类型, delete表示删除,upload表示上传,update表示更新,get表示获取,set表示设置,upgrade表示升级,sync表示同步,......
第四个xxxx,数据小类,user表示用户数据,info表示信息,time表示时间,... ...
命令下发规范
命令下发为服务端发起的,funcId约定cmd开头
格式如下:
{
"funcId": "cmd.xxxx",
"imme": "xxxx",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx"
}
}
}
参数说明:
参数名 | 必填 | 描述 |
---|---|---|
funcId | 是 | 请求业务功能唯一标识 |
imme | 否 | 是否紧急,1:紧急,0:不紧急,参数不存在/参数值为空/参数值为0时,则表示消息是不紧急消息,否则为紧急消息 |
mid | 是 | 消息id,消息唯一标识,由字母和数字组成,最高不能超过64位,建议使用uuid |
cmdId | 否 | 仅用于命令请求时以及命令回复时参数必须存在,服务端下发命令的唯一编号 |
设备请求规范
此处包含两个方面
1. 设备主动请求上传数据;
2. 回复服务端下发的命令执行结果集;
请求格式如下:
{
"funcId": "dev.xxxx",
"imme": "xxxx",
"sn": "xxxx",
"mid": "xxxx",
"payload": {
"params": {
"cmdId": "xxxx",
... ...
}
}
}
参数说明:
参数名 | 必填 | 描述 |
---|---|---|
funcId | 是 | 请求业务功能唯一标识 |
imme | 否 | 是否紧急,1:紧急,0:不紧急,参数不存在/参数值为空/参数值为0时,则表示消息是不紧急消息,否则为紧急消息 |
sn | 否 | 仅用于登入过程请求时参数必须存在,设备序列号 |
mid | 是 | 消息id,消息唯一标识,由字母和数字组成,最高不能超过64位,建议使用32位uuid |
cmdId | 否 | 仅用于命令请求时以及命令回复时参数必须存在,服务端下发命令的唯一编号 |
消息回复规范
格式如下:
{
"code": "xxxx",
"message": "xxxx",
"imme": "xxxx",
"mid": "xxxx",
"payload": {
"results": {
}
}
}
参数说明:
参数名 | 必填 | 描述 |
---|---|---|
code | 是 | 返回错误码 |
message | 是 | 返回错误码对应的消息内容 |
imme | 否 | 是否紧急,1:紧急,0:不紧急,参数不存在/参数值为空/参数值为0时,则表示消息是不紧急消息,否则为紧急消息 |
mid | 是 | 消息id,消息唯一标识,由字母和数字组成,最高不能超过64位,建议使用32位uuid |
results | 否 | 若回复需要带其他详细属性,则放置此处 |
验证方式说明
验证方式编码 | 描述 |
---|---|
0 | 指静脉或人脸或指纹或卡或密码 (自动识别) |
1 | 仅指纹 |
2 | 工号验证 |
3 | 仅密码 |
4 | 仅卡 |
5 | 指纹或密码 |
6 | 指纹或卡 |
7 | 卡或密码 |
8 | 工号加指纹 |
9 | 指纹加密码 |
10 | 卡加指纹 |
11 | 卡加密码 |
12 | 指纹加密码加卡 |
13 | 工号加指纹加密码 |
14 | 工号加指纹或卡加指纹 |
15 | 人脸 |
16 | 人脸加指纹 |
17 | 人脸加密码 |
18 | 人脸加卡 |
19 | 人脸加指纹加卡 |
20 | 人脸加指纹加密码 |
21 | 指静脉 |
22 | 指静脉加密码 |
23 | 指静脉加卡 |
24 | 指静脉加密码加卡 |
25 | 掌纹 |
26 | 掌纹加卡 |
27 | 掌纹加面部 |
28 | 掌纹加指纹 |
29 | 掌纹加指纹加面部 |
200 | 其他 |
生物特征类别
0:通用的
1:指纹
2:面部(近红外)
3:声纹
4:虹膜
5:视网膜
6:掌纹
7:指静脉
8:掌静脉
9:面部(可见光)
服务端错误编码
编码值 | 描述 |
---|---|
00000000 | 成功 |
S00E0001 | 权限不足 |
S00E0002 | devKey不匹配 |
S00E0003 | 授权码不匹配 |
S00E0004 | 登录密码不匹配 |
其他 | 待定 |
设备错误编码
编码值 | 描述 |
---|---|
00000000 | 成功 |
其他 | 待定 |
生物具体个体编号
指纹编号 | 描述 |
---|---|
0 | 左手小拇指 |
1 | 左手无名指 |
2 | 左手中指 |
3 | 左手食指 |
4 | 左手拇指 |
5 | 右手拇指 |
6 | 右手食指 |
7 | 右手中指 |
8 | 右手无名指 |
9 | 右手小拇指 |
指静脉编号 | 描述 |
---|---|
0 | 左手小拇指 |
1 | 左手无名指 |
2 | 左手中指 |
3 | 左手食指 |
4 | 左手拇指 |
5 | 右手拇指 |
6 | 右手食指 |
7 | 右手中指 |
8 | 右手无名指 |
9 | 右手小拇指 |
虹膜编号 | 描述 |
---|---|
0 | 左眼 |
1 | 右眼 |
掌静脉编号 | 描述 |
---|---|
0 | 左手 |
1 | 右手 |