钉钉接口:获取accessToken和打卡记录【分享】
post和get方法工具类:HttpUtils
package weaver.dingtalk.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import weaver.interfaces.email.SSLClient;
import java.util.ArrayList;
import java.util.List;
/**
 * http请求工具类
 * @author lcs
 */
public class HttpUtils {
    public static String doPost(String url, JSONObject jsonObject, String charset){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new SSLClient();
            httpPost = new HttpPost(url);
            //设置参数
            List<NameValuePair> list = new ArrayList<NameValuePair>();
            StringEntity entity = new StringEntity(jsonObject.toString(),charset);
            entity.setContentEncoding("UTF-8");
            entity.setContentType("application/json");
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);
            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                HttpEntity resEntity = response.getEntity();
                if(resEntity != null){
                    result = EntityUtils.toString(resEntity,charset);
                }
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return result;
    }
    public static String doGet(String url){
        String result = null;
        HttpGet request = new HttpGet(url);
        HttpClient httpClient = new DefaultHttpClient();
        try {
            HttpResponse response = httpClient.execute(request);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                result= EntityUtils.toString(response.getEntity(),"utf-8");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
}钉钉接口方法:DingTalkService
package weaver.dingtalk.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import weaver.dingtalk.utils.HttpUtils;
import java.util.HashMap;
import java.util.Map;
/**
 * DingTalk相关方法
 * @author 刘春生
 */
public class DingTalkService {
    /**
     * 获取钉钉的accessToken
     * @param url
     * @param corpid
     * @param secret
     * @return
     */
    public static String getAccessToken(String url,String corpid,String secret){
        String requestUrl = url + "?corpid="+corpid+"&corpsecret="+secret;
        String result = HttpUtils.doGet(requestUrl);
        String accessToken = null;
        JSONObject jsonObject = new JSONObject();
        jsonObject = JSON.parseObject(result);
        String msg = (String)jsonObject.get("errmsg");
        if("ok".equals(msg)){
            accessToken = (String)jsonObject.get("access_token");
        }
        return accessToken;
    }
    public static JSONArray getCardList(String accessToken, String workDateFrom, String workDateTo, String offset, String limit){
        String recordUrl = "https://oapi.dingtalk.com/attendance/list?access_token="+accessToken;
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("workDateFrom",workDateFrom);
        jsonObject.put("workDateTo",workDateTo);
        jsonObject.put("offset",offset);
        jsonObject.put("limit",limit);
        String result = HttpUtils.doPost(recordUrl,jsonObject,"utf-8");
        JSONObject resutJSON = JSONObject.parseObject(result);
        String msg = (String)resutJSON.get("errmsg");
        JSONArray jsonArray = null;
        if("ok".equals(msg)){
            jsonArray = (JSONArray) resutJSON.get("recordresult");
        }
        return jsonArray;
    }
}
测试方法:TestDingTalk
package weaver.dingtalk.service;
import com.alibaba.fastjson.JSONArray;
public class TestDingTalk {
    public static void main(String[] args) {
        String workDateFrom = "2017-11-03 08:00:00";
        String workDateTo = "2017-11-03 18:00:00";
        String offset = "0";//分页获取数据,0表示第一页
        String limit = "10";//每页10条数据
        String accessTokenUrl = "https://oapi.dingtalk.com/gettoken";
        String corpid = "##############";//替换成自己的corpid
        String secret = "##############";//替换成自己的corpsecret
        String accessToken = DingTalkService.getAccessToken(accessTokenUrl,corpid,secret);
        if(accessToken!=null){
            JSONArray jsonArray = DingTalkService.getCardList(accessToken,workDateFrom,workDateTo,offset,limit);
            System.out.println(jsonArray);
        }
    }
}钉钉接口:获取accessToken和打卡记录【分享】的更多相关文章
- 钉钉服务端api接口使用
		原文链接:http://www.cnblogs.com/xiaosongJiang/p/9991573.html 第一步:注册钉钉企业账号 打开链接:https://oa.dingtalk.com/# ... 
- WinForm调用钉钉获取考勤结果
		关注点: 1.钉钉AccessToken的获取和防止过期 2.使用TPL并行编程调用钉钉接口 需求详解 公司前台有个大屏,领导想显示全部员工的考勤结果统计情况和车间的实时监控视频,还有车间的看板.简单 ... 
- npm钉钉脚手架,支持考勤信息获取
		钉钉官方并未提供nodejs包,第一次调用接口的时候非常费事,而且尝试去寻找相关的钉钉考勤数据模块的时候只找到了一些消息啊,只能办公啊,免登啊之类的模块,有关考勤数据的似乎没有 关于dd的npm包中一 ... 
- 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息
		最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ... 
- 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]
		转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ... 
