深入学习ing

.net core发送钉钉消息_消息加签模式

这是一篇纯记录代码文章,完整运行需要自己调整:

钉钉发送消息后台进行了改版,这里介绍加签模式的代码:

 

 1-.net framework版本:

/// <summary>
    /// 钉钉机器人
    /// </summary>
    public class DingdingHelper
    {
        private static DingdingGroupConfig _DingdingGroupConfig;
        static DingdingHelper()
        {
            DingdingHelper._DingdingGroupConfig = new DingdingGroupConfig
            {
                AtPhones = "156xxxxxxxx",
                Secret = "钉钉签名",
                WebHookUrl = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
            };
        }

        /// <summary>
        /// 发送钉钉消息内容
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static void SendDingdingMessage(string content)
        {
            string sign = null;

            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string timeStamp = Convert.ToInt64(ts.TotalMilliseconds).ToString();

            var encoding = new UTF8Encoding();
            byte[] signBytes = encoding.GetBytes($"{timeStamp}\n{_DingdingGroupConfig.Secret}");
            byte[] secretByte = encoding.GetBytes(_DingdingGroupConfig.Secret);
            using (var hmacsha256 = new HMACSHA256(secretByte))
            {
                byte[] hashmessage = hmacsha256.ComputeHash(signBytes);
                sign = HttpUtility.UrlEncode(Convert.ToBase64String(hashmessage));
            }

            string messageUrl = $"{_DingdingGroupConfig.WebHookUrl}&timestamp={timeStamp}&sign={sign}";
            List<string> atPhoneList = null;
            if (!string.IsNullOrEmpty(_DingdingGroupConfig.AtPhones))
            {
                atPhoneList = _DingdingGroupConfig.AtPhones.Split(',').ToList();
                atPhoneList.RemoveAll(m => string.IsNullOrEmpty(m));
            }
            DingDingText dingDingText = new DingDingText
            {
                msgtype = "text",
                text = new DingDingText.textObj
                {
                    content = content
                },
                at = new DingDingText.atObj
                {
                    isAtAll = false,
                    atMobiles = atPhoneList
                }
            };
            var client = new RestClient(messageUrl);
            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/json", JsonHelp.SerializeObject(dingDingText), ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);
        }

        private class DingDingText
        {
            public string msgtype { get; set; }
            public textObj text { get; set; }

            public class textObj
            {
                public string content { get; set; }
            }
            public atObj at { get; set; }
            public class atObj
            {
                public List<string> atMobiles { get; set; }
                public bool isAtAll { get; set; }
            }
        }

        /// <summary>
        /// 钉钉配置
        /// </summary>
        public class DingdingGroupConfig
        {
            /// <summary>
            /// 群组Webhook地址
            /// </summary>
            public string WebHookUrl { get; set; }
            /// <summary>
            /// 安全秘钥
            /// </summary>
            public string Secret { get; set; }
            /// <summary>
            /// @人的手机号(多个以逗号分隔)
            /// </summary>
            public string AtPhones { get; set; }
        }

    }
View Code

 

2-.net core版本:

using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace MyPaymentHelper.Helper
{
    /// <summary>
    /// 钉钉机器人
    /// </summary>
    public class DingdingHelper
    {
        private static DingdingGroupConfig _DingdingGroupConfig;
        static DingdingHelper()
        {
            DingdingHelper._DingdingGroupConfig = new DingdingGroupConfig
            {
                AtPhones = "156xxxxxxxx",
                Secret = "钉钉签名",
                WebHookUrl = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
            };
        }

        /// <summary>
        /// 发送钉钉消息内容
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static void SendDingdingMessage(string content)
        {
            string sign = null;

            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string timeStamp = Convert.ToInt64(ts.TotalMilliseconds).ToString();

            var encoding = new UTF8Encoding();
            byte[] signBytes = encoding.GetBytes($"{timeStamp}\n{_DingdingGroupConfig.Secret}");
            byte[] secretByte = encoding.GetBytes(_DingdingGroupConfig.Secret);
            using (var hmacsha256 = new HMACSHA256(secretByte))
            {
                byte[] hashmessage = hmacsha256.ComputeHash(signBytes);
                sign = HttpUtility.UrlEncode(Convert.ToBase64String(hashmessage));
            }

            string messageUrl = $"{_DingdingGroupConfig.WebHookUrl}&timestamp={timeStamp}&sign={sign}";
            List<string> atPhoneList = null;
            if (!string.IsNullOrEmpty(_DingdingGroupConfig.AtPhones))
            {
                atPhoneList = _DingdingGroupConfig.AtPhones.Split(',').ToList();
                atPhoneList.RemoveAll(m => string.IsNullOrEmpty(m));
            }
            DingDingText dingDingText = new DingDingText
            {
                msgtype = "text",
                text = new DingDingText.textObj
                {
                    content = content
                },
                at = new DingDingText.atObj
                {
                    isAtAll = false,
                    atMobiles = atPhoneList
                }
            };
            var client = new RestClient(messageUrl);
            var request = new RestRequest("", Method.Post);
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/json", JsonConvert.SerializeObject(dingDingText), ParameterType.RequestBody);
            RestResponse response = client.Execute(request);
        }

        private class DingDingText
        {
            public string msgtype { get; set; }
            public textObj text { get; set; }

            public class textObj
            {
                public string content { get; set; }
            }
            public atObj at { get; set; }
            public class atObj
            {
                public List<string> atMobiles { get; set; }
                public bool isAtAll { get; set; }
            }
        }

        /// <summary>
        /// 钉钉配置
        /// </summary>
        public class DingdingGroupConfig
        {
            /// <summary>
            /// 群组Webhook地址
            /// </summary>
            public string WebHookUrl { get; set; }
            /// <summary>
            /// 安全秘钥
            /// </summary>
            public string Secret { get; set; }
            /// <summary>
            /// @人的手机号(多个以逗号分隔)
            /// </summary>
            public string AtPhones { get; set; }
        }

    }
}
View Code

 

posted on 2021-02-19 11:55  深入学习ing  阅读(473)  评论(0)    收藏  举报

导航