C# markdown 实操(用于钉钉的消息通知)

先上效果:

 

 再上代码(只有markdown的部分):

StringBuilder content = new StringBuilder();
            content.Append("**销售订单系统提醒:**");
            content.Append("\n\n");//换行
            content.Append("------"); //下划线
            content.Append("\n\n");//换行            
            content.Append(txtSendContent.Text);
            content.Append("\n\n  ");//多个\n只能换一行,加上一个空格即可辅助完成换行
            content.Append("\n\n");
            content.Append("<br>"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

            var sr = m_DingDingHelper.SendActionCardMessageToUser("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text);
            

DingDingHelper类自己封装的,仅用于参考,功能很少,大家见谅

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace DingDingAPP
{
    public class DingDingHelper
    {
        
        string appkey = "*****";
        string appsecret = "******";
        string agentid = "*****";  
        string corpId = "******";//企业号
        string AccessToken = String.Empty;

        #region 通过免登授权码和access_token获取用户的userid
        public string GetUserIdByCode(string code)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(code))
                return "";

            try
            {
                string AccessUrl = string.Format("https://oapi.dingtalk.com/user/getuserinfo?access_token={0}&code={1}", AccessToken, code);
                //请求获取token  GET方式
                Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(HttpHelper.HttpGet(AccessUrl, null));
                return json["userid"].ToString();
            }
            catch (Exception ex)
            {
                return "";
            }
        }
        #endregion

        #region 根据手机号获取用户id
        /// <summary>
        /// 根据手机号获取用户id
        /// </summary>
        /// <param name="phoneNumber">用户手机号</param>
        /// <returns></returns>
        public string GetUserIdByPhoneNumber(string phoneNumber)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(phoneNumber))
                return "";

            string MessageUrl = String.Format("https://oapi.dingtalk.com/user/get_by_mobile?access_token={0}&mobile={1}", AccessToken, phoneNumber);
            
            try
            {
                var sr = HttpHelper.HttpGet(MessageUrl, null);
                //Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(sr);
                return sr;// json["userid"].ToString();
            }
            catch (Exception ex)
            {
                return "";
            }
            
        }
        #endregion

        #region 根据用户id获取用户详细信息
        /// <summary>
        /// 根据用户id获取用户详细信息
        /// </summary>
        /// <param name="userid">用户id</param>
        /// <returns></returns>
        public string GetUseInfoByUid(string userid)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(userid))
                return "";

            try
            {
                string AccessUrl = string.Format("https://oapi.dingtalk.com/user/get?access_token={0}&userid={1}", AccessToken, userid);
                //请求获取token  GET方式
                return HttpHelper.HttpGet(AccessUrl, null);               
            }
            catch (Exception ex)
            {
                return "";
            }
        }
        #endregion

        #region 获取TOKEN
        public void GetToken()
        {
            if (string.IsNullOrWhiteSpace(AccessToken))
            {
                string AccessUrl = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", appkey, appsecret);
                //请求获取token  GET方式
                Newtonsoft.Json.Linq.JToken json = Newtonsoft.Json.Linq.JToken.Parse(HttpHelper.HttpGet(AccessUrl, null));
                AccessToken = json["access_token"].ToString();
            }
        }
        #endregion

        #region 消息推送
        /// <summary>
        /// 文本消息推送(Text格式)
        /// </summary>
        /// <param name="text">推送内容</param>
        /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param>
        public string SendTextMessageToUser(string text,string userid_list)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text)|| string.IsNullOrWhiteSpace(userid_list))
                return "";

            string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken);
            

            var json_req = SendCommonText(text, userid_list);
            //var json_req = SendCommonTextAndTitle("销售订单管理系统", content.ToString(), txtusesid.Text);
            //var json_req = SendCardMsg("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text);

            string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
            //POST请求 消息推送
            var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest);
            return sr;
        }

        /// <summary>
        /// 文本消息推送(MarkDown格式)
        /// </summary>
        /// <param name="title">提醒用户的标题</param>
        /// <param name="text">提醒内容(支持markdown文本解析)</param>
        /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param>
        /// <returns></returns>
        public string SendMarkDownMessageToUser(string title,string text, string userid_list)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(userid_list))
                return "";

            string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken);


            //var json_req = SendCommonText(text, userid_list);
            var json_req = SendCommonTextAndTitle(title, text, userid_list);
            //var json_req = SendCardMsg("销售订单管理系统", content.ToString(), "查看详情", "https://ding-doc.dingtalk.com/", txtusesid.Text);

            string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
            //POST请求 消息推送
            var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest);
            return sr;
        }

        /// <summary>
        /// 文本消息推送(MarkDown格式)
        /// </summary>
        /// <param name="title">提醒用户的标题</param>
        /// <param name="text">提醒内容(支持markdown文本解析)</param>
        /// <param name="linkText">链接文本</param>
        /// <param name="linkUrl">链接地址</param>
        /// <param name="userid_list">用户id,多个用户用,隔开(如:123,456)</param>
        /// <returns></returns>
        public string SendActionCardMessageToUser(string title, string text,string linkText,string linkUrl ,string userid_list)
        {
            GetToken();
            if (string.IsNullOrWhiteSpace(AccessToken) || string.IsNullOrWhiteSpace(text)                 
                || string.IsNullOrWhiteSpace(userid_list))
                return "";

            string MessageUrl = String.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", AccessToken);

            var json_req = SendCardMsg(title, text, linkText, linkUrl, userid_list);

            string jsonRequest = JsonConvert.SerializeObject(json_req);//将对象转换为json
            //POST请求 消息推送
            var sr = HttpHelper.HttpPost(MessageUrl, jsonRequest);
            return sr;
        }
        #endregion

        #region 推送消息类型
        /// <summary>
        /// 推送普通文本内容
        /// </summary>
        /// <param name="content"></param>
        /// <param name="usesid"></param>
        /// <returns></returns>
        public object SendCommonText(string content, string usesid)
        {
            return new
            {
                userid_list = usesid,  //接受推送userid,不同用户用|分割
                //dept_id_list = "127577105",   //接受推送部门id
                agent_id = agentid,//应用Id
                msgtype = "text", //推送类型
                msg = new
                {
                    msgtype = "text",
                    text = new { content = content.ToString() }//内容text

                }
            };
        }
        /// <summary>
        /// 推送markdown内容
        /// </summary>
        /// <param name="_title"></param>
        /// <param name="_content"></param>
        /// <param name="usesid"></param>
        /// <returns></returns>
        public object SendCommonTextAndTitle(string _title, string _content, string usesid)
        {
            return new
            {
                userid_list = usesid,  //接受推送userid,不同用户用|分割
                dept_id_list = "",   //接受推送部门id
                agent_id = agentid,//应用Id                
                msg = new
                {
                    msgtype = "markdown",//推送类型
                    markdown = new
                    {
                        title = _title,
                        text = _content//内容text
                    }
                }
            };
        }
        /// <summary>
        /// 推送action_card格式内容
        /// </summary>
        /// <param name="_title">标题</param>
        /// <param name="_content">内容</param>
        /// <param name="_single_title">链接标题</param>
        /// <param name="_single_url">链接地址</param>
        /// <param name="usesid"></param>
        /// <returns></returns>
        public object SendCardMsg(string _title, string _content, string _single_title, string _single_url, string usesid)
        {
            return new
            {
                userid_list = usesid,  //接受推送userid,不同用户用|分割
                //dept_id_list = "",   //接受推送部门id
                agent_id = agentid,//应用Id               
                msg = new
                {
                    msgtype = "action_card",
                    action_card = new
                    {
                        title = _title,//提示信息
                        markdown = _content,
                        single_title = _single_title,
                        single_url = _single_url
                    }
                }
            };
        }

        #endregion
    }
    
}

 

posted @ 2020-07-09 11:06  秋飘  阅读(2405)  评论(0编辑  收藏  举报