可视对讲门禁接入 Android 版

更新时间:2024-08-20 10:28:38下载pdf

本文介绍了 Android 版本的涂鸦智慧行业可视对讲门禁接入。

关键术语

序号 术语 说明
1 cid 门禁设备 ID,设备的唯一编号
2 sn 下发 DP 点的唯一编号
3 atop 接口 涂鸦对外提供的 HTTPS 接口
4 下发 云端指令通过 MQTT 消息通知给设备
5 上报 设备端消息通过 atop 接口或 MQTT 消息上报至云端

整体架构

可视对讲门禁接入 Android 版

本文档仅支持直连设备的接入方式,即门禁设备内置 Tuya IPC SDK 的方式。

业务流程

可视对讲门禁接入 Android 版

功能点列表

序号 功能点 说明
1 设备配网 设备配网完成后,才能接收云端的指令,和云端进行交互
2 视频通话 包含发起呼叫、接听、挂断
3 住户操作 包括住户的新增、更新、移除、禁用、启用
4 人脸操作 包括人脸的新增、更新、移除
5 门禁卡操作 包括门禁卡的新增、更新、移除
6 二维码操作 包括二维码的新增、更新、移除
7 远程开门 用户通过 App,下发开门指令给门禁设备,门禁设备收到开门指令后,打开门并上报通行记录
8 通行事件上报 门禁设备识别到有人通行,上报通行记录
9 评估人脸照片分数 服务端评估抓拍的人脸照片分数,仅在酒店前台登记客户时使用
10 动态刷新住户通行二维码 除支持下发的二维码通行以外,增加了对动态可刷新二维码通行的支持
11 门禁通行密码操作 包括通行密码的新增、更新、移除

对接流程

依赖配置

  implementation 'com.squareup.okhttp3:okhttp:3.14.0'
  implementation 'org.apache.commons:commons-lang3:3.3.2'

下载集智社区 App

应用商店下载集智社区 App,通过集智社区 App 建立起和设备之间的音视频通话。

设备引入涂鸦 EDGE IPC SDK

请参考:

涂鸦 EDGE 门禁 SDK 及 Demo

进行设备配网,初始化配置

申请私钥

向涂鸦申请私钥,申请的私钥用来对配网信息进行解密。

设备扫码

  1. 二维码的生成地址 向涂鸦申请测试账号。

  2. 使用设备扫描施工 App 二维码,进行设备配网。二维码信息格式如下:

    {
        "t":"AYRfQ***",
        "a":"a1-cn***",
        "key":"1168***"
    }
    

    二维码生成后,10 分钟就会过期。

  3. 设备根据 a、key 和 CID 调用接口,获取二维码的内容并解密,解密结果转为 qrcodeMap。

    //查询配网信息
    NetQrcodeVO netQrcodeVO = AtopFacade.getInstance().queryQrcodeInfo(a, key, cid);
    //对配网信息进行解密
    String qrcodeInfo = AESUtils.decrypt(netQrcodeVO.getData(), secret);
    
    //组装 qrcodeMap;
    Map<String, String> qrcodeMap = JSON.parseObject(qrcodeInfo, new TypeReference<HashMap<String, String>>() {});
    qrcodeMap.put(QrcodeEnum.TOKEN.getCode(), t);
    

初始化 SDK

    /**
     * 扫二维码配网及设备重启时调用
     *
     * @param ctx       系统上下文
     * @param cid       三方设备 ID,不同的设备唯一
     * @param qrcodeMap   二维码信息 Map
     * @param basePath    可写的一个路径,用于存储 SDK 相关的配置,建议 App 存储目录
     * @param recordPath    可写的一个路径,用于存储录像,建议 sd 卡
     * @param properties    实现类的配置
     * @param paramConfigCallBack     音视频参数设置回调
     */
    public void initSDK(Context ctx, String cid, Map<String,String> qrcodeMap,
          String basePath, String recordPath, Properties properties,
          MediaParamConfigCallback paramConfigCallBack)

关于 qrcodeMap 的 key,请参见 QrcodeEnum 中的 code, 其中 t、 PID、 UUID、authKey 在配网成功后,需要写入系统。保证设备重启、断电或恢复出厂设置后,还能重新获取,从而连上云端。

判断设备是否配网成功

 SharedPreferences sp = ctx.getSharedPreferences("edge_config",Context.MODE_PRIVATE);
 boolean isBind = sp.getBoolean("bind_status",false);

如果 isBind = true 即为配网成功。

