C# 企业微信消息推送

企业微信开发API文档链接

第一步 注册企业微信

只需要填写下基本资料就可以。

注册

第二步

记下企业微信 CorpID

这里写图片描述

第三步 创建应用,并记下 AgentId与Secret

这里写图片描述
这里写图片描述
这里写图片描述

第四步 写代码实现App内推送消息

  1. 新建项目(本文以类库项目为例)
    这里写图片描述
    在实际项目项目中引用时,需配置一下关键值。
    这里写图片描述
    CorpSendBase:企业微信发送消息的基类,因为消息类别有多种,可以推送文本、图片、视频、文件、图文等类型。

    /// <summary>
    /// 企业微信发送消息的基础消息内容
    /// </summary>
    class CorpSendBase
    {
        /// <summary>
        /// UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
        /// </summary>
        public string touser { get; set; }
        /// <summary>
        /// PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string toparty { get; set; }
        /// <summary>
        /// TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string totag { get; set; }
        /// <summary>
        /// 消息类型
        /// </summary>
        public string msgtype { get; set; }
        /// <summary>
        /// 企业应用的id,整型。可在应用的设置页面查看
        /// </summary>
        public string agentid { get; set; }
        /// <summary>
        /// 表示是否是保密消息,0表示否,1表示是,默认0
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string safe { get; set; }
        public CorpSendBase()
        {
            this.agentid = System.Configuration.ConfigurationManager.AppSettings["CorpSendBaseAgentID"].ToString();
            this.safe = "0";
        }
    }
    

    CorpSendText:用来发送文本消息。

    class Text
    {
        private string _content;
        /// <summary>
        /// 要发送的文本内容字段,必须小写,企业微信API不识别大写。
        /// </summary>
        public string content
        {
            get { return _content; }
            set { _content = value; }
        }
    
    }
    class CorpSendText: CorpSendBase
    {
        private Text _text;
        /// <summary>
        /// 要发送的文本,必须小写,企业微信API不识别大写。
        /// </summary>
        public Text text
        {
            get { return _text; }
            set { this._text = value; }
        }
    
        
        public CorpSendText(string content)
        {
            base.msgtype = "text";
            this.text = new Text
            {
                content = content
            };
        }
    }
    

    QYWeixinHelper:消息发送工具类。

    public class QYWeixinHelper
    {
        static string corpid = System.Configuration.ConfigurationManager.AppSettings["corpid"].ToString();
        static string corpsecret = System.Configuration.ConfigurationManager.AppSettings["secret"].ToString();
        static string messageSendURI = System.Configuration.ConfigurationManager.AppSettings["messageSendURI"].ToString();
    
        /// <summary>
        /// 获取企业微信的accessToken
        /// </summary>
        /// <param name="corpid">企业微信ID</param>
        /// <param name="corpsecret">管理组密钥</param>
        /// <returns></returns>
        static string GetQYAccessToken(string corpid, string corpsecret)
        {
            string getAccessTokenUrl = System.Configuration.ConfigurationManager.AppSettings["getAccessTokenUrl"].ToString(); 
            string accessToken = "";
    
            string respText = "";
    
            //获取josn数据
            string url = string.Format(getAccessTokenUrl, corpid, corpsecret);
    
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
            using (Stream resStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(resStream, Encoding.Default);
                respText = reader.ReadToEnd();
                resStream.Close();
            }
    
            try
            {
                JavaScriptSerializer Jss = new JavaScriptSerializer();
                Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(respText);
                //通过键access_token获取值
                accessToken = respDic["access_token"].ToString();
            }
            catch (Exception) { }
    
            return accessToken;
        }
    
        /// <summary>
        /// Post数据接口
        /// </summary>
        /// <param name="postUrl">接口地址</param>
        /// <param name="paramData">提交json数据</param>
        /// <param name="dataEncode">编码方式</param>
        /// <returns></returns>
        static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
        {
            string ret = string.Empty;
            try
            {
                byte[] byteArray = dataEncode.GetBytes(paramData); //转化
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
    
                webReq.ContentLength = byteArray.Length;
                Stream newStream = webReq.GetRequestStream();
                newStream.Write(byteArray, 0, byteArray.Length);//写入参数
                newStream.Close();
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
                ret = sr.ReadToEnd();
                sr.Close();
                response.Close();
                newStream.Close();
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            return ret;
        }
    
        /// <summary>
        /// 推送信息
        /// </summary>
        /// <param name="corpid">企业微信ID</param>
        /// <param name="corpsecret">管理组密钥</param>
        /// <param name="paramData">提交的数据json</param>
        /// <param name="dataEncode">编码方式</param>
        /// <returns></returns>
        public static void SendText(string empCode, string message)
        {
            string accessToken = "";
            string postUrl = "";
            string param = "";
            string postResult = "";
    
            accessToken = GetQYAccessToken(corpid, corpsecret);
            postUrl = string.Format(messageSendURI, accessToken);
            CorpSendText paramData = new CorpSendText(message);
            foreach (string item in empCode.Split('|'))
            {
                //paramData.touser = GetOAUserId(item);//在实际应用中需要判断接收消息的成员是否在系统账号中存在。
                paramData.touser = item;
                param = JsonConvert.SerializeObject(paramData);
                if (paramData.touser != null)
                {
                    postResult = PostWebRequest(postUrl, param, Encoding.UTF8);
                }
                else
                {
                    postResult = "账号" + paramData.touser + "在OA中不存在!";
                }
                CreateLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss") + ":\t" + item + "\t" + param + "\t" + postResult);
            }
        }
        
        private static void CreateLog(string strlog)
        {
            string str1 = "QYWeixin_log" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            //BS CS应用日志自适应
            string path = System.Web.HttpContext.Current == null ? Path.GetFullPath("..") + "\\temp\\" : System.Web.HttpContext.Current.Server.MapPath("temp");
            try
            {
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                path = Path.Combine(path, str1);
                StreamWriter sw = File.AppendText(path);
                sw.WriteLine(strlog);
                sw.Flush();
                sw.Close();
    
            }
            catch
            {
            }
        }
    

第五步 测试消息推送

    class Program
    {
        static void Main(string[] args)
        {
            string touser = "Kiaka";";
            Console.WriteLine("回车终止:");
            do
            {
                QYWeixin.QYWeixinHelper.SendText(touser, "消息推送测试_:</br>"+"a:"+"xxx" + DateTime.Now.ToString());
            } while (Console.ReadKey().Key != ConsoleKey.Enter);
        }
    }
### 回答1: c是第三个英文字母,在字母表中排名为3。它是一个常见的字母,广泛使用在英语和许多其他语言的拼写中。 在计算机科学中,c是一种编程语言,也是一种广泛使用的编程语言之一。由于其简单的语法和高效的执行速度,C语言被广泛应用于系统程序设计和嵌入式系统开发。同时,C语言也是许多其他编程语言的基础,如C++和Java。 此外,“C”还可以代表一些其他概念。例如,C型血液是指人体血液中的一种特定血型,大约占全球人口的37%。C型血液可以分为C型RH阳性和C型RH阴性两种类型。 “C”还可以代表一些单位和术语。在化学中,C是碳元素的化学符号。在物理学中,C代表光速,其数值约为299,792,458米/秒。在数学中,C代表复数集合中的一个特定复数,即C={a+bi|a,b∈R}。 总而言之,c是一个常见的字母,代表许多不同的概念和领域。无论是在语言、计算机科学、医学还是数学中,c都扮演着重要的角色。 ### 回答2: c是英文字母表中的第3个字母。它的大小写形式分别是C和c。c在英语中可以表示许多不同的含义和用途。例如,在计算机科学中,C是一种编程语言,它被广泛用于开发软件和系统。 C语言具有高效性和灵活性,因此它是许多程序员的首选语言之一。此外,在数学中,c可以表示复数的虚部,用于表示一个复数的实部和虚部。在音乐中,C是音阶的第一音符,通常用作参考音。 在日常生活中,c还可以代表一系列词汇,例如cat(猫)、cap(帽子)、car(汽车)等等。总之,c是一个常见的字母,它在不同的领域和语境中有着不同的含义和用途。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值