Bootstrap

C# 企业微信机器人推送消息 windows服务应用程序的使用

@C# 企业微信机器人推送消息
先添加一个机器人!
在这里插入图片描述

然后查看机器人就可以得到一个 webhook
特别特别要注意:一定要保护好机器人的webhook地址,避免泄漏!

然后开始写代码 ,只需要httpPost 调用一下这个地址就可以发送消息了。
首先我们创建服务项目,可以更好的定时发送
在这里插入图片描述

设置服务的属性
在这里插入图片描述
在这里插入图片描述
服务添加完成后可以写一个批处理文件去安装服务 使用微软的installutil 去安装服务
在程序debug目录 创建一个文本文件 扩展名改为bat就可以,然后把下面内容复制进去。最后以管理员方式运行
%~dp0 获取当前目录
WindowsService1.exe 项目的名称 根据实际情况定
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0WindowsService1.exe pause
运行成功后可以看到有我们刚刚创建好的服务
在这里插入图片描述

以上是windows服务程序的安装。 接下来我们写推送消息的实现

先写一个post请求的方法

   private static string HttpPost(string url, string body)
        {
            try
            {
                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();
                }
            }
            catch (Exception)
            {
            }
            return "";
        }

然后是我们请求的内容 ,使用json格式更方便 于是我创建了一个请求的类 最后转换成json就可以

    class RequestModel
    {
        public string msgtype { get; set; } = "text";
        public text text { get; set; } = new text();
    }

    class text
    {
        /// <summary>
        /// 发松的内容
        /// </summary>
        public string content { get; set; } = "广州今日天气:29度,大部分多云,降雨概率:60%";
        public string mentioned_list { get; set; } = "@all";
    }

最后我们写一个方法去调用,使用 JsonConvert可以把实体类转换成Json格式
需要下载Newtonsoft.Json.dll 可以鼠标右键在nuget管理包中搜索下载

        /// <summary>
        /// 机器人发送消息
        /// </summary>
        /// <param name="message"></param>
        public static void WeChatRobot(string message)
        {
            try
            {
                RequestModel request = new RequestModel();
                request.text.content = message;
                string json = JsonConvert.SerializeObject(request);
                string webhookUrl = "这里填写机器人的webhook 可以在机器人信息那里查看";
                string response = string.Empty;
                while (string.IsNullOrEmpty(response))
                {
                    //3s请求一次 直到请求成功
                    response = HttpPost(webhookUrl, json);
                    Thread.Sleep(3000);
                }
                File.AppendAllText("D:\\Response.txt", response);
            }
            catch (Exception)
            {

                throw;
            }
        }

最后我们在服务启动里面调用这个机器人发送的方法就可以
判断每周五发送消息

 protected override void OnStart(string[] args)
        {
            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    DayOfWeek DayOfWeek = DateTime.Now.DayOfWeek;
                    if (DayOfWeek == DayOfWeek.Friday)
                    {
                        Services.WeChatRobot($"今天是{DayOfWeek}");
                        break;
                    }
                    Thread.Sleep(1000);
                }
            });
        }

        protected override void OnStop()
        {
        }

程序有改动,只需要重新生成程序。 在安装一遍服务就可以。

;