- .Net调用钉钉接口,实现发送企业消息功能
		我在钉钉官网上看了下,关于调用钉钉接口,发送企业消息通知,他给的核心代码总共几行. 用到的一个接口引用 TopSDK.dll 下载网址https://open-doc.dingtalk.com/doc ... 
- 开发笔记—钉钉服务商应用isv开发,从应用配置,到获取客户企业通讯录
		以第三方企业微应用为例 在第三方企业微应用应用时,比较底层的需求,就是应用需要获取客户企业的通讯录,即部门/员工的数据.本人整理以下几个关键数据,供大家开发参考. 新建第三方微应用时,能拿到这些初始数 ... 
- Jenkinsfile里定义对象和函数,获取git提交人, 发送钉钉通知
		自从开始使用Jenkinsfile作为Jenkins配置后就一发不可收,因为开发者自定义CI脚本实在太方便了. 比如,最近开发的以一个项目涉及多人,提交冲突挺多的,有的人自己没编译通过就提交了,导致后 ... 
- 发现钉钉打卡定位算法的一个bug
		最近公司取消了指纹打卡,改用钉钉打卡. 天天用这个打卡上班,经常忘记,困扰. 最烦的是好几次明明人在办公室,打卡地址显示在10分钟前的位置,定位失败,不得不重新打卡. 经历过几次定位失败后,我就琢磨起 ... 
随机推荐
- spoj GSS系列简要题解
			文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意 ... 
- python黑帽子-黑客与渗透测试编程之道(源代码)
			链接: https://pan.baidu.com/s/1i5BnB5V 密码: ak9t 
- sax 动态切换 抓取感兴趣的内容(把element当做documnet 处理)
			由switch 类触发事件 import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.hel ... 
- Paper | 块分割信息 + 压缩视频质量增强
			目录 1. 亮点 2. 网络 3. Mask 及其融合 4. 结论 论文:Enhancing HEVC Compressed Videos with a Partition-Masked Convol ... 
- SQL Server CTE 递归查询全解  -- 转 学习
			在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ... 
- php SQL 防注入的一些经验
			产生原因 一方面自己没这方面的意识,有些数据没有经过严格的验证,然后直接拼接 SQL 去查询.导致漏洞产生,比如: $id = $_GET['id']; $sql = "SELECT nam ... 
- React.js 三周 -- 入门到搭建团队基础项目
			吐槽 公司自己的产品,由于历史遗留问题,前端一直是和java放到一个项目里写的. 导致了,前端就被死死的绑在了IDEA战车上.想要看页面效果,先起几个java服务.想要调试一个改动,重启个java服务 ... 
- 简单登录注册实现(Java面向对象复习)
			简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面: ... 
- C# GroupBy分组的问题和解决
			起因 今天在公司做一个需求的时候,写的是面条代码,一个方法直接从头写到尾,其中用到了GroupBy,且GroupBy的KeySelector是多个属性而不是单个属性. 但是公司最近推行Clean Co ... 
- Maven - 实例-5-依赖冲突
			避免依赖冲突的原则 如果项目中的pom.xml没有指定依赖的信息,而是通过继承来引用依赖,则很有可能发生继承同一个依赖的多个版本,从而产生依赖冲突. Maven通过如下两个原则来避免依赖冲突: 1- ... 
