勤勤学长 发表于 2020-1-10 15:15

钉钉开放平台基础功能PHP源码 企业内部应用 html免密登录 考勤报表

本帖最后由 勤勤学长 于 2020-1-10 15:18 编辑

小弟暂时负责某个公司的考核和工资计算,我只想知道当月有多少天,考勤多少天,迟到多少分钟,请假多少天。输入该员工的基础工资,按照公司的工资计算公式就可以一目了然谁法多少工资了。
钉钉自带考勤报表稍稍有点复杂,我不需要这么多信息。
项目已搁浅,就到当前文章的进度,原因是,可以,但没必要,就只有几个人的公司,在手机钉钉的月统计就可以直接看到了,还不如直接在弄个管理系统,手动收入这些值还快点,甚至可以有易语言写个文本生成工具,计算好之后,生成指定的文本格式逐一发送。{:1_901:}

没什么技术含量,逻辑对了按照官方提供的api接口就可以获取到对应的数据了。
进入工作台,自建应用,我选的是h5企业内部应用。



先找到appsecret和appkey 才能获取access_token
官方教程 https://ding-doc.dingtalk.com/doc#/serverapi2/eev437 (应该调式工具没更新,会提示缺少参数,直接用文档的url就可以了)


由于需要频繁curl调用接口,所以先写个curl函数
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
$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
启用智能报表
$url ='https://oapi.dingtalk.com/topapi/attendance/isopensmartreport?access_token='.$access_token;
       var_dump(json_decode(http_get($url), true));
获取对应值列表ID(不确定不同企业获取到的值是不是一直的。)
$url ='https://oapi.dingtalk.com/topapi/attendance/getattcolumns?access_token='.$access_token;
var_dump(json_decode(http_get($url), true));


由于还目前还是开发阶段,我是直接查看在通讯录提取的员工UserID

到这里基本信息都获取完了,提交查询信息。
$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文件提取的,下面这个代码在手机点进去就会弹出他的名字。
<!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部分
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基础才能看得懂。因为还在开发阶段,所以没有成品直接修改使用,抱歉咯~
你好,我是勤勤学长。
如果文章对你有用,请给个免费的评分。{:1_893:}

miqi1314 发表于 2020-1-10 15:36

厉害,支持大佬!

a361690548 发表于 2020-1-10 15:37

加油楼主   我学了这么就的php还没入门{:301_972:}

渐变heart 发表于 2020-1-10 15:51

感谢楼主分享

huangzy97 发表于 2020-1-10 16:19

楼主很强

勤勤学长 发表于 2020-1-10 17:23

a361690548 发表于 2020-1-10 15:37
加油楼主   我学了这么就的php还没入门

按照自己的需求做项目,很快就会搬砖了(复制粘贴)。入门容易学精难。{:1_909:}

hdzrmlm 发表于 2020-1-10 20:39

很优秀,点赞

吹风哥 发表于 2020-1-11 21:05

跟随学习
页: [1]
查看完整版本: 钉钉开放平台基础功能PHP源码 企业内部应用 html免密登录 考勤报表