一、打卡记录在企业微信里,考勤表还得自己做
用企业微信打卡的公司,月底多半逃不过这一步:管理员导出打卡明细,人事再把它和排班、请假、加班拼成一张考勤表。
勤哲 Excel 服务器提供 WebAPI 能力,可以直接调用企业微信的接口把打卡记录取回来,落在自己的模板里。这张表就不必再手工拼。
更麻烦的是二次核对。打卡记录只说明"几点打了卡",合不合规要看排班规则;规则在人事脑子里,记录在另一个系统里,两边对不上时只能逐条翻。
数据取回本地之后,判断规则就能写成表间公式,不必再靠人眼。这才是对接的真正价值——不是省一次导出,而是把规则也搬进系统。
二、准备:一个版本,一个管理员账号
版本要求是套餐 7、小版本 19.1.11 或更新,WebAPI 功能在这个版本之后才提供。升级前先确认现有模板能正常打开,避免连带问题。
账号要求是企业微信管理员。创建应用、查看 Secret 这些操作都在管理后台,普通成员没有入口。如果公司有多个应用,建议单独建一个用于对接,权限最小化。
还有一件事容易被忽略:服务器要能访问外网。勤哲部署在内网时,需要出口能通到企业微信的接口地址,否则配置全对也会超时。
三、Corpid 与 Corpsecret:两个值决定能不能进门
企业微信的每一次接口调用都要带 access_token。换 token 需要两个值:Corpid 是企业的身份编号,在"我的企业"页面最下方;Corpsecret 是某个应用的密钥,每个应用各有一份。
这两个值的关系要理清:Corpid 决定"哪家公司",Corpsecret 决定"哪个应用"。用打卡应用的 Secret 换来的 token,只能读打卡相关的数据,读不了通讯录,这是权限设计的用意。
图1 接口文档写明了请求地址与两个必填参数
图2 在打卡应用里查看 Corpsecret
四、第一个 WebAPI:换取 access_token
在勤哲的设计界面新增 WebAPI。地址只填到问号之前,corpid 与 corpsecret 放进请求参数;调用方法选 GET,因为换取 token 的接口只接受 GET。
返回参数可以从文档直接复制,粘贴后让系统解析。成功条件建议设成 errcode 为 0 或 errmsg 为 ok——企业微信失败时也会返回 200,不看这两个字段就判断不出真假成功。
图3 新增 WebAPI:地址、方法、编码逐项确认
图4 请求参数填 corpid 与 corpsecret,名称不能改
图5 返回参数从文档复制,解析出 token 与有效期
图6 成功条件设成 errcode 为 0,失败才看得见
token 不能每次用的时候现取。它有两小时有效期,频繁调用换 token 的接口会被限流。做法是单独建一张模板,专门存各应用的最新 token。
这张模板里放一条 WebApiReader 表间公式,执行时把 token 写进字段。其他模板要用时,从这张表里提数即可,不必再碰接口。
图7 用 WebApiReader 定义取 token 的公式
图8 执行一次,token 与有效期一起落进表里
五、把 token 藏起来:两道设置缺一不可
token 等于接口钥匙,谁能看到谁就能调接口。偏偏它存在一张普通的模板里,默认是明文显示、可编辑的。
第一道设置是字段属性:把该字段设为不可编辑,避免有人误改。第二道是显示格式:用自定义格式把内容隐藏,屏幕上只留空白,实际值仍在库里。
两道都做完,界面上的 token 就看不见了,公式读值不受影响。这不是万全之策——能进数据库的人仍然看得到——但足以挡住日常使用中的顺手一瞥。
图9 用自定义格式隐藏 token 的显示
图10 设为不可编辑后,界面不再显示明文
六、第二个 WebAPI:POST 取打卡记录
取打卡记录的接口和换 token 不是一种脾气。它是 POST,参数放在请求体里,文档给了一段 JSON 示例,直接复制进勤哲点识别,参数结构就自动铺开了,比手填省事也更准。
access_token 要作为参数之一传进去,长度大约 214 位。这个值不手写,从前面那张 token 表里取,公式引用字段即可。
图11 打卡接口文档:POST 方法与请求体结构
图12 方法改为 POST,与换 token 的 GET 区分开
图13 粘贴文档示例,交给系统识别参数
图14 识别结果直接可用,省去逐项手填
图15 补上 access_token 参数,值由公式带入
图16 返回参数按实际结构配置,字段名要对应
图17 成功条件同样看 errcode,不看 HTTP 状态码
七、时间要换成时间戳,公式一行就够
这个接口的起止时间是 Unix 时间戳,单位秒,不是日期。Excel 里一个日期是"从 1900 年起的天数",两者差一个换算:减去 1970 年 1 月 1 日,再乘 86400。
公式写成 (C5-DATE(1970,1,1))*86400,C5 换成实际的起始日期单元格。结束时间同理,两个格子并排放,改日期就等于改查询区间。
图18 接数模板:日期、工号、打卡时间各占一列
图19 时间戳换算公式,起止两列各写一条
图20 模板布局:上方参数格,下方明细区
接着配两条公式。第一条是普通提数公式,从 token 表里取当前有效的 access_token,填进参数格;第二条是 WebApiReader 提数公式,用这个 token 和两个时间戳去调打卡接口,结果按行写进明细。
分两条的好处是排错清楚。token 取不到,第一条就报错;接口调不通,第二条报错。混在一条公式里,出了问题只能猜。
图21 第一条:从 token 表提数,填进参数格
图22 第二条:WebApiReader 调接口,结果写明细
图23 人员范围可指定,也可按部门整体拉取
图24 每个参数对应哪个单元格,一眼可查
八、跑一遍,再想还能接什么
配置完成后先跑 token,再跑明细,两段都有录屏可对照:token 那一步只需几秒,打卡明细按设定的区间整段填入,字段与模板一一对应。
跑通之后,这套方法的边界比想象中宽。企业微信的审批、通讯录,钉钉的考勤,金数据、问卷星的表单,以及提供 API 的 ERP,都可以按"看文档—建 WebAPI—写提数公式"这条路接进来,既能取数,也能回写。
唯一需要自己判断的是口径。接口给的"打卡结果"不等于人事眼里的"出勤",这中间的换算规则写进公式,系统才算真的替人干活。
图25 演示一:执行公式,token 几秒内到手
图26 演示二:打卡明细按行填入模板