需求背景
產(chǎn)品希望統(tǒng)計(jì)我們公司線下人員的考勤情況婉徘,釘釘?shù)墓δ苣壳安荒軡M足一天多次外勤打卡的需求,于是我們打算自己開發(fā)一套打卡系統(tǒng)凯力。我們的線下工作人員日常使用的是我們內(nèi)部的一個(gè)微信小程序催蝗,產(chǎn)品希望將外勤打卡的功能在小程序上實(shí)現(xiàn)。方便線下人員在同一個(gè)平臺(tái)上操作伍宦。
微信小程序外勤打卡
我們線下工作人員遍布全國(guó)各地,每個(gè)人的工作地點(diǎn)可能各不一樣乏梁,怎樣讓線下工作人員在指定的地方打卡呢次洼?
1.如何確定打卡的對(duì)象和范圍
為了方便統(tǒng)一打卡管理,添加一個(gè)模塊給志愿者管理人員遇骑,由管理者添加外勤對(duì)象卖毁,線下工作者根據(jù)當(dāng)前的定位,選擇匹配到方圓1公里的外勤對(duì)象落萎,選擇對(duì)應(yīng)要打卡的對(duì)象進(jìn)行打卡亥啦。
外勤對(duì)象: 線下工作者打卡的目標(biāo)地
2.如何保證一天多次打卡
外勤打卡呢,一個(gè)線下工作一天要跑多個(gè)工作地點(diǎn)练链,每個(gè)地點(diǎn)都要進(jìn)行打卡翔脱,如何保證一天多次打卡呢?產(chǎn)品希望他們每次出勤都有對(duì)應(yīng)的簽到和簽退媒鼓,沒完成簽退届吁,不可以新建一次外勤,每次簽到成功就創(chuàng)建了一次外勤绿鸣,簽退不限制地點(diǎn)疚沐,可以進(jìn)行隨時(shí)簽退,這樣就保證了每次出勤都是成對(duì)的潮模。
一次外勤:一對(duì)簽到和簽退亮蛔,要先完成簽退,才能到下個(gè)地點(diǎn)進(jìn)行簽退擎厢。
3.打卡定位
針對(duì)打卡功能究流,我們選用微信小程序開發(fā)里面的位置api:定位、和選點(diǎn)定位锉矢。
位置api調(diào)用前需要 先
用戶授權(quán)
scope.userLocation梯嗽。
這次主要使用的兩個(gè)位置api:
- wx.chooseLocation 打開地圖選擇位置;
- wx.getLocation 獲取當(dāng)前的地理位置沽损。
對(duì)經(jīng)緯度進(jìn)行逆解析需要申請(qǐng)騰訊地圖的
key
灯节,申請(qǐng)開發(fā)者密鑰(Key)。
來來來绵估,簽到了:
4.如何防止通過刷接口打卡炎疆?
- MD5加密
考慮到有可能通過抓包提交經(jīng)緯度來進(jìn)行打卡,我們前后端統(tǒng)一指定了一套打卡加密機(jī)制国裳。我們采用的 MD5加密形入,對(duì)經(jīng)緯度、時(shí)間戳缝左、小程序密鑰等組合加密亿遂,前端每次打卡浓若,都要加密后32密鑰傳給后端,后端校驗(yàn)通過后蛇数,才可以打卡挪钓。這樣就可以阻止部分通過接口打卡的騷操作了。
- 打卡自拍
我們要求每次簽到簽退都要進(jìn)行自拍耳舅,雖然不能完全杜絕刷打卡碌上,但卻可以 避免一部分作弊。
最終我們的打卡:
小結(jié)
最后對(duì)于開發(fā)團(tuán)隊(duì)的總結(jié)浦徊, 前端主動(dòng)驅(qū)動(dòng)馏予,需求評(píng)估后,提前想好解決方案盔性,盡量減少非預(yù)知問題霞丧,需求評(píng)估后可以提前做個(gè)demo,對(duì)技術(shù)選型冕香、功能的實(shí)現(xiàn)程度蚯妇,以及需求的開發(fā)周期的有個(gè)大致預(yù)期。