C#调用钉钉接口发送图片群消息

简介: C#调用钉钉接口发送图片群消息

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


相关文章
|
6月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
213 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
6月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
6月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
6月前
|
JSON API 数据格式
在钉钉开放平台中,创建或更新OA审批表单模板需要通过API接口进行操作
在钉钉开放平台中,创建或更新OA审批表单模板需要通过API接口进行操作【1月更文挑战第20天】【1月更文挑战第97篇】
171 1
|
6月前
|
运维 监控 安全
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
195 0
|
3月前
|
C#
|
1月前
|
C#
C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
49 9
|
2月前
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
118 5
|
3月前
|
API C# 数据库
SemanticKernel/C#:实现接口,接入本地嵌入模型
SemanticKernel/C#:实现接口,接入本地嵌入模型
83 1
|
3月前
|
C#
C# 面向对象编程(三)——接口/枚举类型/泛型
C# 面向对象编程(三)——接口/枚举类型/泛型
35 0