初始化门禁接口实现类

properties 的 key 请参见下面的示例,其中的 value 是三方接口实现类的路径。初始化后的实现类才会被调用。

    Properties properties = new Properties();
    //可视对讲事件处理
    properties.put("dc_talk", "com.tuya.ai.ipcsdkdemo.edge.TalkReceiveEventImpl");
    //远程开门事件处理
    properties.put("dc_door", "com.tuya.ai.ipcsdkdemo.edge.DoorReceiveEventImpl");

    //人员事件处理
    properties.put("dc_userInfo", "com.tuya.ai.ipcsdkdemo.edge.TenementReceiveEventImpl");
    //人脸事件处理
    properties.put("dc_faceInfo", "com.tuya.ai.ipcsdkdemo.edge.TenementReceiveEventImpl");
    //人卡事件处理
    properties.put("dn_cardInfo","com.tuya.ai.ipcsdkdemo.edge.CardReceiveEventImpl");
    //二维码事件处理
    properties.put("dc_qrCodeInfo","com.tuya.ai.ipcsdkdemo.edge.QrCodeReceiveEventImpl");
    //密码通行事件处理
    properties.put("dc_passPwd","com.tuya.ai.ipcsdkdemo.edge.PassPwdReceiveEventImpl");
    //数据清理事件处理
    properties.put("dc_dataClear", "com.tuya.ai.ipcsdkdemo.edge.DataClearEventImpl");
    //时间同步事件处理
    properties.put("dc_timeSync", "com.tuya.ai.ipcsdkdemo.edge.TimeSyncEventImpl");

实现接口

IPC SDK 已经将云端下发的指令封装成了接口,三方只需要实现具体的接口,详情请查看 接口列表

接口说明

视频通话

//开启视频通话、接听、挂断时调用
AtopFacade.getInstance().sendControlProtocol(controlProtocolRequest);

调用方法

接口 方法
AtopFacade sendControlProtocol

请求参数

参数名 类型 说明 是否必传
controlProtocolRequest ControlProtocolRequest 请求对象

ControlProtocolRequest 说明

参数名 类型 说明 是否必传
SN String SN 号,除呼叫以外,其它模式都需要设置;设置的值为呼叫时返回的 SN
mode String 设备模式,如门铃:ac_doorbell
type String 操作类型,见详细说明
deviceId String 涂鸦设备 ID
targetAddress String 目标地址格式:01-01-01-01-01-01,表示 01 小区 01 苑 01 幢 01 单元 01 层 01 号房间。没有则传 00,比如没有苑,苑的位置传 00。
extend String 通话后挂断返回 JOSN 字符串:{“beginTime”:1592373736,“endTime”:1593373736}
  • beginTime:通话接听时间
  • endTime:通话结束时间,时间类型为 long

返回参数

类型 说明
String SN 号

操作类型详细说明

操作类型 场景 操作
1 设备呼叫 App 和室内机。 设备发送 type=1 事件
3 设备呼叫 App 和室内机,设备主动挂断,App 或室内机不操作。 设备发送 type=3 事件如果 App 已接听,需要传 extend
4 设备呼叫 App 和室内机,App 或室内机未接听,呼叫时间超过设备限定,设备挂断。设备限定呼叫超时时间默认 30s。 设备发送 type=4 事件
5 设备呼叫 App 和室内机,App 或室内机接听后,App 或室内机挂断。SDK 会有回调事件给设备。 设备发送 type=5 事件,需要传 extend
6 设备呼叫 App 和室内机,App 或室内机接听。SDK 会有回调事件给设备。 设备发送 type=6 事件
7 设备呼叫 App 和室内机,App 或室内机接听后,通话时间超过设备限定,设备挂断。设备限定通话超时时间默认 90s。 设备发送 type=7 事件,需要传 extend

通行记录上报

//通过该接口上报门禁通行事件
MqttEventSupport.getInstance().publishThirdEvent(thirdEventRequest);

调用方法

接口 方法
AtopFacade publishThirdEvent

请求参数

参数名 类型 说明 是否必传
thirdEventRequest ThirdEventRequest 请求对象

ThirdEventRequest 说明

参数名 类型 说明 是否必传
UID String 用户 ID
operTime String 事件发生时间
way int 开门方式
  • 1:卡
  • 2:密码
  • 3:二维码
  • 4:人脸
  • 5:指纹
  • 6:红外感应
  • 8:蓝牙
  • 9:远程
  • 10:其它
