using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using MrWu.Debug; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Server.Core { /// /// 微信机器人管理 /// public class WeChatRobotManager : SingleInstance { public enum RobotType { /// /// Bug提交 /// BugReport, /// /// 统计 /// StatisticsReport, /// /// SQL自动化 /// SqlAutoReport, /// /// 俱乐部信息文件推送 /// ClubFileAutoReport, /// /// 奔溃推送 /// CrashReport, /// /// 监控报警 /// MonitorAlarm, } public class MsgData { public string msgtype; public MsgContent text; } public class MsgContent { public string content; } private static readonly Dictionary WebHookKey = new Dictionary() { { RobotType.ClubFileAutoReport, "4fb2a61f-d99b-4a5f-b712-7e5df35e4f03" }, { RobotType.SqlAutoReport, "fd74fe28-82a0-4a51-98e7-32b623fe324d" }, { RobotType.StatisticsReport, "a871b76a-bd2e-45d3-9cb2-5b13a57f9435" }, { RobotType.BugReport, "8e94e385-6a2b-4785-8d2b-c8d2d9f7d21a" }, { RobotType.CrashReport, "d260c0b1-cca1-4c5c-85bd-0b0a8f7ed148" }, { RobotType.MonitorAlarm, "6ad8b86b-2f2d-4f7d-a5d0-539cf54b80fb" } // { // RobotType.MonitorAlarm, // "ce0249cb-b548-4c48-be82-c404fb1ad104" // } }; private string GetUploadUrl(RobotType robotType) => $"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={WebHookKey[robotType]}&type=file"; private string GetMessageUrl(RobotType robotType) => $"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={WebHookKey[robotType]}"; public Task SendMsg(string msg, RobotType robotType) { string content = JsonConvert.SerializeObject(new MsgData { msgtype = "text", text = new MsgContent() { content = msg } }); return Task.Run(() => HttpHelper.Post(GetMessageUrl(robotType), Encoding.UTF8.GetBytes(content))); } public void SendFile(string filePath, RobotType robotType) { UploadFile(filePath, robotType); } public void SendFileAsync(string filePath, RobotType robotType) { Task.Run(() => { UploadFile(filePath, robotType); }); } /// /// 上传文件 /// private void UploadFile(string filePath, RobotType robotType) { try { string retContent = HttpHelper.PostFile(GetUploadUrl(robotType), filePath); Debug.Log($"上传结束: {retContent}"); var retObj = JsonConvert.DeserializeObject(retContent) as JObject; if (retObj != null && retObj.TryGetValue("errcode", out var errcodeObj) ) { if (errcodeObj.Value() == 0 && retObj["media_id"] != null) { string mediaId = retObj["media_id"].Value(); var messageData = new { msgtype = "file", file = new { media_id = mediaId } }; HttpHelper.Post(GetMessageUrl(robotType), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageData))); } } } catch (Exception e) { Console.WriteLine(e); Debug.Log("[WeChatRobotManager]上传失败"); } } } }