C#如何实现调取钉钉考勤接口的功能

 更新时间:2022年08月11日 14:35:32   作者:努力尝试!  
这篇文章主要介绍了C#如何实现调取钉钉考勤接口的功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

调取钉钉考勤接口的功能

公司需要做一个钉钉考勤的页面,让我去写这个功能。结果却比我想象的要麻烦一些!具体是怎么个麻烦呢

下面直入正题

首先我们找到获取钉钉考勤结果的接口。结果发现请求参数里有一个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);
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • C# Onnx实现特征匹配DeDoDe检测

    C# Onnx实现特征匹配DeDoDe检测

    这篇文章主要为大家详细介绍了C# Onnx如何实现特征匹配DeDoDe检测,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C#配置文件Section节点处理总结

    C#配置文件Section节点处理总结

    这篇文章主要介绍了C#配置文件Section节点处理总结,针对配置文件Section节点的处理做了较为详细的实例总结,需要的朋友可以参考下
    2014-10-10
  • Unity3D实现模型随机切割

    Unity3D实现模型随机切割

    这篇文章主要为大家详细介绍了Unity3D实现模型随机切割,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 基于C#编写经理评分系统

    基于C#编写经理评分系统

    最近接了这样一个项目,要求使用c#编写经理评分系统,需求,要显示员工信息,实现项目经理给员工评分功能,今天小编分步骤给大家介绍,需要的的朋友参考下
    2017-03-03
  • C#使用Task.ContinueWith组合任务

    C#使用Task.ContinueWith组合任务

    这篇文章介绍了C#使用Task.ContinueWith组合任务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • c#委托与事件(详解)

    c#委托与事件(详解)

    本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论
    2021-07-07
  • C#中38个常用运算符的优先级的划分和理解

    C#中38个常用运算符的优先级的划分和理解

    这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享
    2012-08-08
  • C#使用SQL DataReader访问数据的优点和实例

    C#使用SQL DataReader访问数据的优点和实例

    今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • C#使用WebService结合jQuery实现无刷新翻页的方法

    C#使用WebService结合jQuery实现无刷新翻页的方法

    这篇文章主要介绍了C#使用WebService结合jQuery实现无刷新翻页的方法,涉及C#中WebService与jQuery操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#中的矩形数组(多维数组)和锯齿数组的实现

    C#中的矩形数组(多维数组)和锯齿数组的实现

    本文主要介绍了C#中的矩形数组(多维数组)和锯齿数组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04

最新评论