imageId String 图片文件 ID,请参见 获取图片 ID 的接口
passPwd String 通行密码(密码通行方式下必传)
cardNo String 卡号
temp String 体温
passType Integer 通行类型
  • 1:进
  • 2:出
location String 位置信息
isSuccess boolean 是否成功
  • true:成功
  • false:失败
message String 消息提示(错误原因)

返回参数

类型 说明
boolean
  • true:调用成功
  • false:调用失败

门禁告警上报

//通过该接口上报门禁告警事件
MqttEventSupport.getInstance().publishDoorAlarmEvent(thirdDoorAlarmRequest);

调用方法

接口 方法
MqttEventSupport publishDoorAlarmEvent

请求参数

参数名 类型 说明 是否必传
thirdDoorAlarmRequest ThirdDoorAlarmRequest 请求对象

ThirdDoorAlarmRequest 说明

参数名 类型 说明 是否必传
alarmId String 告警 ID
alarmType Integer 告警类型。
  • 1:防拆报警
  • 2:陌生人报警
  • 3:尾随
  • 4:逗留
  • 5:反潜
  • 10:其它
alarmCont String 告警值
imageId String 图片文件 ID,请参见 获取图片 ID 的接口
happenTime Long 告警发送时间
confirmEnable Boolean 处理状态。
  • true:已处理
  • false:未处理
extendData String 扩展信息 Json 类型

extendData Json字段说明

参数名 类型 说明 是否必传
taggerType Integer 尾随者类型,告警类型为尾随类型时须传(alarmType=3 时须传)。
  • 1:家人
  • 2:陌生人

返回参数

类型 说明
boolean
  • true:调用成功
  • false:调用失败

上传图片

//通过该接口上报图片,上传的图片格式默认为 jpg
String fileId = AtopFacade.getInstance().uploadImageFile(fileBytes);

调用方法

接口 方法
AtopFacade uploadImageFile

请求参数

参数名 类型 说明 是否必传
fileBytes byte[] 图片的字节数组

返回参数

类型 说明
String 图片文件 ID

评估人脸照片分数

对门禁抓拍的人脸照片进行评估,返回人脸照片分数。对抓拍的人脸照片进行评分,确认照片合格后,下发到其它门禁。

//人脸评分
FaceScoreVO faceScoreVO = AtopFacade.getInstance().evaluateFaceQuality(fileId);

调用方法

接口 方法
AtopFacade evaluateFaceQuality

请求参数

参数名 类型 说明 是否必传
fileID String 图片文件 ID

返回参数

类型 说明
FaceScoreVO 人脸评分结果对象

FaceScoreVO 说明

参数名 类型 说明 是否必传
value Double 人脸评分阀值范围 0~10,8 分以上为识别成功
url String 人脸照片 URL

住户通行权限校验

住户通行权限校验步骤:

  1. 住户需要先通过门禁卡、人脸或二维码验证。
  2. 验证失败则不允许通行。
  3. 验证成功则调用住户通行权限校验接口进行校验,即进行健康码认证,获取住户健康码状态。
  4. 若健康码为黄码或红码则不允许通行,若健康码为绿码或没有健康码则允许通行。
//健康码校验
HealthCodeVO healthCodeVO = AtopFacade.getInstance().checkHealthCode(UID, deviceId, verifyTypeList);

调用方法

接口 方法
AtopFacade checkHealthCode

请求参数

参数名 类型 说明 是否必传
UID String 用户 ID
deviceID String 涂鸦设备 ID
verifyTypeList List<Integer> 验证类型列表
  • 1:健康码认证

返回参数

类型 说明
HealthCodeVO 健康码结果对象

HealthCodeVO 说明

参数名 类型 说明 是否必传
UID String 用户 ID
extend String JSON 字符串,如{“healthCode”:“unknown”}

extend 字段说明

验证类型 extend 描述
1 返回 healthCode 字段
  • unknown:未知,内部异常或没有健康码
  • red:红码
  • green:绿码
  • yellow:黄码

待三方实现的接口说明

新增住户

该接口需要支持幂等,即同一个 UID 住户新增成功后,还支持再次新增,再次新增返回成功。

调用方法

接口 方法
TenementReceiveEvent addTenement

请求参数

参数名 类型 说明 是否必传
tenementRequest TenementRequest 请求对象
eventContext EventContext 上下文会话

EventContext 说明

