C#如何实现调取钉钉考勤接口的功能
作者:努力尝试! 发布时间:2023-09-14 17:31:47
调取钉钉考勤接口的功能
公司需要做一个钉钉考勤的页面,让我去写这个功能。结果却比我想象的要麻烦一些!具体是怎么个麻烦呢
下面直入正题
首先我们找到获取钉钉考勤结果的接口。结果发现请求参数里有一个userIdList列表,那么这时候第一个问题就来了,如何获得这个userIdList呢?(注意这里的调用方式 是POST)
我们需要调用通讯录管理下的用户管理下的获取部门用户接口。来获得用户名字和用户的userId。那么这个时候 发现还需要另一个参数 部门id。那么部门id又是什么呢?(注意这里的调用方式 是GET)
我们找到了这个接口(通讯录管理下的部门管理下的获取部门列表),然后把id设置为空,就可以得到所有的部门列表了,在部门列表里找到自己部门的id即可。(注意这里的调用方式 是GET)
这样经过一波三折,总算调到了钉钉考勤的结果。注意,一次只能调取7天的哦!
当然,获取到结果之后,还需要进行对数据的分析处理等工作,经过了几天的努力我才完成。
PS:token的获得方法。
public static string GetAccess_Tocken()
{
var url = @"https://oapi.dingtalk.com/gettoken?appkey="+AppKey+"&appsecret="+AppSecret;
var result = Json.ToJObject(HttpMethods.HttpGet(url));
var tocken = result["access_token"]?.ToString();
return tocken;
}
小技巧:
我们可以通过在线调试快速获得部门id,快速验证接口能否使用。不过需要管理员才能使用在线调试这个功能。
调用钉钉接口发送图片群消息
前段时间我被一个需求困扰,如何调用钉钉接口发送图片消息?文字消息用string类型的参数很容易实现了,可是好像要发图片就灭有那么简单了,好在后来经过我的摸索,解决了问题。
步骤如下
要想发群消息,首先要建个钉钉群,建群的话首先要获取全局ID,要用到钉钉上的企业ID
? //全局群id
? ? ? public static ?string getchatid = "";//群会话id(系统停止之后消失)
? ? ? ? //用于判断是否换班成功(是否成功创建新群)
? ? ? public static ?Boolean flagid =false;?
? ? ? ? /// <summary>
? ? ? ? /// 获取接口全局ID
? ? ? ? /// </summary>
? ? ? ? /// <returns></returns>
? ? ? ? private string accessToken() {
? ? ? ? ? ? string corpid = "**************";
? ? ? ? ? ? string CorpSecret = "*******************************";
? ? ? ? ? ? string AccessToke = "";
? ? ? ? ? ? string url = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", corpid, CorpSecret);
? ? ? ? ? ? JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
? ? ? ? ? ? AccessToke = json["access_token"].ToString();
? ? ? ? ? ? return AccessToke;
? ? ? ? } ? ?
我们这次实现的功能是,通过群成员的手机号作为参数建群,所以要根据手机号获取用户的UserID
//根据手机号获取用户UserID ?
? ? ? ? private string UserID(string phone) {
? ? ? ? ? ? // 通过手机号获取 userId?
? ? ? ? ? ? string url = string.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}",accessToken(), phone);
? ? ? ? ? ? string userid ="找不到用户id";//用户企业内部id
? ? ? ? ? ? JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
? ? ? ? ? ? if (json["errmsg"].ToString() != "找不到该用户") {
? ? ? ? ? ? ? ? ? userid = json["userid"].ToString();
? ? ? ? ? ? }
? ? ? ? ? ? return userid;
? ? ? ? }
下面可以建群了,以下代码是建群方法
?/// <summary>
? ? ? ? /// 创建群会话
? ? ? ? /// </summary>
? ? ? ? /// <param name="phone1">值班人员1手机号</param>
? ? ? ? /// <param name="phone2">值班人员1手机号</param>
? ? ? ? /// <param name="Chatidname">群名称</param>
? ? ? ? public void Creatchatid(string phone1, string phone2,string Chatidname
? ? ? ? ? ? ) {
? ? ? ? ? ?
? ? ? ? ? ? ? ? #region 获取用户企业内部id
? ? ? ? ? ? ? ? //获取值班人员企业userid
? ? ? ? ? ? ? ? string userid = UserID(phone1);//获取用户userId(第一个人作为群主)
? ? ? ? ? ? ? ? string userid2 = UserID(phone2);
? ? ? ? ? ? ? ? //用户id添加到,成员数组。
? ? ? ? ? ? ? ? string[] Chatiduseridlist = new string[] { userid, userid2 };//添加到群成员列表里
? ? ? ? ? ? ? ? #endregion
? ? ? ? ? ? ? ? //判断是否正确获得用户企业id
? ? ? ? ? ? ? ? if (userid.Trim() == "找不到用户id" || userid2.Trim() == "找不到用户id")
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? flagid = false;//获取用户id失败
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else {
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? #region 创建群会话
? ? ? ? ? ? ? ? ? ? string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/create?access_token={0}", accessToken());
? ? ? ? ? ? ? ? ? ? var json_req = new
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? name = Chatidname, // 群名称
? ? ? ? ? ? ? ? ? ? ? ? owner = userid, ?// 群主id
? ? ? ? ? ? ? ? ? ? ? ? useridlist = Chatiduseridlist
? ? ? ? ? ? ? ? ? ? };
? ? ? ? ? ? ? ? ? ? string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为字符串类型
? ? ? ? ? ? ? ? ? ? JToken json = JToken.Parse(HttpUtiy.HttpPost(MessageUrl, jsonRequest));//返回值转换为JToken格式 ? ? ? ? ? ? ? ? ? ? ? ? ?//赋值给成员变量,避免多次创建群。
? ? ? ? ? ? ? ? ? ? getchatid = json["chatid"].ToString();
? ? ? ? ? ? ? ? ? ? #endregion
? ? ? ? ? ? ? ? ? ? //改变flagid标签状态
? ? ? ? ? ? ? ? ? ? flagid = true;
? ? ? ? ? ? ? ? } ? ? ? ? ? ? ??
? ? ? ? }
建好了群之后就可以发消息了,字符串消息很简单,像开头说的那样,代码如下
? ? ? ? /// <summary>
? ? ? ? /// 发送群消息
? ? ? ? /// </summary>
? ? ? ? public void SendMsg() {
? ? ? ? ? ? //发送群消息
? ? ? ? ? ? string MessageUrl =string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}",accessToken());
? ? ? ? ? ? var json_req = new
? ? ? ? ? ? {
? ? ? ? ? ? ? ? chatid = getchatid,//获取群会话id
? ? ? ? ? ? ? ? ? ?msg=new {?
? ? ? ? ? ? ? ? ? ? ? ?msgtype="text",
? ? ? ? ? ? ? ? ? ? ? ?text = new {
? ? ? ? ? ? ? ? ? ? ? ? ? ?content = "有陌生人闯入,请及时查看!"
? ? ? ? ? ? ? ? ? ? ? ?} ? ??
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? };
? ? ? ? ? ? string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转位字符串
? ? ? ? ? ? HttpUtiy.HttpPost(MessageUrl, jsonRequest);
? ? ? ? }
仿照同样的格式,写出了图片消息的方法
?//发送图片消息的方法
? ? ? ? public void SendMsgPic()
? ? ? ? {
? ? ? ? ? ? //发送群消息
? ? ? ? ? ? string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}", accessToken());
? ? ? ? ? ? var json_req = new
? ? ? ? ? ? {
? ? ? ? ? ? ? ? chatid = getchatid,//获取群会话id
? ? ? ? ? ? ? ? msg = new
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? msgtype = "image",
? ? ? ? ? ? ? ? ? ? image = new
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? media_id = "图片的媒体ID"
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? };
? ? ? ? ? ? string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转位字符串
? ? ? ? ? ? HttpUtiy.HttpPost(MessageUrl, jsonRequest);
? ? ? ? }
来源:https://blog.csdn.net/weixin_43549003/article/details/108600338


