本文是根据钉钉官方文档归纳所出,最后有 PHP 测试成功的 demo。

概述

钉钉登录是基于 OAuth2.0 协议标准构建的钉钉 OAuth2.0 授权登录系统。 在进行钉钉 OAuth2.0 授权登录接入之前,需要先创建一个应用,并获得相应的 AgentIdAppSecret

OAuth2.0 授权说明

钉钉 OAuth2.0 授权登录让钉钉用户使用钉钉身份安全登录第三方应用或网站,在钉钉用户授权登录已接入钉钉 OAuth2.0 的第三方应用后,第三方可以获取到用户的接口调用凭证 sns_token,通过 sns_token 可以进行钉钉开放平台授权关系接口调用,从而实现获取钉钉用户基本开放信息和帮助用户实现基础开放功能等。

获取登录用户信息时序图:

钉钉 OAuth2.0 授权登录支持 authorization_code 模式,适用于拥有 server 端的应用授权。该模式整体流程为:

  1. 第三方发起钉钉授权登录请求,钉钉用户允许授权第三方应用后,钉钉会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数。
  2. 通过 Code 调用 sns/getuserinfo_bycode 接口获取授权登录用户信息。

配置参数说明

Corpid 是企业在钉钉中的标识,每个企业拥有唯一的 Corpid

UserID 企业内每个员工都有唯一的 UserID,创建后不可修改。

Unionid 用户在当前钉钉开放平台账号范围内的唯一标识,同一个钉钉开放平台账号可以包含多个开放应用

AppKey/AppSecret

  • Appkey 是 企业内部应用 应用的唯一身份标识
  • AppSecret 是对应的调用密钥

具体实现过程

第一步: 准备工作 - 创建和配置应用并下载 SDK 包

根据自身情况进行配置,点我查看教程


第二步: 使用 SDK 调用接口

通过 SDK 调用考勤接口,获取考勤的打卡结果,服务端实现可分为以下步骤:

  1. 下载 SDK 并导入到项目目录中,并将 appKeyappSecret 保存下来

  2. 创建调用接口的文件,这里以 PHP 为例,创建名为 dd_attendance.php

  3. 根据 appKeyappSecret 调用 获取企业内部应用的 access_token 接口获取 access_token

  4. 根据 access_token 调用 获取打卡结果 接口获取考勤打卡的结果数据

请求参数说明

请求示例 (PHP SDK)

// 基本配置, 替换成自己的
$AppKey = '';$AppSecret = '';// 请求示例 (PHP SDK)
include "./dingding/TopSdk.php";
date_default_timezone_set('Asia/Shanghai');$c = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI, DingTalkConstant::$METHOD_POST , DingTalkConstant::$FORMAT_JSON);$req = new OapiAttendanceListRequest;// 先获取 access_token - 开始 , access_token 有效期为 7200秒,有效期内重复获取会返回相同结果并自动续期,过期后再获取会返回新的 access_token, 文档链接: https://developers.dingtalk.com/document/app/obtain-orgapp-token
$access_token = '';
// 这里没有将 access_token 缓存, 实际操作时, 可将 access_token 进行缓存
$get_c = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI, DingTalkConstant::$METHOD_GET , DingTalkConstant::$FORMAT_JSON);$access_token_request = new OapiGettokenRequest;$access_token_request->setAppkey($AppKey);
$access_token_request->setAppsecret($AppSecret);$access_token_response = $get_c->execute($access_token_request, $access_token, "https://oapi.dingtalk.com/gettoken");if ($access_token_response->errcode != 0){// 错误
} else {$access_token = $access_token_response->access_token;file_put_contents('./data.log', 'access_token: ' . $access_token . '    ' . date("Y-m-d H:i:s", time())  . "\n" . "\n", FILE_APPEND);
}
// 先获取 access_token - 结束// 设置起始工作日 - 起始工作日与结束工作日最多相隔 7 天
$req->setWorkDateFrom("2021-07-06 08:00:00");// 设置结束工作日 - 起始工作日与结束工作日最多相隔 7 天
$req->setWorkDateTo("2021-07-07 12:00:00");// 用户所在企业的 userid
$userIds = array('276933490129090108');
$req->setUserIdList($userIds);// 页码
$req->setOffset("0");// 每页条数
$req->setLimit("50");// 获取
$responce_obj = $c->execute($req, $access_token, "https://oapi.dingtalk.com/attendance/list");var_dump($responce_obj);

返回示例

{"errcode":0,"recordresult":[{"checkType":"OnDuty","corpId":"ding2b15dc6154f4d112ffe93478753d9884","locationResult":"Normal","baseCheckTime":1625544000000,"groupId":781795238,"timeResult":"Normal","userId":"276933490129090108","recordId":67023885464,"workDate":1625500800000,"sourceType":"BOSS","userCheckTime":1625544000000,"planId":216341548836,"id":160663847413},{"checkType":"OffDuty","corpId":"ding2b15dc6154f4d112ffe93478753d9884","locationResult":"Normal","baseCheckTime":1625565600000,"groupId":781795238,"timeResult":"Normal","userId":"276933490129090108","recordId":67393055443,"workDate":1625500800000,"sourceType":"BOSS","userCheckTime":1625565600000,"planId":216341548837,"id":161310850821},{"checkType":"OnDuty","corpId":"ding2b15dc6154f4d112ffe93478753d9884","locationResult":"Normal","baseCheckTime":1625630400000,"groupId":781795238,"timeResult":"Normal","userId":"276933490129090108","recordId":67224193723,"workDate":1625587200000,"sourceType":"USER","userCheckTime":1625628272000,"planId":217574178290,"id":160248303849}],"hasMore":false,"errmsg":"ok"
}