参数名 类型 说明 是否必传
gatewayId String 涂鸦边缘网关设备 ID
deviceId String 涂鸦设备 ID
deviceName String 涂鸦设备名称
cid String 三方设备 ID
commType String 设备接入类型(MQTT,HTTP)
deviceIp String 设备 IP
macAddress String 设备 MAC 地址
productType String 品类
productId String 产品 ID
installLocation String 设备安装地点
deviceDesc String 设备描述
activeStatus String 设备状态
  • 0:未配网
  • 1:已配网
extendData String 扩展信息,json串

TenementRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
name String 涂鸦用户名
idCard String 证件 ID
phone String 手机号
beginTime Long 有效期开始时间,13 位时间戳
endTime Long 有效期结束时间,13 位时间戳
timeRuleList List<TimeRuleInfo> 时间规则列表
userFloor Integer 住户所在楼层,边缘侧呼梯时使用,需要设备端支持
secretKey String 用户秘钥,长度 32 位,建议 UUID 生成;App 端和设备端基于同一个秘钥生成动态二维码
refreshTime Long 二维码刷新时间,默认 5 分钟, 单位毫秒
extend String 扩展信息, json 字符串

TimeRuleInfo 说明

参数名 类型 说明 是否必传
ruleId String 规则 ID
ruleName String 规则名称
period String 可通行时间周期,json 字符串,例如: [{“weekDay”:1,“weekTime”:[{“start”:“32400000”,“end”:“64800000”}]},{“weekDay”:2,“weekTime”:[{“start”:“68400000”,“end”:“75600000”}]}]
allowedDate String 可通行时间段,json 字符串,例如:[{“start”:“1571587200000”,“end”:“1864569600000”},{“start”:“1573022801885”,“end”:“1864569600000”}]
deniedDate String 不可通行时间段, json 字符串,例如:[{“start”:“1571587200000”,“end”:“1864569600000”},{“start”:“1573022801885”,“end”:“1864569600000”}]

如果 beginTime 和 endTime 不为空,则住户有效期取 beginTime 和 endTime,否则以 timeRuleList 为准,timeRuleList 最大长度支持 3 条。

时间段规则说明

  • period:可通行时间周期:可以指定在一周中哪些时间允许进行

  • weekDay:用 1 到 7 分别表示周一到周日,开始时间、结束时间用距离 0 点相隔的毫秒数表示,比如 32400000 表明是 9 点。如 [{“weekDay”:1,“weekTime”:[{“start”:“32400000”,“end”:“64800000”}]},{“weekDay”:2,“weekTime”:[{“start”:“684000000”,“end”:“75600000”}]}] 表明的含义是 周一 9:00~18:00,周二 19:00~21:00 可通行,

  • allowedDate:可通行时间段,13 位时间戳表示

  • deniedDate:不可通行时间段,13 位时间戳表示

  • 时间优先级:不可通行时间段 > 可通行时间段 > 可通行时间周期
    先判断访问时间是否在 不可通行时间段 中,若在则不允许通行。再看访问时间是否在 可通行时间段 中,若在其中则允许通行,若不在其中,则继续判断是否在 可通行时间周期 中,若在其中则允许通行。若都不在以上两者中,则不能通行。
    时间规则判断可以参考或使用 com.tuya.edge.utils.RuleCheckUtils 工具类。

返回参数

类型 说明
BaseResult 返回结果

BaseResult 说明

参数名 类型 说明 是否必传
success boolean 是否返回成功
  • true:成功
  • false:失败
code String 返回 code
msg String 返回 msg
data Object 返回数据

更新住户

调用方法

接口 方法
TenementReceiveEvent modifyTenement

请求参数

参数名 类型 说明 是否必传
tenementRequest TenementRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

删除住户

调用方法

接口 方法
TenementReceiveEvent removeTenement

请求参数

参数名 类型 说明 是否必传
removeTenementRequest RemoveTenementRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

RemoveTenementRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

住户通行授权

调用方法

接口 方法
TenementReceiveEvent enableTenement

请求参数

参数名 类型 说明 是否必传
enableTenementRequest EnableTenementRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

EnableTenementRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
enable Integer 启用/禁用
  • 0:禁用
  • 1:启用
默认添加的住户通行授权启用状态,住户通行状态一旦改为禁用,则用户通过人脸、二维码、门禁卡均不能通行

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

新增人脸

该接口需要支持幂等,即同一个 faceId 人脸照片新增成功后,还支持再次新增,再次新增时返回成功。

调用方法