猜你喜欢
- 简介SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要用
- 本文实例讲述了C#监控文件夹变化的方法。分享给大家供大家参考。具体实现方法如下:当需要监控某一文件,FileSystemWatcher类提供
- 新建SL4 应用程序,在MainPage下添加代码:<Button x:Name="btnThread1" Cli
- 目前有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。1.Java Timer定时首先继承j
- 在看KMP算法时,想要简单的统计一下执行时间和性能。得出的结论是: Java的String的indexOf方法性能最好,其次是KMP算法,其
- 首先struts上传最大大小由两个地方决定. · struts.multipart.maxSize决定整个post的form最大是
- 标题index界面加载问题刚开始学习springBoot记录一下遇到的小问题1.index.html加载不出来的问题我习惯性的将index.
- 一、概述SPI(Service Provider Interface),是Java内置的一种服务提供发现机制,可以用来提高框架的扩展性,主要
- 本文实例讲述了Android数据库中事务操作方法之银行转账功能。分享给大家供大家参考,具体如下:主javapackage com.ithei
- 你是否受够了每次修改静态文件都要重启服务器?有时候在一些公司前后端的职责没有那么的明确,往往后台人员也要去写一些页面,像jsp页面,或者其他
- Spring Cloud 为开发人员提供了一系列的工具来快速构建分布式系统的通用模型 。例如:配置管理、服务发现、断路由、智能路由、微代理、
- 为什么要自定义缓存注解?Spring Cache本身提供@Cacheable、@CacheEvict、@CachePut等缓存注解,为什么还
- 前言Java克隆(Clone)是Java语言的特性之一,但在实际中应用比较少见。但有时候用克隆会更方便更有效率。对于克隆(Clone),Ja
- 正常在Java工程中读取某路径下的文件时,可以采用绝对路径和相对路径,绝对路径没什么好说的,相对路径,即相对于当前类的路径。在本地工程和服务
- 前言本文基于itext7实现pdf加水印和合并的操作。实际上在我们实际项目应用中,对于pdf的操作也是比较常见的,我上一个项目中就有将结果转
- Android多点触控涉及到的知识点1、ScaleGestureDetector 2、OnScaleGestureListener 3、Ma
- 实现如下边框效果:虚线画效果,可以使用Android中的xml来做。下面话不多说,直接上代码:<RelativeLayout &nbs
- .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息。.csproj:项目文件,创建应用程序所需的引用、数据连接
- 开始 在本文中,我将展示如何使用各种不同的 Java 技术构建一些简单的 Comet 风格的 Web 应
- 1. 准备工作首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而