返回参数说明

下载 demo

我的 demo 从这里下载,点我

钉钉企业内部应用 - 获取考勤打卡结果相关推荐

  1. 钉钉通知-调用钉钉发送企业内部消息开发

    首先,我们要明确需求:自己的系统需要发送通知消息到用户,接收消息用户为同一企业内的人员,选用短信可能涉及到费用问题,故可以选用钉钉或者企业微信,在此我使用钉钉进行发送消息. 调用钉钉发送企业内部消息: ...

  2. 已经提了离职,还有一周就走,公司突然把我移出企业微信,没法考勤打卡, 还要继续上班吗?...

    黎明前的黑暗最容易出事,离职前的几天也最容易出幺蛾子,比如下面这位网友的遭遇: 已经提了离职,还有一周就正式离职了,公司突然把我移出企业微信,没法考勤打卡了, 还要继续上班吗?该怎么办? 有人说,自己 ...

  3. 钉钉企业内部应用获取登录用户信息

    1.创建企业内部应用 首先在钉钉开放平台注册企业内部应用. 选择[企业内部开发] 创建H5微应用 填写相关信息 企业内部H5微应用创建完成 2.接口开发前准备 开发前必读 了解不同应用所能支持的能力 ...

  4. 使用钉钉创建企业内部机器人

    目录 玩转钉钉机器人 创建钉钉机器人: 如何创建钉钉机器人 如何调用机器人api 支持的消息格式 text类型 markdown类型 整体跳转actionCard类型 feedCard类型 使用钉钉机 ...

  5. 钉钉第三方企业应用,获取用户信息

    第一步:首先打开钉钉开发者后台登陆,选择"应用开发"->"第三方企业应用"->"小程序",点击"创建应用". ...

  6. 记录:实现钉钉(企业内部应用)登录第三方网站

    由于后台无法配合前端配置路由为history模式,故vue路由采用hash模式.但是钉钉扫码成功后会导致重定向地址格式错误: 错误格式:https://xxx.com/?authCode=xxxx#/ ...

  7. 【钉钉-场景化能力包】考勤打卡

    需求场景 员工到岗通知:企业通过设置自定义考勤规则,员工打开钉钉后实现快速打卡,打卡结果即时通知到部门主管处,方便主管查看人员到岗情况. 员工绩效计算:员工通过钉钉快速上下班考勤,企业随时可获取到员工 ...

  8. VBA实现企业微信API获取考勤数据,解析JSON数据格式。

    '通过微信API接口发送和获取数据 Function weixinAPI(starttime As String, endtime As String) As StringDim access_tok ...

  9. java调用企业微信接口---获取考勤数据

    Static和new的区别? static : 不需要创建实例可直接使用, 会直到程序关闭才会释放资源,类的一个成员被static修饰后,该成员就属于类的成员了,被所有对象共享. new 对象: 每次 ...

最新文章

  1. Linux系统的大小端模式
  2. 常用的Linux服务器各项性能指标查看方法!
  3. ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available 错误解决方法
  4. 数格子算面积的方法_水基材料防锈试验方法:铸铁粉末法
  5. Java学习之JDBC实现简单的CRUD(mysql数据库)
  6. 【活动】侬好上海,Microsoft Reactor来啦
  7. FXRibbon 1.2版发布
  8. 惠而浦:使用Netty和Kafka的微服务
  9. HBae找不到协处理器导致RegionServer全部挂掉
  10. Linux远程传输命令scp、rsync(tar打包归档并在系统之间传输文件)
  11. python豆瓣Top250数据分析
  12. 用MathType怎么编辑带圈数字序号
  13. 简单论坛系统数据库的设计
  14. 迅雷7.22 和迅雷5.9 去广告优化增强绿色版
  15. 2019最新计算机配置,2019年电脑配置推荐,收藏一篇文章就够了
  16. 绿色建筑推动海口智慧城市发展
  17. MyExcel 3.9.8 版本发布
  18. JSP如何统计页面访问次数
  19. 第四章课后习题-用Python实现羊车门问题,最大公约数计算,猜字游戏,统计不同字符个数。
  20. c语言 计算子网掩码位数,子网数、主机数与子网掩码的关系

热门文章

  1. C++ | C++数据结构(struct)
  2. 基于微信小程序+SSM学生社团管理系统设计
  3. 风很大的PMP证书真有这么厉害?这是被腾讯/华为招聘时所提到过的证书
  4. 解决:Mac 分屏时程序坞跑副屏问题
  5. 记录----在pycharm中用pip安装CV2(从清华这边的镜像)
  6. 详解深度学习之经典网络:AlexNet(2012) 并利用该网络架构实现人脸识别
  7. 【每日新闻】谷歌CEO皮查伊:AI会拯救人类,而不是摧毁 | 致远互联签约锤子科技
  8. 计算机办公文档制作,办公室“大秘”教你:如何精确制作“红头文件”的“版记”?-红头文件格式...
  9. 云栖大会人脸识别闸机【技术亮点篇7】--人脸识别闸机采用
  10. 树莓派脑壳疼问题解决:终端pip3 list中查看库是存在的,但是运行却报错ModuleNotFoundError: No module named ‘keyboard‘