# fingerprint **Repository Path**: mrbian/fingerprint ## Basic Information - **Project Name**: fingerprint - **Description**: 互联网指纹打卡机后台 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 互联网指纹打卡机 ## 工作流程 每一个打卡机都有一个唯一的PSK,测试阶段设备的PSK为"b3VyZWRh"。 打卡机有一个按钮,负责录入功能,按一次进入录入状态,按第二次取消录入。 打卡机通过手机连入WiFi后,开始进行**heartbeat心跳检测**,每次心跳检测都会返回员工数据库最新一次修改的时间,打卡机比对后选择是否应该拉取最新的数据。 打卡机按下录入按钮后,进入录入指纹状态,员工录入指纹后,打卡机请求**上传指纹接口**,请求成功后打卡机退出录入指纹状态。 手机在打卡机录入一次指纹后,在输入设备背后的PSK后,可以通过小程序编辑姓名、工号、手机信息,将这些信息上传到**员工创建接口**,系统会自动将打卡机上传的指纹与手机上传的信息结合起来。 打卡机在正常工作状态下,员工按压第一次指纹为签到,按压第二次为签退。 ## 数据格式 手机API和打卡机API的数据返回格式相同,如下: ``` { "status":1, // status为0表示请求错误,status为1表示请求成果 "error":"none", // 请求错误时的提示信息 "msg":{}, // 请求成功时的返回数据 "code":1 // 请求错误时的错误代码 } ``` 错误代码及其含义如下: |code|含义| |---|---| |42|日期不合法,非当天日期| |43|打卡失败,此员工不存在| |44|设备尚未录入指纹,请先录入指纹| |45|指纹或指纹Id已使用,创建失败| |46|数据库内没有此指纹id对应的用户| |47|psk未注册| |48|当前数据库内没有用户| |49|手机号格式不正确| |50|工号重复| ## 硬件端API ### 指纹上传接口 ***URL*** : /uploadFingerPrint ***Method*** : POST ***NeedParams*** : ``` POST参数 : fingerprint bytes数组 psk 设备的唯一ID(用"b3VyZWRh") ``` ***Example*** ``` POST http://139.129.42.180:8080/uploadFingerPrint ``` ***Return*** ``` { "status":1, "error":"none", "msg":{ "fingerprint_id" : 12 }, "code":1 } ``` ***说明*** 正常情况下status为1即上传成功,会返回指纹在数据库内对应的指纹模板id。 边缘情况为code 45,某指纹已被使用,数据库内指纹不允许重复。 ### 心跳检测接口 ***URL*** : /heartbeat ***Method*** : POST ***NeedParams*** : ``` POST参数 : psk 设备的唯一ID(用"b3VyZWRh") ``` ***Example*** ``` POST http://139.129.42.180:8080/heartbeat ``` ***command working Return*** ``` { "status":1, "error":"none", "msg":{ "lasted_modified_time":"1524640394000", "time_now":"1524640394556", "command":"working", "data":{} }, "code":1 } ``` ***command delete Return*** ``` { "status":1, "error":"none", "msg":{ "lasted_modified_time":"1524640395000", "time_now":"1524640419402", "command":"delete", "data":{ "fingerprint_id":11 } }, "code":1 } ``` ***说明*** 当前有"working"、"delete"命令,每一个命令都有自己的data域。delete命令附带需要删除的指纹模板的id。 ### 获取最新的员工数据接口 ***URL*** : /completeData ***Method*** : POST ***NeedParams*** : ``` POST参数 : native_lasted_modified_time 本地的最新的员工数据库的修改时间 ``` ***Example*** ``` POST http://139.129.42.180:8080/completeData ``` ***Return*** ``` { "status":1, "error":"none", "msg":{ { "employee":{ "fingerprint":{"type":"Buffer","data":[171,171,0,18]}, "fingerprint_id":0, "native_lasted_modified_time":"1524639691000" } }, }, "code" : 1 } ``` ***说明*** 会返回本地没有的数据,每次返回一条。 ### 打卡 ***URL*** : /clockInAndOut ***Method*** : POST ***NeedParams*** : ``` POST参数 : fingerprint_id 打卡指纹的ID clock_time 打卡机当前的时间(后期对此参数加密防攻击) ``` ***Example*** ``` POST http://139.129.42.180:8080/clockInAndOut ``` ***Return*** ``` { "status":1, "error":"none", "msg":{}, "code":1 } ``` ***说明*** 员工当天第一次打卡为签到,第二次打卡为签退,(第三次第四次与上同),当天晚上12点系统会自动重置(如果员工前一天只签到未签退,则只有签到记录)。 有两种边缘情况:code 42表示打卡机上传的日期不合法(防攻击);code 43表示打卡失败,该工号对应的用户不存在。 ### 删除指纹(员工) ***URL*** : /deleteFingerprint ***Method*** : POST ***NeedParams*** : ``` POST参数 : fingerprint_id 打卡指纹的ID ``` ***Example*** ``` POST http://139.129.42.180:8080/deleteFingerprint ``` ***Return*** ``` { "status":1, "error":"none", "msg":{}, "code":1 } ``` ***说明*** 此接口可以用于心跳包里delete命令的测试。 ## 手机端API ### 上传用户信息 ***URL*** : /uploadUserInfo ***Method*** : POST ***NeedParams*** : ``` POST参数 : name 员工姓名 employee_id 员工工号 phone 手机号 psk 设备的唯一ID(用"b3VyZWRh") ``` ***Example*** ``` POST http://139.129.42.180:8080/uploadUserInfo ``` ***Return*** ``` { "status":1, "error":"none", "msg":{}, "code":1 } ``` ***说明*** 有一种边缘情况:code 44表示PSK对应的设备还没有录入指纹,需要打卡机先录入并上传指纹。 ## 前端页面URL http://139.129.42.180:8080/ 登录页面,用户名admin1,密码password1 ## SmartConfig [smartconfig demo](http://bbs.kaifakuai.com/kfk_wechat/wifi_config.jsp?open_id=obJw1w3U85hmRjw8az1uZJoaOtc0×tamp=1525624779&noncestr=Gi4YHdadQa11KyZe&ticket=kgt8ON7yVITDhtdwci0qeUzPxNfF7uRQZqVx7OaDhFlfKwVAhxX-A9XNPukqPiQSxsKMgT29OV0SDmkp6stkxw&dev_id=null&appkey=null&appid=wx5c286ae72736cb78&from=singlemessage&isappinstalled=0)