接口 方法
FaceImageReceiveEvent addFaceImage

请求参数

参数名 类型 说明 是否必传
faceImageRequest FaceImageRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

FaceImageRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
faceId String 人脸 ID
url String 人脸照片地址

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

更新人脸

调用方法

接口 方法
FaceImageReceiveEvent modifyFaceImage

请求参数

参数名 类型 说明 是否必传
faceImageRequest FaceImageRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

移除人脸

调用方法

接口 方法
FaceImageReceiveEvent removeFaceImage

请求参数

参数名 类型 说明 是否必传
removeFaceImageRequest RemoveFaceImageRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

RemoveFaceImageRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
faceId String 人脸 ID

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

新增门禁卡

调用方法

接口 方法
CardReceiveEvent addCard

请求参数

参数名 类型 说明 是否必传
cardRequest CardRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

CardRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
cardNo String 门禁卡号

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

该接口需要支持幂等,即同一个 cardNo 卡新增成功后,还支持再次新增,再次新增时返回成功。门禁须限制用户单个门禁卡,同个用户新增第二个门禁卡时,结果应返回失败。

更新门禁卡

用户限制单个门禁卡,更新门禁卡先清空该用户原先门禁卡,再新增。

调用方法

接口 方法
CardReceiveEvent modifyCard

请求参数

参数名 类型 说明 是否必传
cardRequest CardRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

移除门禁卡

调用方法

接口 方法
CardReceiveEvent removeCard

请求参数

参数名 类型 说明 是否必传
removeCardRequest RemoveCardRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

RemoveCardRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
cardNo String 被删除门禁卡号

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

门禁卡启/禁用

调用方法

接口 方法
CardReceiveEvent enableCard

请求参数

参数名 类型 说明 是否必传
enableCardRequest EnableCardRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

EnableCardRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
enable Integer 启用/禁用
  • 0:禁用
  • 1:启用

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

新增二维码

该接口需要支持幂等,即同一个 qrCode 新增成功后,还支持再次新增,再次新增时返回成功。门禁须限制用户单个二维码,同个用户新增第二个二维码时,结果应返回失败。

调用方法

接口 方法
QcCodeReceiveEvent addQcCode

请求参数

参数名 类型 说明 是否必传
qrCodeRequest QrCodeRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

QrCodeRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
qrCode String 二维码 Code,二维码的有效期同住户的有效期

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

更新二维码

用户限制单个二维码,更新二维码先清空该用户原先二维码,再新增。

调用方法

接口 方法
QcCodeReceiveEvent modifyQcCode

请求参数

参数名 类型 说明 是否必传
qrCodeRequest QrCodeRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

移除二维码

调用方法

接口 方法
QcCodeReceiveEvent removeQcCode

请求参数

参数名 类型 说明 是否必传
removeQrCodeRequest RemoveQrCodeRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

RemoveQrCodeRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

远程开门

远程开门不需要校验用户权限,即设备收到远程开门调用后,就会进行开门操作,而不会校验住户信息。

调用方法

接口 方法
DoorReceiveEvent openDoor

请求参数

参数名 类型 说明 是否必传
doorRequest DoorRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

DoorRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

设备数据清空

一键清空设备数据,例如:人、人脸、卡及密码等信息。设备返厂维修或初始化设备场景下使用。

调用方法

接口 方法
DataClearEvent clearData

请求参数

参数名 类型 说明 是否必传
doorDataClearRequest DoorDataClearRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

DoorDataClearRequest 说明

参数名 类型 说明 是否必传
all Boolean 是否清空全量数据
person Boolean 是否清空人员数据
face Boolean 是否清空人脸数据
card Boolean 是否清空卡号数据
qrcode Boolean 是否清空二维码数据
passPwd Boolean 是否清空通行密码数据
other Boolean 是否清空其他数据

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

设备时间同步

设备时间同步,云端下发时间给设备,使设备时间与云端时间进行同步。

调用方法

接口 方法
TimeSyncEvent syncTime

请求参数

参数名 类型 说明 是否必传
doorTimeSyncRequest DoorTimeSyncRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

DoorTimeSyncRequest 说明

参数名 类型 说明 是否必传
timestamp Long 时间戳

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

门禁启/禁用

1、若禁用设备功能,则刷卡、密码、二维码、人脸、指纹、远程开门等功能不可用。

2、若启用设备功能,则刷卡、密码、二维码、人脸、指纹、远程开门等功能可用。

调用方法

