通过钉钉创建内部群和发送消息到群或者单个人

  class DingDingHelper
    {
        //免登必需参数
        private static string appid = "";
        //免登必需参数
        private static string appsecret = "";
        //其他操作必需参数 
        private static string corpid = "";//应用id 
        //其他操作必需参数 
        private static string corpsecret = "";
        //获取应用token    
        public AccessTokenResult GetAccessToken0()
        {
            string url = "https://oapi.dingtalk.com/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
            try
            {
                var response = ApiRequest.HttpGet(url);
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<AccessTokenResult>(response);
                return result;
            }
            catch (Exception ex)
            {
                //Log.LogMsg("DingDing_GetAccessToken0_Exception", DateTime.Now, ex.Message);
                throw new Exception(ex.Message);
            }
        }
        //根据手机号获取用户UserID  
        public string UserID(string DDToken, string phone)
        {
            // 通过手机号获取 userId 
            string url = string.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}", DDToken, phone);
            string userid = "找不到用户id";//用户企业内部id
            var requestResult = ApiRequest.HttpGet(url);
            // JToken json = requestResult;
            //  JToken json = JToken.Parse(HttpUtiy.HttpGet(url));
            //if (json["errmsg"].ToString() != "找不到该用户")
            //{
            //    userid = json["userid"].ToString();
            //}
            var result = Newtonsoft.Json.JsonConvert.DeserializeObject<getUser>(requestResult);
            userid = result.userid;
            if (userid == null)
            {
                userid = "找不到用户id";
            }
            return userid;
        }
        /// <summary>
        /// 创建群会话
        /// </summary>
        /// <param name="phone1">手机号</param>
        /// <param name="phone2">手机号</param>
        /// <param name="Chatidname">群名称</param>
        public createResult Creatchatid(string phone1, string phone2, string Chatidname, string DDToken)
        {
            #region 获取用户企业内部id
            //获取值班人员企业userid
            string userid = UserID(DDToken, phone1);//获取用户userId(第一个人作为群主)
            string userid2 = UserID(DDToken, phone2);
            //用户id添加到,成员数组。
            string[] Chatiduseridlist = new string[] { userid, userid2 };//添加到群成员列表里
            bool flagid;
            #endregion
            //判断是否正确获得用户企业id
            if (userid.Trim() == "找不到用户id" || userid2.Trim() == "找不到用户id")
            {
                flagid = false;//获取用户id失败
                return null;
            }
            else
            {
                #region 创建群会话
                string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/create?access_token={0}", DDToken);
                var json_req = new
                {
                    name = Chatidname, // 群名称
                    owner = userid,  // 群主id
                    useridlist = Chatiduseridlist
                };
                string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为字符串类型 
                var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<createResult>(response);
                // JToken json = JToken.Parse(HttpUtiy.HttpPost(MessageUrl, jsonRequest));//返回值转换为JToken格式                          //赋值给成员变量,避免多次创建群。
                string getchatid = result.chatid;//json["chatid"].ToString();
                return result;
                #endregion 
            }
        }
        //创建群会话2
        public createResult GetcreateChart(string accessToken)
        {
            try
            {
                string url = "https://oapi.dingtalk.com/chat/create?access_token=" + accessToken;
                string param = "{\"name\": \"系统异常处理群\",\"owner\": \"1010\",\"useridlist\": [\"1155\",\"1010\"],\"showHistoryType\": \"1\"," +
                    "\"searchable\": \"1\",\"validationType\": \"0\",\"mentionAllAuthority\": \"0\",\"managementType\": \"1\",\"chatBannedType\": \"0\"}";
                var response = ApiRequest.HttpPost(url, param);
                //Log.LogMsg("DingDing_GetSnsToken", DateTime.Now, response); 
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<createResult>(response);
                return result;
            }
            catch (Exception ex)
            {
                //Log.LogMsg("DingDing_GetSnsToken_Exception", DateTime.Now, ex.Message);
                throw new Exception(ex.Message);
            }
        }

        //发送群消息 --文本
        public SendResult SendTxtChart(string accessToken, string chatid, string text)
        {
            try
            {
                //MessageResult mr =  new MessageResult() { chatId = chatid, msg = new Msg { msgType = "text", text = new Text { content = text } } };
                //string param = JsonConvert.SerializeObject(mr);
                //string url = "https://connector.dingtalk.com/webhook/trigger/data/sync?webhookId=101fe8af288b212b796c0004";
                //var response = ApiRequest.HttpPost(url, param); 
                //发送群消息
                string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}", accessToken);
                var json_req = new
                {
                    chatid = chatid,//获取群会话id
                    msg = new
                    {
                        msgtype = "text",
                        text = new
                        {
                            content = text
                        }
                    }
                };

                string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转字符串
                var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);//{"errcode":0,"errmsg":"ok","messageId":"msguvjcIlESCBcRlbgWkrVvYw=="} 
                //Log.LogMsg("DingDing_GetSnsToken", DateTime.Now, response); 
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
                return result;
            }
            catch (Exception ex)
            {
                return null;
                //  throw new Exception(ex.Message);
            }
        }
       //钉钉发送消息到个人--文本
        public SendResult SendTxtUserChart(string accessToken, string UserList, string text)
        { 
            try
            {  
                string MessageUrl = "https://oapi.dingtalk.com/message/send?access_token=" + accessToken;
                var json_req = new
                {
                    touser = UserList,// "10110|10110", //接受推送userid,不同用户用|分割
                    toparty = "",  //接受推送部门id
                    agentid = "225253872",
                    msgtype = "text", //推送类型
                    text = new
                    {
                        content = text
                    }
                };
                string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
                var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);

                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
                 return result;
            }
            catch (Exception ex)
            {
                return null;
                //  MessageBox.Show(ex.ToString());
            }


        }

        //发送图片
        public SendResult SendImageChart(string accessToken, string chatid, string media_ids)
        {
            try
            {
                //发送群消息
                string MessageUrl = string.Format("https://oapi.dingtalk.com/chat/send?access_token={0}", accessToken);
                var json_req = new
                {
                    chatid = chatid,//群会话id
                    msg = new
                    {
                        msgtype = "image",
                        image = new
                        {
                            media_id = media_ids
                        }
                    }
                };
                string jsonRequest = JsonConvert.SerializeObject(json_req);//将json转字符串
                var response = ApiRequest.HttpPost(MessageUrl, jsonRequest);
                var result = Newtonsoft.Json.JsonConvert.DeserializeObject<SendResult>(response);
                return result;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// <summary>
        /// 钉钉上传媒体文件获取 media_id 
        /// </summary>
        /// <param name="url">API地址</param>
        /// <param name="fileWithPath">文件或图片本地路径</param>
        /// <returns></returns>
        public static UPmediaResult PostFile(string url, string fileWithPath)
        {//"media_id":"@lAPPDfJ6bxHyx8rMs8yo"
            try
            {
                // var url = " https://oapi.dingtalk.com/media/upload?access_token=" + DDToken + "&type=image";
                // var fileName = @"d:\a.jpg"; 
                // var requestResult = PostFile(url, fileName);//调用方式
                var result = string.Empty;
                var request = (HttpWebRequest)WebRequest.Create(url);
                var boundary = "----------" + DateTime.Now.Ticks.ToString("x");
                request.ContentType = "multipart/form-data; boundary=" + boundary;
                request.Method = "POST";
                using (Stream requestStream = request.GetRequestStream())
                {
                    byte[] boundarybytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
                    byte[] trailer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "–-\r\n");
                    var filename = Path.GetFileName(fileWithPath);
                    using (FileStream fs = new FileStream(fileWithPath, FileMode.Open, FileAccess.Read))
                    {
                        byte[] bArr = new byte[fs.Length];
                        fs.Read(bArr, 0, bArr.Length);
                        requestStream.Write(boundarybytes, 0, boundarybytes.Length);
                        var header = $"Content-Disposition:form-data;name=\"media\";filename=\"{filename}\"\r\nfilelength=\"{fs.Length}\"\r\nContent-Type:application/octet-stream\r\n\r\n";
                        byte[] postHeaderBytes = Encoding.UTF8.GetBytes(header.ToString());
                        requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                        fs.Close();
                        requestStream.Write(bArr, 0, bArr.Length);
                        requestStream.Write(trailer, 0, trailer.Length);
                    }
                }
                var response = (HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                using (var streamReader = new StreamReader(response.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }

                var media = Newtonsoft.Json.JsonConvert.DeserializeObject<UPmediaResult>(result);

                return media;

            }
            catch (Exception)
            {
                return null;
                //throw;
            }
        }


        get请求
        //public static string HttpGet(string url)
        //{
        //    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        //    request.Method = "GET";
        //    request.ContentType = "text/html;charset=UTF-8";
        //    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //    Stream myResponseStream = response.GetResponseStream();
        //    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
        //    string retString = myStreamReader.ReadToEnd();
        //    myStreamReader.Close();
        //    myResponseStream.Close();
        //    return retString;
        //}

        post请求
        //public static string HttpPost(string url, string body)
        //{
        //    //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
        //    Encoding encoding = Encoding.UTF8;
        //    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        //    request.Method = "POST";
        //    request.Accept = "text/html, application/xhtml+xml, */*";
        //    request.ContentType = "application/json";

        //    byte[] buffer = encoding.GetBytes(body);
        //    request.ContentLength = buffer.Length;
        //    request.GetRequestStream().Write(buffer, 0, buffer.Length);
        //    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
        //    {
        //        return reader.ReadToEnd();
        //    }
        //}
    }

    public class MessageResult
    {
        public string chatId { get; set; }

        public Msg msg { get; set; }

    }
    public class Msg
    {
        public string msgType { get; set; }

        public Text text { get; set; }

    }
    public class Images
    {
        public string media_id { get; set; }

    }
    public class Text
    {
        public string content { get; set; }

    }

    public class AccessTokenResult
    {
        public string access_token { get; set; }
        public int errcode { get; set; }

        public string errmsg { get; set; }
    }

    public class createResult
    {
        public int errcode { get; set; }

        public string errmsg { get; set; }

        public string chatid { get; set; }

        public string openConversationId { get; set; }
        public int conversationTag { get; set; }
    }
    public class SendResult
    {
        public int errcode { get; set; }
        public string errmsg { get; set; }

        public string messageId { get; set; }
    }
    public class UPmediaResult
    {
        public int errcode { get; set; }
        public string errmsg { get; set; }

        public string media_id { get; set; }
        public string created_at { get; set; }
        public string type { get; set; }
    }
    public class getUser
    {
        public int errcode { get; set; }
        public string errmsg { get; set; }

        public string userid { get; set; }
    }
 

  • 28
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值