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);
        }

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: