本帖最后由 勤勤学长 于 2020-1-10 15:18 编辑
小弟暂时负责某个公司的考核和工资计算,我只想知道当月有多少天,考勤多少天,迟到多少分钟,请假多少天。输入该员工的基础工资,按照公司的工资计算公式就可以一目了然谁法多少工资了。
钉钉自带考勤报表稍稍有点复杂,我不需要这么多信息。
项目已搁浅,就到当前文章的进度,原因是,可以,但没必要,就只有几个人的公司,在手机钉钉的月统计就可以直接看到了,还不如直接在弄个管理系统,手动收入这些值还快点,甚至可以有易语言写个文本生成工具,计算好之后,生成指定的文本格式逐一发送。
没什么技术含量,逻辑对了按照官方提供的api接口就可以获取到对应的数据了。
进入工作台,自建应用,我选的是h5企业内部应用。
先找到appsecret和appkey 才能获取access_token
官方教程 https://ding-doc.dingtalk.com/doc#/serverapi2/eev437 (应该调式工具没更新,会提示缺少参数,直接用文档的url就可以了)
由于需要频繁curl调用接口,所以先写个curl函数
[PHP] 纯文本查看 复制代码 function http_get($url,$post_data=null)
{
$con=curl_init((string)$url);
curl_setopt($con,CURLOPT_HEADER,False);
curl_setopt($con,CURLOPT_SSL_VERIFYPEER,False);
curl_setopt($con,CURLOPT_RETURNTRANSFER,true);
if ($post_data!=null) {
curl_setopt($con, CURLOPT_POSTFIELDS, $post_data);
}
curl_setopt($con,CURLOPT_TIMEOUT,2);
$result = curl_exec($con);
return $result;
}
能获取access_token
[PHP] 纯文本查看 复制代码 $appsecret ='xxx';
$appkey = 'xxx';
$url = 'https://oapi.dingtalk.com/gettoken?appkey='.$appkey.'&appsecret='.$appsecret;
$resArr = json_decode($this->http_get($url), true);
$access_token = $resArr['access_token'];
考勤报表开发文档https://ding-doc.dingtalk.com/doc#/serverapi2/vg7ned
启用智能报表
[PHP] 纯文本查看 复制代码 $url ='https://oapi.dingtalk.com/topapi/attendance/isopensmartreport?access_token='.$access_token;
var_dump(json_decode(http_get($url), true));
获取对应值列表ID(不确定不同企业获取到的值是不是一直的。)
[PHP] 纯文本查看 复制代码 $url ='https://oapi.dingtalk.com/topapi/attendance/getattcolumns?access_token='.$access_token;
var_dump(json_decode(http_get($url), true));
由于还目前还是开发阶段,我是直接查看在通讯录提取的员工UserID
到这里基本信息都获取完了,提交查询信息。
[PHP] 纯文本查看 复制代码 $post_arr['userid']='301267888880401772';
$post_arr['column_id_list']='68370871,68370874,68370875';
//68370871应出勤天数
//68370874出勤天数
//68370875休息天数
$post_arr['from_date']= "2019-12-01 08:00:00";
$post_arr['to_date']="2019-12-31 23:00:00";
$url ='https://oapi.dingtalk.com/topapi/attendance/getcolumnval?access_token='.$access_token;
$resArr =json_decode(http_get($url,$post_arr), true);
if ($resArr['errcode'] == 0) {
$result =$resArr['result']["column_vals"] ;
var_dump($result);
}
然后再进行数据统计就可以知道具体多少天了。
企业内部免密获取自己的userID
他提供的示例代码是通过html的js文件提取的,下面这个代码在手机点进去就会弹出他的名字。
[HTML] 纯文本查看 复制代码 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.7.13/dingtalk.open.js"></script>
<script>
dd.ready(function() {
// dd.ready参数为回调函数,在环境准备就绪时触发,jsapi的调用需要保证在该回调函数触发后调用,否则无效。
//corpId在这里获取 https://open-dev.dingtalk.com/#/index
dd.runtime.permission.requestAuthCode({
corpId: "corpId",
onSuccess: function(result) {
var code = result.code;
var url = "index.php?code="+code;
$.get(url, function(result){
//提交的页面获取到对应信息
alert(result);
});
/*{
code: 'hYLK98jkf0m' //string authCode
}*/
},
onFail : function(err) {
alert('dd error: ' + JSON.stringify(error));
}
});
});
</script>
</head>
<body>
</body>
</html>
php部分
[PHP] 纯文本查看 复制代码 if (!empty($_GET['code'])) {
$code = $_GET['code'];
$appsecret ='xxx';
$appkey = 'xxx';
$url = 'https://oapi.dingtalk.com/gettoken?appkey='.$appkey.'&appsecret='.$appsecret;
$resArr = json_decode(http_get($url), true);
$access_token = $resArr['access_token'];
$url = 'https://oapi.dingtalk.com/user/getuserinfo?access_token='.$access_token.'&code='.$code;
$resArr = json_decode(http_get($url), true);
$userid = $resArr['userid'];
$url = 'https://oapi.dingtalk.com/user/get?access_token='.$access_token.'&userid='.$userid;
//$res =$this->http_get($url);
$resArr = json_decode(http_get($url), true);
if (empty($resArr['name'])) {
return $resArr['errmsg'];
}
return $resArr['name'];
}
这个需要一定的php基础才能看得懂。因为还在开发阶段,所以没有成品直接修改使用,抱歉咯~
你好,我是勤勤学长。
如果文章对你有用,请给个免费的评分。 |