ZrAdminNetCore/ZR.Common/WxNoticeHelper.cs
2023-08-01 11:45:10 +08:00

152 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Infrastructure;
using System.Collections.Generic;
using System.Text.Json;
using ZR.Common.Model;
namespace ZR.Common
{
public class WxNoticeHelper
{
//CorpID 企业ID
//AGENTID 应用的ID
//Secret 应用的ID对应的密钥
private static readonly string AGENTID = AppSettings.App(new string[] { "WxCorp", "AgentID" });
private static readonly string CORPID = AppSettings.App(new string[] { "WxCorp", "CorpID" });
private static readonly string CORPSECRET = AppSettings.App(new string[] { "WxCorp", "CorpSecret" });
private static readonly string SEND_USER = AppSettings.App(new string[] { "WxCorp", "SendUser" });
private static readonly string SendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send";
private static readonly string GetTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
/// <summary>
/// 消息类型
/// </summary>
public enum MsgType { markdown, text, textcard, interactive_taskcard }
/// <summary>
/// 发送消息公共模板方法
/// </summary>
/// <param name="toUser">微信微信好友id默认@all发给所有关注该应用的用户</param>
/// <param name="title">标题</param>
/// <param name="content">内容</param>
/// <param name="msgType">消息类型</param>
/// <returns></returns>
public static (int, string) SendMsg(string title, string content, string toUser = "", MsgType msgType = MsgType.text)
{
if (string.IsNullOrEmpty(toUser))
{
toUser = SEND_USER;
}
if (string.IsNullOrEmpty(title))
{
return (0, "title不能为空");
}
if (string.IsNullOrEmpty(CORPID))
{
System.Console.WriteLine("请完成企业微信配置");
return (0, "请完成企业微信通知配置");
}
WxTokenResult tokenResult = GetAccessToken();
if (tokenResult == null || tokenResult.errcode != 0)
{
return (0, tokenResult?.errmsg);
}
Dictionary<string, object> dic = null;
switch (msgType)
{
case MsgType.markdown:
dic = GetMarkdown(title, content, toUser);
break;
case MsgType.text:
dic = GetText(title, content, toUser);
break;
case MsgType.textcard:
break;
case MsgType.interactive_taskcard:
break;
default:
dic = GetText(title, content, toUser);
break;
}
string postData = JsonSerializer.Serialize(dic);
string msgUrl = $"{SendUrl}?access_token={tokenResult.access_token}";
//返回结果
//{"errcode":0,"errmsg":"ok","invaliduser":""}
string msgResult = HttpHelper.HttpPost(msgUrl, postData, "contentType/json");
WxTokenResult getTokenResult = JsonSerializer.Deserialize<WxTokenResult>(msgResult);
System.Console.WriteLine(msgResult);
return (getTokenResult?.errcode == 0 ? 100 : 0, getTokenResult?.errmsg);
}
public static (int, string) SendMsg(string title, string content, string toUser)
{
return SendMsg(title, content, toUser, MsgType.markdown);
}
/// <summary>
/// 获取访问token
/// </summary>
/// <returns>
/// {"errcode":0,"errmsg":"ok","access_token":"iCbcfE1OjfRhV0_io-CzqTNC0lnrudeW3oF5rhJKfmINaxLClLa1FoqAY_wEXtodYh_DTnrtAwZfzeb-NRXvwiOoqUTHx3i6QKLYcfBtF8y-xd5mvaeaf3e9mvTAPhmX0lkm1cLTwRLmoa1IwzgQ-QZEZcuIcntWdEMGseVYok3BwCGpC87bt6nNdgnekZdFVRp1uuaxoctDGlXpoQlQsA","expires_in":7200}
/// </returns>
private static WxTokenResult GetAccessToken()
{
string getTokenUrl = $"{GetTokenUrl}?corpid={CORPID}&corpsecret={CORPSECRET}";
string getTokenResult = HttpHelper.HttpGet(getTokenUrl);
System.Console.WriteLine(getTokenResult);
WxTokenResult tokenResult = JsonSerializer.Deserialize<WxTokenResult>(getTokenResult);
return tokenResult;
}
/// <summary>
/// 发送text
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
/// <param name="toUser"></param>
/// <returns></returns>
private static Dictionary<string, object> GetText(string title, string content, string toUser = "")
{
Dictionary<string, object> dic = new()
{
{ "msgtype", "text" },
{ "touser", toUser },
{ "agentid", AGENTID },
{ "text", new Dictionary<string, string>
{
{ "content",$"{title}\n\n{content}"
}
}}
};
return dic;
}
/// <summary>
/// 发送markdown
/// </summary>
/// <param name="title">要发送的标题</param>
/// <param name="content">发送的内容</param>
/// <param name="toUser">指定接收消息的成员成员ID列表多个接收者用|分隔最多支持1000个。 特殊情况:指定为”@all”则向该企业应用的全部成员发送</param>
/// <returns></returns>
private static Dictionary<string, object> GetMarkdown(string title, string content, string toUser = "")
{
Dictionary<string, object> dic = new()
{
{ "touser", toUser },
{ "msgtype", "markdown" },
{ "agentid", AGENTID },
{ "enable_duplicate_check", 1 },
{
"markdown",
new Dictionary<string, string>
{
{ "content", $"**{title}**\n\n{content}" }
}
}
};
return dic;
}
}
}