前段时间我被一个需求困扰,如何调用钉钉接口发送图片消息?文字消息用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); }