接口 方法
CustomReceiveEvent receiveCustomInfo

请求参数

参数名 类型 说明 是否必传
customRequest CustomRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

CustomRequest 说明

参数名 类型 说明 是否必传
sn String 请求唯一标识
bizType String 业务类型,默认值:maintain
operateType String 操作类型,默认值:enable_disable_device
extendData String JSON 字符串,如: {“value” :1},value:
  • 1: 启用
  • 0: 禁⽤

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

新增门禁通行密码

用户支持多个通行密码,不同用户间通行密码允许相同。
该接口需要支持幂等,当同一个用户重复新增同一个通行密码时返回成功。

调用方法

接口 方法
PassPwdReceiveEvent addPassPwd

请求参数

参数名 类型 说明 是否必传
passPwdRequest PassPwdRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

PassPwdRequest 说明

参数名 类型 说明 是否必传
uid String 涂鸦用户 ID
passPwd String 门禁通行密码

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

更新门禁通行密码

修改用户通行密码,如果用户下不存在被修改的通行密码(oldPassPwd),需返回失败。

调用方法

接口 方法
PassPwdReceiveEvent modifyPassPwd

请求参数

参数名 类型 说明 是否必传
passPwdRequest PassPwdRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

移除门禁通行密码

移除用户通行密码,如果用户下不存在被删除的通行密码(passPwd),需返回失败。

调用方法

接口 方法
PassPwdReceiveEvent removePassPwd

请求参数

参数名 类型 说明 是否必传
passPwdRequest PassPwdRequest 请求对象,请参见 参数说明
eventContext EventContext 上下文会话,请参见 参数说明

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

业务方挂断可视对讲门禁

可视门禁收到挂断指令后,中断视频流传输。

调用方法

接口 方法
CallRefuseEvent callRefuse

请求参数

参数名 类型 说明 是否必传
callRefuseRequest CallRefuseRequest 请求对象
eventContext EventContext 上下文会话,请参见 参数说明

QrCodeRequest 说明

参数名 类型 说明 是否必传
type Integer 挂断类型。1:全量 app 拒接,业务方主动挂断
mes String 挂断原因

返回参数

类型 说明
BaseResult 返回结果,请参见 参数说明

其它

二维码识别功能

设备端需要支持两种二维码格式:

  • 1.0 版本的二维码格式:

    7421371370865597349888943036
    
  • 2.0 版本的二维码格式:

    {
      "qrcode": "YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY=" //value:Base64 编码后字符串
    }
    

设备扫描二维码后的校验步骤:

  1. 根据二维码的内容判断二维码是 1.0 版本还是 2.0 版本。

  2. 如果是 1.0 版本,直接和住户的二维码进行比较,比较成功则允许通行。

  3. 如果是 2.0 版本,则先通过 Base64 方法对内容进行解码,解析出二维码信息。

  4. 进行静态二维码对比校验,二维码信息和住户的二维码进行比较,比较成功并且在有效期则允许通行。

  5. 如果比对失败则通过动态二维码验证接口进行验证, 验证成功则允许通行, 验证失败则不允许通行。

动态二维码验证接口

TOTPUtils.java

    /**
     * 动态二维码验证
     *
     * @param UID    涂鸦用户 ID
     * @param secretKey      用户秘钥,32 位字符串
     * @param willVerifyTotp 待验证的二维码信息
     * @param refreshTime    二维码刷新时间
     * @return boolean       二维码验证结果
     */
    public static boolean verifyTOTPFlexibility(String UID,String secretKey,String willVerifyTotp, Long refreshTime)

2.0 版二维码示例

二维码内容
{
  "qrcode": "YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY=" //value:Base64 编码后字符串
}

YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY= Base64 解码后获得字符串
"ay16110581781387***|e4af***"

用户 id: ay16110581781387***
二维码信息: e4af***

1. 首先根据用户 ID 获取静态二维码进行对比.
2. 如果对比失败,则进行动态二维码校验。
   二维码刷新时间为: 5 * 60 * 1000
3. 再根据用户 ID 查询到用户的秘钥 secretKey
4. 然后调用动态二维码验证接口 TOTPUtils.verifyTOTPFlexibility
  如果返回 true,则校验通过.

门禁卡识别功能

门禁设备需支持读取门禁卡功能。住户卡号数据在门禁卡第 7 扇区,门禁从门禁卡第 7 扇区读取门禁卡后,与设备内住户门禁卡对比,若对比成功,则门禁刷卡成功。