人脸识别测温健康码核验设备API接口协议发布
人脸设备对接说明:
- 本协议适用于使用http协议的PC客户端系统或者局域网web系统或者云端web系统。譬如智慧社区平台、疫情防控平台、校园出入管控平台、工地劳务实名制平台等等。(以下简称第三方平台系统)。
- 第三方平台系统需根据本协议来开发其平台的接口,开发完成后,将其平台地址(可以是局域网地址)配置在设备上,设备即可与第三方平台系统建立连接、开始测试。
一、设备登陆第三方平台(登陆)
设备请求第三方平台的参数:
参数名称 | 参数类型 | 说明 | 值 |
lockMac | String | 设备MAC地址 | 22:4a:34:73:3d:df |
示例:{LOCKMAC=0c:65:fa:00:31:95, FKEY=9676f42ac7e6c3309661af5f9060ec91, TIMESTAMP=1568894264141}
第三方平台需返回的值:
code | 标识码(0-成功, 1-未找到设备, 2-异常) |
msg | 描述信息 |
data | JSONObject对象,包含设备的信息 |
data参数具体内容:
data对象包含的字段 | 数据类型 | 说明 |
id | int | 设备行ID |
entId | int | 所属企业ID |
deviceName | String | 设备名称 |
deviceMac | String | 设备MAC |
deviceType | String | 设备类型(W:云对讲) |
deviceFunction | String | 门禁功能 F:刷脸开门 P:人证比对 |
deviceArea | String | 安装区域 G:大门 D:部门 |
deviceLocation | String | 安装位置 |
deptId | int | 部门ID(当设备安装区域为”部门”时,则有值,否则为0) |
faceMaskDetect | String | 是否开启口罩检测F:否,T是 |
animalHeatVpt | String | 体温阈值 |
faceMaskVpt | String | 口罩检测阈值 |
deviceReaderType | String | 读头类型(1:无,2:IC读卡,3:身份证二合一) |
deviceFunctionType | String | 应用场景(0:员工专用,1:访客专用,2:混用-人脸开门,3:混用-人证比对) |
city | String | 城市 |
二、设备从第三方平台获取白名单
接口名: http://平台地址/getPersonFaceImg
设备请求第三方平台的参数: 加密:【NTIID + DEPTID + TIMESTAMP + FKEY】
参数名称 | 参数类型 | 说明 |
lockMac | String | 设备MAC地址 |
entId | Int | 企业ID |
deptId | Int | 部门ID(当设备安装区域为”大门”时,该值为0 |
示例:{LOCKMAC=0c:65:fa:00:31:95, ENTID=4, DEPTID=0, FKEY=f6e32c35bc110f1319d9aec061604694, TIMESTAMP=1568894435349}
第三方平台需返回的值:
code | 标识码(0-成功, 1: 没有记录, 2-异常 ) |
msg | 描述信息 |
data | JSONArray对象,包含员工及访客的信息与人脸图片下载路径 |
data参数具体内容:
data对象包含的字段 | 数据类型 | 说明 |
userType | String | 用户类型(S-员工,V-访客) |
entId | int | 企业ID |
deptName | String | 部门名称(访客则该字段为””) |
userId | Int | 员工ID或者访客ID |
userName | String | 姓名 |
userCode | String | 工号(访客则该字段为””) |
userMobile | String | 手机号 |
userIdCard | String | 身份证号 |
userFaceImgPath | String | 人脸图片相对路径(设备端会使用平台访客地址+该字段 拼凑一个完整的URL进行图片下载)如:"staff-images/407693361285693440.jpg" |
startValidity | String | 开始有效期(1586765940000) |
endValidity | String | 结束有效期(1586765940000) |
补充说明:该接口采用定时请求第三方平台的机制。在设备端可以设置请求的间隔时间,譬如1分钟、5分钟、10分钟、30分钟等等。当第三方平台有新增或者删除白名单,设备端拉取后即对应更新本地白名单人脸库。
三、设备向第三方平台上传通行记录
接口名: http://平台地址/uploadAccessRecord
设备请求第三方平台接口的参数:加密【LOCKMAC + USERID + USERTYPE + TIMESTAMP + FKEY】
参数名称 | 参数类型 | 说明 |
lockMac | String | 设备MAC地址 |
entId | Int | 企业ID |
userType | String | 人员类型(S-员工,V-访客) |
deptName | String | 部门名称 |
userId | Int | 人员ID |
userName | String | 姓名 |
userCode | String | 工号 |
userMobile | String | 手机号 |
accessType | String | 开门类别 F:刷脸开门 P:访客人证比对 S:刷卡 |
accessTime | String | 通行时间(以时间戳格式上传,毫秒) |
snapImg | String | 抓拍图片,Base64码上传 |
ANIMALHEAT | String | 体温值 |
JKMCODE | String | 健康码(绿色、黄色、红色) |
(示例参数:对接时找设备厂家提供)
第三方平台需返回的值:
code | 标识码(0-成功, 1-保存失败, 2-异常 ) |
msg | 描述信息 |
四,设备从第三方平台获取门禁卡信息
接口名: http://项目地址/getStaffCardByEndId
示例参数:{ENTID=4, DEPTID=0, FKEY=4def2e592f0e4583905783fc29191da2, TIMESTAMP=1568895302077}
设备请求第三方平台的参数:
参数名称 | 参数类型 | 说明 |
entId | Int | 企业ID 【校验字段】 |
DEPTID | Int | 部门ID |
第三方平台需返回值:
code | 标识码0-成功 500-失败 |
msg | 描述信息 |
Cards | 门禁卡信息集 |
五、设备端定时请求第三方平台【心跳】
接口名: http://平台地址/updateLastConnectTime
示例参数:{DEVICEMAC=0c:65:fa:00:31:95, VERSIONNUMBER=103, FKEY=428a9d9d0733f8da855f3b43b5116f53, TIMESTAMP=1568895397711}
设备请求第三方平台接口的参数:
参数名称 | 参数类型 | 说明 |
DEVICEMAC | Int | 设备MAC 【校验字段】 |
VERSIONNUMBER | Int | 设备 版本号 |
第三方平台返回的值:
code | 标识码0-成功 500-失败 |
msg | 描述信息 |
(心跳时间间隔为10分钟)
附:第三方平台接口开发的加密方法:
说明: 上述每个接口中 TIMESTAMP和FKEY 必传, FKEY = 红色字体字段 +
TIMESTAMP + 密钥值 的结果 。
密钥值: (联系人脸设备厂家)
加密字段: String md5 = MD5.md5( "要加密的字段" + "时间戳" + "密钥
值");
加密方法:
public static String md5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
str = buf.toString();
} catch (Exception e) {
e.printStackTrace();
}return str;
}
测试加密结果: 加密前: 81537428614803p!P2QklnjGGaZKlw 加密后:
b4f67eb67890250d78716afd7c213147