using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.Caching; using System.Windows.Forms; using CsharpHttpHelper; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PCRobot.Entitys; using PCRobot.Entitys.Enterprise; using PCRobot.Pack; using PCRobot.Utils; using System.Collections.Concurrent; namespace PCRobot.PCWechat.Enterprise { public partial class Wechat_Xiaoxie_QY { private static Dictionary MT_APP_READY_MSG_BIND = new Dictionary(); /// /// 历史接收到的消息 /// private static Dictionary HistMsg = new Dictionary(); private static ConcurrentDictionary ServerIdCache = new ConcurrentDictionary(); // 接收消息回调 private static void WxRecvCallback(uint _dwClient, IntPtr intPtr, uint dwSize) { try { byte[] body = new byte[dwSize]; Marshal.Copy(intPtr, body, 0, body.Length); var recvData = Encoding.UTF8.GetString(body).Replace("\0", "").Trim();//再转成UTF8 var dwClientid = _dwClient; var msgMd5 = HttpExtend.GetMD5String(recvData); if (HistMsg.ContainsKey(msgMd5)) { LogHelper.GetSingleObj().Error("调试企业收到文本消息", $"发现重复消息 => {dwClientid} -> {recvData}\r\n\r\n"); return; } HistMsg[msgMd5] = DateTime.Now; if (HistMsg.Count > 2000) { var keys = HistMsg.Where(f => f.Value < DateTime.Now.AddMinutes(-10)).Select(f => f.Key).ToList(); if (keys.Count != 0) { for (int i = 0; i < keys.Count; i++) { try { HistMsg.Remove(keys[i]); } catch (Exception e) { } } } } if (WechatClient.IsDebug) LogHelper.GetSingleObj().Info("调试企业收到文本消息", $"{dwClientid} -> {recvData}\r\n\r\n"); //var method = new Action(delegate () Task.Factory.StartNew(delegate () { try { //Console.WriteLine("企业收到消息:" + recvData); var jObj = JObject.Parse(recvData); if (jObj == null) return; if (!jObj.ContainsKey("type") || jObj["type"] == null) return; var data = jObj["data"]; var type = jObj["type"].ToString(); var serverId = data["server_id"]?.ToString(); if (string.IsNullOrWhiteSpace(serverId) == false) { if (ServerIdCache.TryGetValue(serverId, out var serverIdOut)) { return; } if (ServerIdCache.Count > 10000) { ServerIdCache = new ConcurrentDictionary(); } ServerIdCache.TryAdd(serverId, serverId); } MsgType msgType; if (!Enum.TryParse(type, out msgType)) return; //获取机器人对象 WechatUser user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY); //Console.WriteLine($"dwClientid = {dwClientid}"); switch (msgType) { case MsgType.MT_APP_READY_MSG: MT_APP_READY_MSG_BIND[dwClientid] = int.Parse(data["pid"].ToString()); break; case MsgType.MT_PARAMS_ERROR_MSG: { } break; case MsgType.MT_USER_LOGIN://登陆消息 { var wxid = data["user_id"].ToString(); user = WechatClient.GetUser(wxid, dwClientid, WechatType.Xiaoxie_QY); user.Nickname = data["username"].ToString(); user.HeaderUrl = data["avatar"].ToString(); //user.DBFile = data["wx_user_dir"].ToString(); user.Pid = MT_APP_READY_MSG_BIND.ContainsKey(dwClientid) ? MT_APP_READY_MSG_BIND[dwClientid] : 0; //uint.Parse(data["pid"].ToString()); user.Phone = data["mobile"].ToString(); user.Uin = wxid; WechatClient.OnRefUserEvent(user, WaitLoginResult); } break; case MsgType.MT_USER_LOGOUT: { var wxid = data["user_id"].ToString(); user = WechatClient.Users.FirstOrDefault(f => f.Key == wxid).Value; if (user != null) { LogHelper.GetSingleObj().Info("系统", $"LogOut_QY事件退出,Uin:{user.Uin},微信:{user.Nickname}({wxid})"); WechatClient.RemoveUser(user); } } break; case MsgType.MT_LOGIN_QRCODE_MSG: { //{"data":{"file":"C:\\Users\\秒单客006\\Documents\\WXWork\\Global\\Image\\089d9de9-cc40-458a-af4a-b39a04e2f95f.jpg"},"type":11028} if (data["file"] == null) return; if (MT_APP_READY_MSG_BIND.ContainsKey(dwClientid)) { var file = data["file"].ToString(); if (File.Exists(file)) { var cfBase64 = Common.ConvertImageToBase64(Image.FromFile(file)); var codeInfo = new RemoteLoginCode() { pid = MT_APP_READY_MSG_BIND[dwClientid], cImgB64 = cfBase64, b64Md5 = HttpHelper.ToMD5(cfBase64), rType = RobotType.客户端企业微信, t = HttpExtend.GetTimeStamp(DateTime.Now) }; Cache cache = HttpRuntime.Cache; //查找 md5 的缓存,不存在则返回null object item = cache[RemoteCache]; cache.Insert(RemoteCache, codeInfo, null, DateTime.Now.AddSeconds(3), Cache.NoSlidingExpiration); RemoteLoginCodes.Add(codeInfo); } } } break; case MsgType.MT_GET_OWNER_INFO_MSG:// 获取自己信息 { #region 数据结构 /* { "data": { "account": "xxxxx@xxx.onexmail.com", // 帐号 "acctid": "xxxxx", // acctid "avatar": "http://wework.qpic.cn/bizmail/xxxDM808qnyFVjQ/0", // 头像 "corp_id": "1970325032041886", // 公司id "corp_name": "xxxxxxxxx有限公司", // 公司全称 "corp_short_name": "xxxxx", // 公司简称 "email": "xxxxx@qq.com", // 邮箱 "job_name": "总经理", // 职位 "mobile": "137xxxxxxxxx", // 手机号 "nickname": "小邪212", // 昵称 "position": "总经理", // 职位 "sex": 2, // 性别 0 未知,1男,2女 "user_id": "1688xxxx353xxxx", // 用户id "username": "小邪" // 名称 }, "type": 11035 } */ #endregion if (data == null || user == null) return; var f = new WorkFriendInfo(); f.avatar = data["avatar"]?.ToString(); //f.conversation_id = data["conversation_id"]?.ToString(); //f.desc = item["desc"]?.ToString(); f.nickname = data["nickname"]?.ToString(); f.position = data["position"]?.ToString(); f.realname = data["username"]?.ToString(); f.remark = data["username"]?.ToString(); f.sex = data["sex"].ToObject(); f.user_id = data["user_id"].ToString(); f.username = data["username"].ToString(); user.WorkFriends[f.user_id] = f; } break; case MsgType.MT_GET_INNER_USERS_MSG:// 获取内部联系人列表 { } break; case MsgType.MT_GET_EXTERNAL_USERS_MSG:// 获取外部联系列表 { #region 外部联系列表 #region 消息样式 //{"data":{"page_num":1,"page_size":10000,"total":44,"total_page":1,"user_list":[{"acctid":"AoQi","add_time":1594358458,"avatar":"https://wework.qpic.cn/wwhead/duc2TvpEgST9hicuyypLEKMFMfDnH4KeYskpFLBx46N4YMPdu9ibu6uvic9tRMx1O5oc1e94LvWHZI/0","conversation_id":"S:1688853884018611_1688853956558440","corp_id":"1970325130121266","mobile":"","nickname":"A46「猫七」【置顶常用】","position":"","realname":"**新","remark":"","sex":2,"unionid":"ozynqspv4YiVjaa04jYgRulxWfQ8","user_id":"1688853884018611","username":"A46🐱「猫七」【置顶常用】"},{"acctid":"","add_time":1588747919,"avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM4pFj4ic9BTuoseZNnibY90lvKkoAFichAcjjao0WqvzvHnQ/0","conversation_id":"S:1688853956558440_7881301062943857","corp_id":"1970325134026788","mobile":"","nickname":"","position":"","realname":"","remark":"查优惠小助手(梦瑶)","sex":2,"unionid":"ozynqsjIzu8BxAu_dcoFLWuFSVWA","user_id":"7881301062943857","username":"A查优惠小助手-梦瑶"},{"acctid":"","add_time":1588745188,"avatar":"http://wx.qlogo.cn/mmhead/GtsibMna7cCkYQ3fJffrweyEvlODDOH1SCzOtwflnBsc/0","conversation_id":"S:1688853956558440_7881301162944044","corp_id":"1970325134026788","mobile":"","nickname":"","position":"","realname":"","remark":"查优惠小助手(抹茶)","sex":2,"unionid":"ozynqsjMTV4VYwLqjcDcfcH5VFsI","user_id":"7881301162944044","username":"老妖助理15"}]},"type":11037} #endregion if (data == null || user == null) return; var _type = RobotIsRunType.获取好友列表; if (user.IsGetDic.ContainsKey(_type)) { if (user.IsGetDic[_type]) return; } try { user.IsGetDic[_type] = true; var jArr = (JArray)data["user_list"]; for (int i = 0; i < jArr.Count; i++) { var item = jArr[i]; var username = item["user_id"]?.ToString(); //if (username.IsGongZhongHao()) continue; WorkFriendInfo f = new WorkFriendInfo(); f.acctid = item["acctid"]?.ToString(); f.avatar = item["avatar"]?.ToString(); f.conversation_id = item["conversation_id"]?.ToString(); f.corp_id = item["corp_id"]?.ToString(); f.mobile = item["mobile"]?.ToString(); f.nickname = item["nickname"]?.ToString(); f.position = item["position"]?.ToString(); f.realname = item["realname"]?.ToString(); f.remark = item["remark"]?.ToString(); f.sex = item["sex"].ToObject(); f.user_id = username; f.username = item["username"]?.ToString(); user.WorkFriends[f.user_id] = f; } } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业获取内部联系人列表", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetDic.Remove(_type); } #endregion } break; case MsgType.MT_GET_ROOMS_MSG:// 获取群聊列表 { #region 数据结构 //{"data":{"page_num":1,"page_size":100000,"room_list":[{"conversation_id":"R:10696051756073403","create_time":1587126543,"create_user_id":"7881302509911391","is_admin":0,"is_creator":0,"is_external":1,"nickname":"软件反馈群","total":21},{"conversation_id":"R:238567000711635","create_time":1644470134,"create_user_id":"1688850065257778","is_admin":0,"is_creator":0,"is_external":0,"nickname":"张谊玉、洪荒老道、祁举兵","total":5},{"conversation_id":"R:1970325073072411","create_time":1559292789,"create_user_id":"1688853956450720","is_admin":0,"is_creator":0,"is_external":0,"nickname":"成都秒单客网络科技有限公司","total":20},{"conversation_id":"R:95666354828251","create_time":1644746098,"create_user_id":"1688853956558440","is_admin":0,"is_creator":1,"is_external":0,"nickname":"..............................................","total":4},{"conversation_id":"R:10774828428256418","create_time":1644804316,"create_user_id":"1688853956558440","is_admin":0,"is_creator":1,"is_external":1,"nickname":",,,,,,,,,,","total":3},{"conversation_id":"R:289059290","create_time":1618382594,"create_user_id":"1688853956558440","is_admin":0,"is_creator":1,"is_external":0,"nickname":"转发综合群","total":4},{"conversation_id":"R:10757092148832341","create_time":1648025176,"create_user_id":"1688853956558440","is_admin":0,"is_creator":1,"is_external":1,"nickname":"企业外部群","total":41}],"total":7,"total_page":1},"type":11038} #endregion if (data == null || user == null) return; var _type = RobotIsRunType.获取群列表; if (user.IsGetDic.ContainsKey(_type)) { if (user.IsGetDic[_type]) return; } try { user.IsGetDic[_type] = true; var member_list = (JArray)data["room_list"]; if (member_list == null) return; var hook = WechatClient.GetApi(user); for (int i = 0; i < member_list.Count; i++) { //{"conversation_id":"R:10696051756073403","create_time":1587126543,"create_user_id":"7881302509911391","is_admin":0,"is_creator":0,"is_external":1,"nickname":"软件反馈群","total":21} var item = member_list[i]; var f = new WorkFriendInfo(); f.avatar = string.Empty; f.user_id = item["conversation_id"]?.ToString(); f.manager_wxid = item["create_user_id"]?.ToString(); f.is_manager = item["is_admin"].ToObject(); f.nickname = item["nickname"]?.ToString(); f.username = item["nickname"]?.ToString(); f.remark = item["nickname"]?.ToString(); user.WorkFriends[f.user_id] = f; var g = new WorkGroupInfo(); g.friends = new List(); g.GroupNick = f.nickname; g.conversation_id = f.user_id; g.total = 0; user.WorkGroups[f.user_id] = g; var groupMember = hook.GetGroupMemberInfo(f.user_id).Result; if (groupMember != null) { var workGroupInfo = (groupMember as WorkGroupInfo); if (workGroupInfo != null) { g.friends = workGroupInfo.friends; g.total = workGroupInfo.total; } } else //获取失败就赋值简单的 { var memberJarr = (JArray)item["member_list"]; for (int o = 0; o < memberJarr.Count; o++) { var username = memberJarr[o].ToString(); var ftmp = g.friends.FirstOrDefault(z => z.user_id == username); if (ftmp == null) g.friends.Add(new WorkFriendInfo() { user_id = username }); } } user.WorkGroups[f.user_id] = g; } } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信解析群列表", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetDic.Remove(_type); } } break; case MsgType.MT_GET_USER_DETAIL_MSG:// 获取用户详细信息 { #region 数据结构 //{"avatar":"http://wx.qlogo.cn/mmhead/GPyw0pGicibl4KQicb5bXGu2SibrykeGOH5IicK2d8LTfbA11zNB2A2SoKg/0","conversation_id":"S:1688853956558440_7881301364988874","corp_id":"1970325134026788","desc":"","external_job":"","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301364988874","username":"18"} #endregion if (user == null || data == null) return; //有时候接收到的数据为一下情况 //{"data":{"user_id":"7881302484994318"},"type":11039} var username = data["user_id"]?.ToString(); if (user.IsGetContactDic.ContainsKey(username) && user.IsGetContactDic[username]) return; try { try { user.IsGetContactDic[username] = true; } catch (Exception) { } var f = new WorkFriendInfo(); f.corp_id = data["corp_id"]?.ToString(); f.mobile = data["mobile"]?.ToString(); f.acctid = data["acctid"].ToString(); f.avatar = data["avatar"]?.ToString(); f.conversation_id = data["conversation_id"]?.ToString(); f.desc = data["desc"]?.ToString(); f.nickname = data["nickname"]?.ToString(); f.position = data["position"]?.ToString(); f.realname = data["realname"]?.ToString(); f.remark = data["remark"]?.ToString(); f.sex = data["sex"].ToObject(); f.user_id = data["user_id"]?.ToString(); f.username = data["username"]?.ToString(); user.WorkFriends[f.user_id] = f; } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信解析用户详细信息", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(username); } } break; case MsgType.MT_GET_ROOM_MEMBERS_MSG:// 获取群成员列表 { #region 数据样式 /* {"data":{"conversation_id":"R:10696051756073403","member_list":[{"acctid":"WuJiaHua","avatar":"http://wework.qpic.cn/bizmail/FxrNrXCeEh8Kwv4ia3iahWCbkR7Y0VqoBniaJ5hrlKggVaibBXIxmOBb8A/0","corp_id":"1970325073072411","invite_user_id":"7881302509911391","nickname":"洪荒老道","position":"","realname":"吴嘉华","remark":"","sex":1,"user_id":"1688853956558440","username":"洪荒老道"},{"acctid":"YuQi","avatar":"http://wework.qpic.cn/bizmail/PN2IeoKDkmhqqH0nlh2Lm6TVZRNAtgLPyg2ick4sPBEB0kzP0hDmQmg/0","corp_id":"1970325073072411","invite_user_id":"1688853956558440","nickname":"秒单客_小鱼","position":"","realname":"虞祁","remark":"","sex":2,"user_id":"1688853956590186","username":"小鱼"},{"acctid":"ZhangYiYu","avatar":"http://wework.qpic.cn/bizmail/Yfk60WuPLgEuo6ViauAdDeqqtlOuH8EYEh0K0Cg9KGicYHGyg9gw1o2w/0","corp_id":"1970325073072411","invite_user_id":"1688853956558440","nickname":"小张","position":"","realname":"张谊玉","remark":"","sex":0,"user_id":"1688853956590187","username":"张谊玉"},{"acctid":"XiaoZhangTongXue","avatar":"https://wework.qpic.cn/wwhead/duc2TvpEgST9hicuyypLEKE4HsVWEQswCosv5s4Je9eyrmicu2cvscczGLmSmwQBEzPaZO82TA7IY/0","corp_id":"1970325073072411","invite_user_id":"1688853956558440","nickname":"秒单客-小张","position":"","realname":"张谊玉","remark":"","sex":1,"user_id":"1688853956642143","username":"张谊玉"},{"acctid":"WenQi","avatar":"http://wework.qpic.cn/bizmail/rftUYt0pUSNM9UGLVhJT8SADPRo7UUwEXc1TibElDW2b8OBbrUAibN2w/0","corp_id":"1970325073072411","invite_user_id":"1688853956558440","nickname":"","position":"","realname":"文奇","remark":"","sex":1,"user_id":"1688853956644076","username":"文奇"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/U8XnjHx15KhdibgkJ49XtGJ44Y3bH7VkpMTy2UhJicrOs/0","corp_id":"1970325134026788","invite_user_id":"7881302509911391","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881299792900727","username":"小锋"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/ETNocE50L3oEX3eSEr47qkodhRfgpya2ZYt3D08Bh6k/0","corp_id":"1970325134026788","invite_user_id":"7881299792900727","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881299980969589","username":"嘿"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/USH8Nb3Hz5TauZmclE9wV7qAOMo3xTf4mPG8qHWicKjfgTExgLX8MHw/0","corp_id":"1970325134026788","invite_user_id":"7881301450899709","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881300660017681","username":"Suki_cc"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaELHEV52PNTeBgDTw7WZw5zaXqC3Dx8NlxzoWbZodIV6nA/0","corp_id":"1970325134026788","invite_user_id":"7881303073899390","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301052912667","username":"管家助理"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/le1D2uwOTUNrTr97NDfcJfBibsBcv6D95v5G8WaF5pWjRxsgo8AgOqQ/0","corp_id":"1970325134026788","invite_user_id":"7881303073899390","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301334966174","username":"M."},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM58vIBW7iaDy1L2LnWp6bFQaZageAQ1dUAQbBhtbFEia9XQ/0","corp_id":"1970325134026788","invite_user_id":"7881302509911391","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881301450899709","username":"幸运的小蔡"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/9qclib0CZpLj64d8S0eVZCgJhsF1V0wMicHrM3LRia1bq4/0","corp_id":"1970325134026788","invite_user_id":"7881301450899709","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881301996898661","username":"阿羣"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaEJUq43owiazPpKBwI044FZ6GbmOgiaHlt9TWWC7m7ajYnQQ/0","corp_id":"1970325134026788","invite_user_id":"7881302509911391","nickname":"","position":"","realname":"","remark":"阿威?? ?? ?? ?? ??","sex":1,"user_id":"7881302027905870","username":"阿威?? ?? ?? ?? ??"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM6CiaVp63VVTIRySkxia2KSGQ6hrYAvAkkjoMpl4wFjyhIA/0","corp_id":"1970325134026788","invite_user_id":"7881302509911391","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881302509911391","username":"千年老妖"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaEIkxibLqBfcon3IAic6a4DFICQIR7EdHM0mAuHPUXlcl5iag/0","corp_id":"1970325134026788","invite_user_id":"7881301450899709","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881302973987188","username":"chan??baek"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/aUwBqqfR4L9uicc3e31iafC57QBG8BjVwPhmNKE77LdKo/0","corp_id":"1970325134026788","invite_user_id":"7881301450899709","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881303073899390","username":"小明"}]},"type":11040} */ #endregion if (user == null || data == null) return; var conversation_id = data["conversation_id"].ToString(); if (user.IsGetContactDic.ContainsKey(conversation_id) && user.IsGetContactDic[conversation_id]) return; try { user.IsGetContactDic[conversation_id] = true; var member_list = (JArray)data["member_list"]; if (member_list == null) return; var group = new WorkGroupInfo() { conversation_id = conversation_id }; var groupTmp = user.WorkGroups.FirstOrDefault(z => z.Key == conversation_id) .Value; if (groupTmp != null) group = groupTmp; group.total = member_list.Count; group.friends = new List(); for (int i = 0; i < member_list.Count; i++) { //{"acctid":"WuJiaHua","avatar":"http://wework.qpic.cn/bizmail/FxrNrXCeEh8Kwv4ia3iahWCbkR7Y0VqoBniaJ5hrlKggVaibBXIxmOBb8A/0","corp_id":"1970325073072411","invite_user_id":"7881302509911391","nickname":"洪荒老道","position":"","realname":"吴嘉华","remark":"","sex":1,"user_id":"1688853956558440","username":"洪荒老道"} var item = member_list[i]; var f = new WorkFriendInfo(); f.acctid = item["acctid"]?.ToString(); f.avatar = item["avatar"]?.ToString(); f.conversation_id = conversation_id; f.corp_id = item["corp_id"]?.ToString(); f.mobile = item["mobile"]?.ToString(); f.nickname = item["nickname"]?.ToString(); f.position = item["position"]?.ToString(); f.realname = item["realname"]?.ToString(); f.remark = item["remark"]?.ToString(); f.sex = item["sex"].ToObject(); f.nickname = item["username"]?.ToString(); f.user_id = item["user_id"]?.ToString(); var friend = group.friends.FirstOrDefault(z => z.user_id == f.user_id); if (friend == null) group.friends.Add(f); } user.WorkGroups[conversation_id] = group; } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信获取群成员列表", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(conversation_id); } } break; case MsgType.MT_ROOM_ADD_MEMBER_NOTIFY_MSG://群成员新增通知 { #region 数据结构 //{"data":{"member_list":[{"name":"CoCo😘","user_id":"7881299477994410"},{"name":"秒单客-小张","user_id":"7881301029989846"},{"name":"秒单客-小鱼","user_id":"7881302305959168"}],"op_user_id":"1688853956558440","op_user_name":"洪荒老道","room_conversation_id":"R:10696053211008104","room_name":"洪荒老道、CoCo😘、秒单客-小张"},"type":11072} #endregion if (data == null || user == null) return; var member_list = (JArray)data["member_list"]; if (member_list == null || member_list.Count == 0) return; var socketClient = EasySoc.GetSocket(); var roomConversationId = data["room_conversation_id"]?.ToString(); var roomName = data["room_name"]?.ToString(); var opUserId = data["op_user_id"]?.ToString();//邀请人账号 var opUserName = data["op_user_name"]?.ToString();//邀请人昵称 for (int i = 0; i < member_list.Count; i++) { var item = member_list[i]; WechatNewMemer newMember = new WechatNewMemer(); newMember.Cmd = PCRobotCMD.newMember_workWeChat; newMember.RobotType = RobotType.客户端企业微信; newMember.RobotUsername = user.Wxid; newMember.RobotUsernick = user.Nickname; newMember.SourceNick = opUserName; newMember.SourceName = opUserId; newMember.MemberNick = item["name"]?.ToString(); ; newMember.MemberName = item["user_id"]?.ToString(); ; newMember.GroupId = roomConversationId; newMember.GroupNick = roomName; newMember.TotalMember = 0; socketClient.Send(newMember); Thread.Sleep(50); } break; } case MsgType.MT_ROOM_DEL_MEMBER_NOTIFY_MSG://剔除群成员通知 break; case MsgType.MT_RECV_TEXT_MSG://收到文本 { if (data == null || user == null) return; var content_type = data["content_type"]?.ToString(); //企业微信消息类型 if (data == null) return; var socketClient = EasySoc.GetSocket(); #region 文本消息 #region 消息样式 //{"data":{"content":"我17","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"19","receiver":"1688853956558440","send_time":"1584013142","sender":"7881301610989604","sender_name":"17","server_id":"1000481"},"type":11041} - 通过好友返回的数据 //{"data":{"content":"哦哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"33","receiver":"1688853956558440","send_time":"1584014191","sender":"7881301610989604","sender_name":"17","server_id":"1000520"},"type":11041} - 别人给我发了条消息 //{"data":{"content":"图婆","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"36","receiver":"1688853956558440","send_time":"1584014736","sender":"7881301610989604","sender_name":"17","server_id":"1000542"},"type":11041} //{"data":{"content":"哦哦哦","content_type":0,"conversation_id":"S:1688853956450720_1688853956558440","local_id":"22","receiver":"1688853956450720","send_time":"1584013962","sender":"1688853956558440","sender_name":"华","server_id":"1000498"},"type":11041} - 收到自己发的消息 //{"data":{"content":"给我发条消息","content_type":0,"conversation_id":"S:1688853956450720_1688853956558440","local_id":"23","receiver":"1688853956450720","send_time":"1584014066","sender":"1688853956558440","sender_name":"华","server_id":"1000500"},"type":11041} //{"data":{"content":"饿的","content_type":0,"conversation_id":"R:10696053211008104","local_id":"42","receiver":"R:10696053211008104","send_time":"1584015069","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000574"},"type":11041} - 收到自己发送的群消息 #endregion //{"data":{"at_list":[],"content":"我是机器学习","content_type":2,"conversation_id":"S:1688853764215634_7881300713013122","local_id":"27946","receiver":"1688853764215634","send_time":"1589009390","sender":"7881300713013122","sender_name":"机器学习","server_id":"1088720"},"type":11041} //0、2 - 发送的文字 (0) //if (content_type == "0" || content_type == "2") { var content = data["content"]?.ToString(); //文本消息内容 var conversation_id = data["conversation_id"]?.ToString(); //会话ID var local_id = data["local_id"]?.ToString(); //消息的本地ID var receiver = data["receiver"]?.ToString(); //接收者的user_id var send_time = data["send_time"]?.ToString(); //消息时间戳 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID //是否为辅助 var isSend = false; var wmsg = new WorkWechatReceiveMsg(); #region 处理辅助 var sendWxid = sender; var sendNick = sender_name; LogHelper.GetSingleObj().Debug("", "接收##########: " + content + @" "); if (!WechatClient.IsAuxiliaryInput(sender, receiver, content)) { LogHelper.GetSingleObj().Debug("", "此消息被过滤,因为是机器人自己发送的:" + content + @" "); return; } var ass = WechatClient.IsAssistance(sender, receiver, dwClientid, WechatType.Xiaoxie_QY); if (ass.type == WechatClient.AssistanceType.终止) return; //if (ass.type == WechatClient.AssistanceType.辅助) // return; wmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var usernick = string.Empty; if (receiver.IsQun()) { wmsg.FromGroupid = receiver; wmsg.FromGroupNick = hook.FindNick(receiver); } else if (wmsg.IsSend) { if (string.IsNullOrWhiteSpace(usernick)) usernick = hook.FindNick(ass.fromName); } wmsg.FromUsername = ass.fromName; wmsg.FromUsernick = usernick; #endregion //wmsg.FromUsername = sender; //wmsg.FromUsernick = sender_name; //wmsg.IsSend = false; wmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat; wmsg.RobotUsername = user.Wxid; wmsg.RobotUsernick = user.Nickname; wmsg.RobotType = RobotType.客户端企业微信; //if (content == "[你收到了一个微信红包,暂时无法查看]") // wmsg.FromMessageType = WechatMsgType.红包; //else wmsg.FromMessageType = WechatMsgType.文本; wmsg.FromMessage = content; socketClient.Send(wmsg); } #endregion } break; //case MsgType.MT_RECV_IMG_MSG://收到图片 // { // #region 图片消息 // #region 消息样式 // //{"data":{"content_type":101,"conversation_id":"R:10696053211008104","file_name":"7305d3cd-e94f-47db-a604-ce079e6c9ac5.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\7305d3cd-e94f-47db-a604-ce079e6c9ac5.jpg","file_size":19457,"local_id":"73","receiver":"1688853956558440","send_time":"1584028981","sender":"7881301364988874","sender_name":"18","server_id":"1000677"},"type":11042} - 别人在群发的图片 // //{"data":{"content_type":101,"conversation_id":"S:1688853956558440_7881301364988874","file_name":"29c9c19d-e8d7-4cb0-95b5-e1a7d385003a.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\29c9c19d-e8d7-4cb0-95b5-e1a7d385003a.jpg","file_size":19457,"local_id":"74","receiver":"1688853956558440","send_time":"1584029032","sender":"7881301364988874","sender_name":"18","server_id":"1000680"},"type":11042} - 别人私聊发的图片 // //{"data":{"content_type":14,"conversation_id":"R:10696053211008104","file_name":"0f7890b8ea01f7205a76d1195dab66b0.png","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\0f7890b8ea01f7205a76d1195dab66b0.png","file_size":1627,"local_id":"75","receiver":"R:10696053211008104","send_time":"1584029085","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000685"},"type":11042} - 自己群里发的图片 // //{"data":{"content_type":14,"conversation_id":"S:1688853956558440_7881301364988874","file_name":"9c6d1a59d8f122fc85c3435ea2aa46fc.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\9c6d1a59d8f122fc85c3435ea2aa46fc.jpg","file_size":178092,"local_id":"76","receiver":"7881301364988874","send_time":"1584029534","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000689"},"type":11042} - 自己私聊发的图片 // #endregion // //14、101 (14) // if (data == null) return; // var content_type = data["content_type"]?.ToString(); //企业微信消息类型 // if (content_type == "14") return; // var socketClient = EasySoc.GetSocket(); // var conversation_id = data["conversation_id"]?.ToString(); //会话ID // var local_id = data["local_id"]?.ToString(); //消息的本地ID // var receiver = data["receiver"]?.ToString(); //接收者的user_id // var send_time = data["send_time"]?.ToString(); //消息时间戳 // var sender = data["sender"]?.ToString(); //发送者的user_id // var sender_name = data["sender_name"]?.ToString(); //发送者昵称 // var server_id = data["server_id"]?.ToString(); //消息的服务器ID // var file_path = data["file_path"]?.ToString(); //图片路径 // var wmsg = new WorkWechatReceiveMsg(); // wmsg.Cmd = PCRobotCMD.rcvImg_workWeChat; // wmsg.RobotType = RobotType.客户端企业微信; // wmsg.IsSend = false; // wmsg.RobotUsername = user.Wxid; // wmsg.RobotUsernick = user.Nickname; // wmsg.FromMessage = $"[图片={file_path}]"; // wmsg.FromMessageType = WechatMsgType.图片; // if (conversation_id.Contains("R:")) // { // wmsg.FromGroupid = conversation_id; // wmsg.FromUsername = sender; // wmsg.FromUsernick = sender_name; // } // else // { // wmsg.FromUsername = sender; // wmsg.FromUsernick = sender_name; // } // wmsg.FromMessage = string.Empty; // socketClient.Send(wmsg); // #endregion // } // break; //case MsgType.MT_RECV_VIDEO_MSG://收到视频 // { // #region 收到视频 // #region 消息样式 // //{"data":{"content_type":103,"conversation_id":"S:1688853956558440_7881301364988874","duration":1,"file_name":"video.MP4","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Video\\2020-03\\video.MP4","file_size":198490,"height":960,"local_id":"77","receiver":"1688853956558440","send_time":"1584031142","sender":"7881301364988874","sender_name":"18","server_id":"1000691","width":544},"type":11043} - 别人发 // //{"data":{"content_type":23,"conversation_id":"S:1688853956558440_7881301364988874","duration":1,"file_name":"video.MP4","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Video\\2020-03\\video.MP4","file_size":198490,"height":960,"local_id":"78","receiver":"7881301364988874","send_time":"1584031203","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000696","width":544},"type":11043} - 自己发 // #endregion // //23、103 (23) // if (data == null) return; // var content_type = data["content_type"]?.ToString(); //企业微信消息类型 // if (content_type == "23") return; // var socketClient = EasySoc.GetSocket(); // var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY); // if (user == null) // return; // var conversation_id = data["conversation_id"]?.ToString(); //会话ID // var local_id = data["local_id"]?.ToString(); //消息的本地ID // var receiver = data["receiver"]?.ToString(); //接收者的user_id // var send_time = data["send_time"]?.ToString(); //消息时间戳 // var sender = data["sender"]?.ToString(); //发送者的user_id // var sender_name = data["sender_name"]?.ToString(); //发送者昵称 // var server_id = data["server_id"]?.ToString(); //消息的服务器ID // var file_path = data["file_path"]?.ToString(); //图片路径 // var wmsg = new WorkWechatReceiveMsg(); // wmsg.Cmd = PCRobotCMD.rcvFile_workWeChat; // wmsg.RobotType = RobotType.客户端企业微信; // wmsg.IsSend = false; // wmsg.RobotUsername = user.Wxid; // wmsg.RobotUsernick = user.Nickname; // wmsg.FromMessage = $"[视频={file_path}]"; // wmsg.FromMessageType = WechatMsgType.视频; // if (conversation_id.Contains("R:")) // { // wmsg.FromGroupid = conversation_id; // wmsg.FromUsername = sender; // wmsg.FromUsernick = sender_name; // } // else // { // wmsg.FromUsername = sender; // wmsg.FromUsernick = sender_name; // } // wmsg.FromMessage = string.Empty; // socketClient.Send(wmsg); // #endregion // } // break; case MsgType.MT_RECV_IMG_MSG: //收到图片 case MsgType.MT_RECV_VIDEO_MSG: //收到视频 { if (data == null || user == null) return; var socketClient = EasySoc.GetSocket(); var content_type = data["content_type"]?.ToString(); //企业微信消息类型 var conversation_id = data["conversation_id"]?.ToString(); //会话ID var local_id = data["local_id"]?.ToString(); //消息的本地ID var receiver = data["receiver"]?.ToString(); //接收者的user_id var send_time = (long)data["send_time"]; //消息时间戳 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID var cdn_type = data["cdn_type"].ToObject(); //Cdn类型 var wmsg = new WorkWechatReceiveMsg(); wmsg.Cmd = PCRobotCMD.rcvFile_workWeChat; wmsg.RobotType = RobotType.客户端企业微信; wmsg.IsSend = false; wmsg.RobotUsername = user.Wxid; wmsg.RobotUsernick = user.Nickname; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var filePath = string.Empty; #region 下达事件 if (MsgType.MT_RECV_IMG_MSG == msgType) { #region cdn var cdn = data["cdn"]; if (cdn != null) { if (cdn_type == 1) { var aes_key = cdn["aes_key"].ToObject(); var auth_key = cdn["auth_key"].ToObject(); var ld_size = cdn["ld_size"].ToObject(); var ld_url = cdn["ld_url"].ToObject(); var md5 = cdn["md5"].ToObject(); var md_size = cdn["md_size"].ToObject(); var md_url = cdn["md_url"].ToObject(); var size = cdn["size"].ToObject(); var url = cdn["url"].ToObject(); filePath = hook.CdnDown(url, auth_key, aes_key, size, FileSuffixType.jpg).Result; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) throw new Exception("企业接收图片消息Cdn下载失败"); } else if (cdn_type == 2) { var aes_key = cdn["aes_key"].ToObject(); var file_id = cdn["file_id"].ToObject(); var file_name = cdn["file_name"].ToObject(); var md5 = cdn["md5"].ToObject(); //var preview_img_url = cdn["preview_img_url"].ToObject(); var size = cdn["size"].ToObject(); filePath = hook.C2cCdnDown(aes_key, file_id, size, QyCdnFileType.图片_视频, FileSuffixType.jpg).Result; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) throw new Exception("企业接收图片消息C2cCdn下载失败"); } wmsg.FromMessage = $"[图片={filePath}]"; wmsg.FromMessageType = WechatMsgType.图片; } #endregion } else if (MsgType.MT_RECV_VIDEO_MSG == msgType) { #region cdn var cdn = data["cdn"]; if (cdn != null) { if (cdn_type == 1) { var aes_key = cdn["aes_key"].ToObject(); var auth_key = cdn["auth_key"].ToObject(); var md5 = cdn["md5"].ToObject(); var preview_img_size = cdn["preview_img_size"].ToObject(); var preview_img_url = cdn["preview_img_url"].ToObject(); var size = cdn["size"].ToObject(); var url = cdn["url"].ToObject(); filePath = hook.CdnDown(url, auth_key, aes_key, size, FileSuffixType.mp4).Result; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) throw new Exception("企业接收视频消息Cdn下载失败"); } else if (cdn_type == 2) { var aes_key = cdn["aes_key"].ToObject(); var file_id = cdn["file_id"].ToObject(); var file_name = cdn["file_name"].ToObject(); var md5 = cdn["md5"].ToObject(); //var preview_img_url = cdn["preview_img_url"].ToObject(); var size = cdn["size"].ToObject(); filePath = hook.C2cCdnDown(aes_key, file_id, size, QyCdnFileType.图片_视频, FileSuffixType.mp4).Result; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) throw new Exception("企业接收视频消息C2cCdn下载失败"); } //var filePath1 = hook.C2cCdnDown("65323164303935663365393634306639", "306902010204623060020100020483d92af902030f4241020473a3973d020462752be0042432353830373535362d613134372d343466612d613632342d38373461396539663630653302010002032cbb4004105c8576e1a816b54165c65f6fb6ccdbde0201040201000400", 2931518, QyCdnFileType.图片_视频, FileSuffixType.mp4).Result; //if (string.IsNullOrWhiteSpace(filePath1) || !File.Exists(filePath1)) // throw new Exception("企业接收图片消息C2cCdn下载失败"); wmsg.FromMessage = $"[视频={filePath}]"; wmsg.FromMessageType = WechatMsgType.视频; } #endregion } #endregion if (receiver.IsQun()) { wmsg.FromGroupid = receiver; wmsg.FromGroupNick = hook.FindNick(receiver); } wmsg.FromUsername = sender; wmsg.FromUsernick = sender_name; wmsg.Timestamp = send_time; wmsg.MsgId = server_id.Trim(); wmsg.IsSend = false; wmsg.OriMessage = JsonConvert.SerializeObject(new { data = data, filePath = filePath }); socketClient.Send(wmsg); } break; case MsgType.MT_RECV_VOICE_MSG: //收到语音 break; case MsgType.MT_RECV_FILE_MSG: //收到文件 break; case MsgType.MT_RECV_LOCATION_MSG://收到位置 break; case MsgType.MT_RECV_LINK_CARD_MSG://收到链接 { #region 链接消息 #region 消息样式 //{"data":{"content_type":13,"conversation_id":"S:1688853956558440_7881301364988874","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"","local_id":"82","receiver":"1688853956558440","send_time":"1584033150","sender":"7881301364988874","sender_name":"18","server_id":"1000715","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 别人发送的私聊链接 //{"data":{"content_type":13,"conversation_id":"R:10696053211008104","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"","local_id":"85","receiver":"1688853956558440","send_time":"1584034341","sender":"7881301364988874","sender_name":"18","server_id":"1000724","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 别人发送的群聊链接 //{"data":{"content_type":13,"conversation_id":"S:1688853956558440_7881301364988874","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"https://wework.qpic.cn/wwpic/51458_1ermIpIgTJu-_11_1584034011/0","local_id":"83","receiver":"7881301364988874","send_time":"1584034011","sender":"1688853956558440","sender_name":"吴","server_id":"1000720","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 自己发送的私聊 //{"data":{"content_type":13,"conversation_id":"R:10696053211008104","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"https://wework.qpic.cn/wwpic/51458_1ermIpIgTJu-_11_1584034011/0","local_id":"84","receiver":"R:10696053211008104","send_time":"1584034246","sender":"1688853956558440","sender_name":"吴","server_id":"1000722","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 自己发送的群聊 #endregion var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var content_type = data["content_type"]?.ToString(); var conversation_id = data["conversation_id"]?.ToString(); //会话ID var desc = data["desc"]?.ToString(); //链接描述 var image_url = data["image_url"]?.ToString(); //链接缩略图url var is_pc = (int)data["is_pc"]; var local_id = data["local_id"]?.ToString(); //消息的本地ID var receiver = data["receiver"]?.ToString(); //接收者的user_id var send_time = data["send_time"].ToObject(); //消息时间戳 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID var title = data["title"]?.ToString(); //链接标题 var url = data["url"]?.ToString(); //链接url var cdn_type = (int)data["cdn_type"]; var isSend = false; var filePath = string.Empty; var cdn = data["cdn"]; if (cdn != null) { var aes_key = cdn["aes_key"].ToString(); var auth_key = cdn["auth_key"].ToString(); var size = cdn["size"].ToObject(); var cdnUrl = cdn["url"].ToString(); filePath = hook.CdnDown(cdnUrl, auth_key, aes_key, size, FileSuffixType.jpg).Result; if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(filePath)) { } else throw new Exception("企业接收链接消息Cdn下载失败"); } var rmsg = new WorkWechatReceiveMsg(); rmsg.MsgId = server_id.Trim(); #region 处理辅助 //var sendWxid = sender; //var sendNick = sender_name; //if (!WechatClient.IsAuxiliaryInput(sender, conversation_id, url)) //{ // //LogHepler.WriteLog("此消息被过滤,因为是机器人自己发送的:" + content,LogEnum.调试); // return; //} //var ass = WechatClient.IsAssistance(sender, conversation_id, dwClientid, WechatType.Xiaoxie_QY); //if (ass.type == WechatClient.AssistanceType.终止) return; //rmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助; //var usernick = string.Empty; //if (conversation_id.IsQun()) //{ // rmsg.FromGroupid = conversation_id; // rmsg.FromGroupNick = hook.FindNick(conversation_id); //} //else if (rmsg.IsSend) //{ // sendWxid = receiver; // sendNick = hook.FindNick(receiver); //} //rmsg.FromUsername = sendWxid; //rmsg.FromUsernick = sendNick; #endregion #region 1 //#region 处理辅助 var sendWxid = sender; var sendNick = sender_name; if (!WechatClient.IsAuxiliaryInput(sender, receiver, url)) { Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + url); return; } var ass = WechatClient.IsAssistance(sender, receiver, dwClientid, WechatType.Xiaoxie_QY); if (ass.type == WechatClient.AssistanceType.终止) return; rmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助; //var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var usernick = string.Empty; if (receiver.IsQun()) { rmsg.FromGroupid = receiver; rmsg.FromGroupNick = hook.FindNick(receiver); } else if (rmsg.IsSend) { if (string.IsNullOrWhiteSpace(usernick)) usernick = hook.FindNick(ass.fromName); } rmsg.FromUsername = ass.fromName; rmsg.FromUsernick = usernick; #endregion rmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat; //rmsg.IsSend = isSend; rmsg.RobotUsername = user.Wxid; rmsg.RobotUsernick = user.Nickname; rmsg.RobotType = RobotType.客户端企业微信; rmsg.FromMessageType = WechatMsgType.链接; rmsg.FromMessage = url; socketClient.Send(rmsg); #endregion } break; case MsgType.MT_RECV_EMOTION_MSG: //收到表情 { #region 收到表情 #region 数据结构 //企业微信 //{"data":{"content_type":29,"conversation_id":"R:10696053211018728","is_pc":0,"local_id":"159","name":"动画表情","receiver":"R:10696053211018728","send_time":"1610034507","sender":"1688853956558440","sender_name":"洪荒老道","server_id":"1042202","url":"http://p.qpic.cn/pic_wework/4121458178/eee874e28b58332c1f087836eecb7e06a5c3d08fa155e5e2/0"},"type":11048} //个人微信 //{"data":{"content_type":29,"conversation_id":"R:10696053211018728","is_pc":0,"local_id":"161","name":"动画表情","receiver":"1688853956558440","send_time":"1610034880","sender":"7881302484994318","sender_name":"、","server_id":"1042206","url":"https://wework.qpic.cn/wwpic/wwwx_4e98356331438f1988a3b55a7edc7b3f/0"},"type":11048} //企业微信 //{"data":{"cdn":{"aes_key":"","file_id":"","md5":"4e98356331438f1988a3b55a7edc7b3f","size":0},"cdn_type":1,"content_type":29,"conversation_id":"S:1688853956558440_7881302484994318","height":262,"is_pc":0,"local_id":"908","name":"动画表情","receiver":"1688853956558440","send_time":"1649232304","sender":"7881302484994318","sender_name":"派大星 。","server_id":"1064856","source_type":102,"type":1,"url":"https://wework.qpic.cn/wwpic/wwwx_4e98356331438f1988a3b55a7edc7b3f/0","width":264},"type":11048} #endregion if (data == null || user == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var content_type = data["content_type"]?.ToString(); var conversation_id = data["conversation_id"]?.ToString(); //会话ID var height = data["height"]?.ToString(); var is_pc = data["is_pc"]?.ToString(); //设备端 PC/移动 var local_id = data["local_id"]?.ToString(); //消息的本地ID var name = data["name"]?.ToString(); //名称 var receiver = data["receiver"]?.ToString(); //接收者的user_id var send_time = (long)data["send_time"]; //发送时间 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID //var source_type = data["source_type"]?.ToString(); //var type = data["type"]?.ToString(); var url = data["url"]?.ToString(); //图片地址 var width = data["width"]?.ToString(); var FromUsername = string.Empty; var FromUsernick = string.Empty; var rmsg = new WorkWechatReceiveMsg(); rmsg.MsgId = server_id.Trim(); rmsg.IsSend = false; rmsg.FromMessage = url; rmsg.FromMessageType = WechatMsgType.表情; rmsg.Timestamp = send_time; rmsg.OriMessage = JsonConvert.SerializeObject(data); if (receiver.IsQun()) { rmsg.FromGroupid = receiver; rmsg.FromGroupNick = hook.FindNick(receiver); } rmsg.FromUsername = sender; rmsg.FromUsernick = sender_name; socketClient.Send(rmsg); #endregion } break; case MsgType.MT_RECV_RED_PACKET_MSG://收到红包 { #region 收到红包 #region 数据结构 //企业微信红包(个人微信红包进的是文本消息) //{"data":{"content_type":26,"conversation_id":"R:10696053211018728","desc":"来自洪荒老道的红包,请进入手机版企业微信查看","is_pc":0,"local_id":"164","money":1,"packet_id":"1800008896202101087215807323007","receiver":"R:10696053211018728","remark":"阳光普照,皆大欢喜","send_time":"1610035229","sender":"1688853956558440","sender_name":"洪荒老道","server_id":"1042219"},"type":11049} #endregion if (data == null || user == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var content_type = data["content_type"]?.ToString(); //企业微信消息类型 var conversation_id = data["conversation_id"]?.ToString(); //会话ID var desc = data["desc"]?.ToString(); //描述 var is_pc = data["is_pc"]?.ToString(); //pc/移动 var local_id = data["local_id"]?.ToString(); //消息的本地ID var money = data["money"]?.ToString(); //描述 var packet_id = data["packet_id"]?.ToString(); //数据包id var receiver = data["receiver"]?.ToString(); //接收者的user_id var remark = data["remark"]?.ToString(); //备注 var send_time = (long)data["send_time"]; //消息时间戳 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID var rmsg = new WorkWechatReceiveMsg(); rmsg.MsgId = server_id.Trim(); rmsg.IsSend = false; rmsg.FromMessage = desc; rmsg.FromMessageType = WechatMsgType.红包; if (receiver.IsQun()) { rmsg.FromGroupid = receiver; rmsg.FromGroupNick = hook.FindNick(receiver); } rmsg.FromUsername = sender; rmsg.FromUsernick = sender_name; rmsg.Timestamp = send_time; rmsg.OriMessage = JsonConvert.SerializeObject(data); socketClient.Send(rmsg); #endregion } break; case MsgType.MT_RECV_PERSON_CARD_MSG://收到个人名片 { //{"data":{"content":"推荐噢噢噢哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"81","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000703"},"type":11041} /* {"data":{"avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaELtKaBvIBMGI7xTZdLA9mZglMaZQxPeBASJT1lCXCJnKg/0","content_type":41,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"80","nickname":"??欧尼桑","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000700","source":"微信","user_id":"7881301516989639"},"type":11050} 收到消息:{"data":{"content":"推荐噢噢噢哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"81","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000703"},"type":11041} */ //var content = data["content"]?.ToString(); //var content_type = data["content_type"]?.ToString(); //var conversation_id = data["conversation_id"]?.ToString(); //var local_id = data["local_id"]?.ToString(); //var receiver = data["receiver"]?.ToString(); //var send_time = data["send_time"]?.ToString(); //var sender = data["sender"]?.ToString(); //var sender_name = data["sender_name"]?.ToString(); //var server_id = data["server_id"]?.ToString(); #region 收到个人名片 #region 数据结构 //收到个人微信名片 //{"data":{"avatar":"http://wx.qlogo.cn/mmhead/b2ONlmmVZRq56aA1tGTq68BofibibsBtW4wicHoXLnnM1ib0CWjnUIkD6g/0","content_type":41,"conversation_id":"R:10696053211018728","is_pc":0,"local_id":"143","nickname":"壹十叄","receiver":"1688853956558440","send_time":"1610031853","sender":"7881301536005932","sender_name":"摸鱼樊","server_id":"1042150","source":"微信","user_id":"7881302995989894"},"type":11050} //收到企业微信名片 //{"data":{"avatar":"http://wework.qpic.cn/bizmail/AU8vqVRBac5HFiaTI2qxv3RNr8Kib0wFyicBQZkvs06ayzBhlHE7dCAmA/0","content_type":41,"conversation_id":"R:10696053211018728","is_pc":0,"local_id":"145","nickname":"白龙马","receiver":"R:10696053211018728","send_time":"1610032777","sender":"1688853956558440","sender_name":"洪荒老道","server_id":"1042158","source":"秒单客","user_id":"1688853956589484"},"type":11050} #endregion if (data == null || user == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var content_type = data["content_type"]?.ToString(); var conversation_id = data["conversation_id"]?.ToString(); //会话ID var avatar = data["avatar"]?.ToString(); //头像地址 var is_pc = data["is_pc"]?.ToString(); //设备端 PC/移动 var local_id = data["local_id"]?.ToString(); //消息的本地ID var nickname = data["nickname"]?.ToString(); //名片用户昵称 var receiver = data["receiver"]?.ToString(); //接收者的user_id var send_time = (long)data["send_time"]; //发送时间 var sender = data["sender"]?.ToString(); //发送者的user_id var sender_name = data["sender_name"]?.ToString(); //发送者昵称 var server_id = data["server_id"]?.ToString(); //消息的服务器ID var source = data["source"]?.ToString(); //来源 var user_id = data["user_id"]?.ToString(); //用户id var FromUsername = string.Empty; var FromUsernick = string.Empty; var rmsg = new WorkWechatReceiveMsg(); rmsg.MsgId = server_id.Trim(); rmsg.IsSend = false; rmsg.FromMessage = "发送了一个名片"; rmsg.OriMessage = JsonConvert.SerializeObject(new { user_id = user_id, nickname = nickname, avatar = avatar }); rmsg.FromMessageType = WechatMsgType.名片; if (receiver.IsQun()) { rmsg.FromGroupid = receiver; rmsg.FromGroupNick = hook.FindNick(receiver); } rmsg.FromUsername = sender; rmsg.FromUsernick = sender_name; rmsg.Timestamp = send_time; socketClient.Send(rmsg); #endregion } break; case MsgType.MT_RECV_MINIAPP_MSG://收到小程序 { //个人微信/企业微信 //{"data":{"content_type":78,"conversation_id":"R:10696053211018728","enterpoint":"pages/tab/home/index.html?_um_ssrc=oucfI5QRI-8SbyOTKSGYt5-ia0dk&_um_sts=1610033684099","ghid":"gh_a0d7a7672cf7@app","headimg":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM43LsxpXHKd7ua7kwMZQ8WHmZlkYTzr3Tdm8sMOJ7Ypog/96","image_key1":"306b020102046430620201000204bafc490e02030f4df9020473e6607102045ff72a530436333133373039353935305f313734393433343231315f3262393764653133616335373232353633383831336564376334396563616164020100020300ab1004000201010201000400","image_key2":"61747072666A766977766D69726D6168","image_key3":"2b97de13ac57225638813ed7c49ecaad","image_size":43791,"is_pc":0,"local_id":"155","name":"啄木鸟家庭维修","receiver":"1688853956558440","send_time":"1610033747","sender":"7881302484994318","sender_name":"、","server_id":"1042188","title":"直营一口价,维修无猫腻","wxid":"wx3d6b1af0cb07fa5a"},"type":11066} if (data == null || user == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var appicon = data["appicon"]?.ToString(); var appid = data["appid"]?.ToString(); var appname = data["appname"]?.ToString(); var content_type = data["content_type"]?.ToString();//内容类型 78 var conversation_id = data["conversation_id"]?.ToString();//接收者的的会话ID var local_id = data["local_id"]?.ToString(); var page_path = data["page_path"]?.ToString();//入口点 - 链接(小程序里面的链接) var receiver = data["receiver"]?.ToString();// 接收者的user_id var send_time = (long)data["send_time"];//小程序标题 var sender = data["sender"]?.ToString();// 发送者的user_id var sender_name = data["sender_name"]?.ToString();//发送者昵称 var server_id = data["server_id"]?.ToString();//消息的服务器ID var thumb_height = data["thumb_height"]?.ToString(); var thumb_width = data["thumb_width"]?.ToString(); var title = data["title"]?.ToString();//小程序标题 var username = data["username"]?.ToString(); var cdn_type = (int)data["cdn_type"]; var filePath = string.Empty; var cdn = data["cdn"]; if (cdn != null) { var aes_key = cdn["aes_key"].ToString(); var file_id = cdn["file_id"].ToString(); var size = (int)cdn["size"]; filePath = hook.C2cCdnDown(aes_key, file_id, size, QyCdnFileType.图片_视频, FileSuffixType.jpg).Result; if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath)) throw new Exception("企业接收小程序消息Cdn下载失败"); } var isSend = false; var RobotUsername = string.Empty; var RobotUsernick = string.Empty; var FromUsername = string.Empty; var FromUsernick = string.Empty; RobotUsername = user.Wxid; RobotUsernick = user.Nickname; FromUsername = sender; FromUsernick = sender_name; //} var wmsg = new WorkWechatReceiveMsg(); wmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat; wmsg.IsSend = isSend; wmsg.RobotUsername = RobotUsername; wmsg.RobotUsernick = RobotUsernick; wmsg.RobotType = RobotType.客户端企业微信; wmsg.FromMessageType = WechatMsgType.小程序; if (receiver.IsQun()) { wmsg.FromGroupid = receiver; wmsg.FromGroupNick = hook.FindNick(receiver); wmsg.FromUsername = sender; wmsg.FromUsernick = sender_name; } else { wmsg.FromUsername = FromUsername; wmsg.FromUsernick = FromUsernick; } wmsg.FromMessage = page_path; socketClient.Send(wmsg); } break; case MsgType.MT_RECV_IMAGE_TEXT_MSG://接收图文消息 break; case MsgType.MT_RECV_REVOKE_MSG://消息撤回 break; case MsgType.MT_RECV_OTHER_MSG://接收其他未解析消息 break; case MsgType.MT_SEARCH_USER_MSG: //查询联系人 { #region 数据结构 /* { "data":{ "contact_info":{ "acctid":"YiYi", "alias":"", "attr":146210880, "bind_email":"", "bind_email_status":1, "birthday":"1970-01-01 00:00:00", "bizuin":0, "circle_language":0, "corpid":1970325xxxxxx, "create_source":1, "create_time":0, "department":"", "display_order":0, "emailaddr":"", "english_name":"", "extern_job":"", "extern_position":"", "external_corp_info":"", "external_custom_info":null, "external_pb":"", "external_wxfinder":null, "extra_info":null, "gender":2, "gid":2251800xxxxxx, "hash":0, "holiday_info":{ "create_time":0, "holiday_desc":"", "holiday_generate_src":0, "holiday_icon_index":0, "holiday_info_id":0, "holiday_status":0, "holiday_status_new":0, "new_holiday_icon_index":0 }, "holiday_list_read_time":0, "iconurl":"http:\/\/wework.qpic.cn\/bizmail\/W9Sqc7EPicJeeR77ibdaMesvkicibwMdjCmaY6rIcpG8aytZJMCTrtVQgw\/0", "internation_code":"86", "is_name_verified":true, "job":"", "level":0, "main_partyid":16888xxx81, "mobile":"", "name":"一一xx", "name_status":1, "nation_code":"", "number":"", "openkfprofile":null, "partyid":0, "partymember_order":0, "personal_work_type":0, "phone":"", "position":"", "pstn_extension_number":"", "pstn_extension_number_new":"", "qqmail_uin":0, "realname":"xxxxx", "robot_profile":null, "school_parent_openid":"", "school_staff_relation":"", "school_user_type":0, "staff_attr":0, "staff_type":0, "staff_xid":0, "student_number":"", "subjectname":"", "tencent_info":{ "work_card_image":"" }, "uin":16888xxx, "under_verify_name":"", "unionid":"ozynqsnJuiQexxxxbE", "use_attr2":5898244, "v_corp_name_full":"", "v_corp_name_short":"", "v_corp_use_status":1000, "v_create_mail":"", "v_hoster_vid":0, "v_is_init_moder":true, "v_recommend_info":null, "vcode":"vce5e8f7825e87c408", "xcx_corp_address":"", "xcx_style":0 }, "corpinfo":{ "admin_vid":0, "appli_info":null, "auth_time":0, "authed_domain":"", "b_authed_licence":true, "b_has_info_corp":false, "b_hastoken":false, "b_internet_industry":false, "b_need_not_verify":false, "b_need_update_name":false, "card_url":"https:\/\/work.weixin.qq.com\/wework_admin\/xxxxp?", "coreate_source_info":"", "corp_desc":"", "corp_full_name":"xxxx科技有限公司", "corp_logo":"https:\/\/p.qlogo.cn\/bizmail\/1icHEZ7xxxx\/0", "corp_name":"xxxxxxxxx", "corp_stat":0, "corp_use_status":0, "corpid":19703250xxxxxxx, "create_time":1532394113, "custom_check_url":"", "email_need_auth":"", "internation_code":"", "isAccepted":false, "isTrust":true, "is_corp_verify":false, "is_init_moduser":false, "is_overseas_corp":false, "join_need_verify":false, "language":1, "mail":"", "mem_appli_time":0, "mem_create_time":0, "mobile_need_auth":"", "moduser_info":{ "name":"", "vid":0 }, "ownername":"小邪", "personal_work_info":"", "personal_work_type":0, "pstn_main_number":"", "pstn_officephone_state":0, "qyh_info":"", "scorp_id":"wwfd561047d79e1a2d", "staff_info":{ "attr":0, "corp_mail":"", "corp_mail_active":false, "corp_position":"", "corp_rank":"", "custom_check_status":0, "english_name":"", "head_image":"http:\/\/wework.qpic.cn\/bizmail\/xxxxxxxxxxw\/0", "internation_code":"86", "mail":"yiyimama@lcwsl999.onexmail.com", "name":"一一xxxx", "phone":"", "pstn_extension_number":"", "real_name":"" }, "staffnum":0, "status":0, "unreadNum":0, "v_init_domain_name":"", "v_superadmin_name":"", "v_superadmin_vid":0, "verify_msg":"", "verify_submit_time":0, "vid":16888505xxxxxx, "virtual_can_change_full_name":false, "virtual_corp_claiming_name":"", "work_card_back_url":"", "work_card_face_url":"" }, "datalist":[{ "contact_info":{ "acctid":"YiYiM", "alias":"", "attr":146210880, "bind_email":"", "bind_email_status":1, "birthday":"1970-01-01 00:00:00", "bizuin":0, "circle_language":0, "corpid":1970325xxx86, "create_source":1, "create_time":0, "department":"", "display_order":0, "emailaddr":"", "english_name":"", "extern_job":"", "extern_position":"", "external_corp_info":"", "external_custom_info":null, "external_pb":"", "external_wxfinder":null, "extra_info":null, "gender":2, "gid":2251800xx9, "hash":0, "holiday_info":{ "create_time":0, "holiday_desc":"", "holiday_generate_src":0, "holiday_icon_index":0, "holiday_info_id":0, "holiday_status":0, "holiday_status_new":0, "new_holiday_icon_index":0 }, "holiday_list_read_time":0, "iconurl":"http:\/\/wework.qpic.cn\/bizmail\/W9Sqc7EPicJeeR77ibdaMesvkicibwMdjCmaY6rIcpG8aytZJMCTrtVQgw\/0", "internation_code":"86", "is_name_verified":true, "job":"", "level":0, "main_partyid":16888505xxx1, "mobile":"", "name":"一一x", "name_status":1, "nation_code":"", "number":"", "openkfprofile":null, "partyid":0, "partymember_order":0, "personal_work_type":0, "phone":"", "position":"", "pstn_extension_number":"", "pstn_extension_number_new":"", "qqmail_uin":0, "realname":"xxxx", "robot_profile":null, "school_parent_openid":"", "school_staff_relation":"", "school_user_type":0, "staff_attr":0, "staff_type":0, "staff_xid":0, "student_number":"", "subjectname":"", "tencent_info":{ "work_card_image":"" }, "uin":1688850xxxx3, "under_verify_name":"", "unionid":"ozynqsnJuiQerUcDxxE", "use_attr2":5898244, "v_corp_name_full":"", "v_corp_name_short":"", "v_corp_use_status":1000, "v_create_mail":"", "v_hoster_vid":0, "v_is_init_moder":true, "v_recommend_info":null, "vcode":"vce5e8f78x8", "xcx_corp_address":"", "xcx_style":0 }, "contact_info_wx":{ "acctid":"", "alias":"", "attr":0, "bind_email":"", "bind_email_status":0, "birthday":"", "bizuin":0, "circle_language":0, "corpid":0, "create_source":0, "create_time":0, "department":"", "display_order":0, "emailaddr":"", "english_name":"", "extern_job":"", "extern_position":"", "external_corp_info":"", "external_custom_info":null, "external_pb":"", "external_wxfinder":null, "extra_info":null, "gender":2, "gid":0, "hash":0, "holiday_info":null, "holiday_list_read_time":0, "iconurl":"http:\/\/wx.qlogo.cn\/mmhead\/Q3auHgz\/0", "internation_code":"", "is_name_verified":false, "job":"", "level":0, "main_partyid":0, "mobile":"", "name":"一小口", // 名称 "name_status":0, "nation_code":"", "number":"", "openkfprofile":null, "partyid":0, "partymember_order":0, "personal_work_type":0, "phone":"", "position":"", "pstn_extension_number":"", "pstn_extension_number_new":"", "qqmail_uin":0, "realname":"", "robot_profile":null, "school_parent_openid":"", "school_staff_relation":"", "school_user_type":0, "self_info":null, "staff_attr":0, "staff_type":0, "staff_xid":0, "student_number":"", "subjectname":"", "tencent_info":null, "uin":7881299xxxxxx, // 用户id "under_verify_name":"", "unionid":"", "use_attr2":0, "v_corp_name_full":"", "v_corp_name_short":"", "v_corp_use_status":0, "v_create_mail":"", "v_hoster_vid":0, "v_is_init_moder":false, "v_recommend_info":null, "vcode":"", "xcx_corp_address":"", "xcx_style":0 }, "corpinfo":{ "admin_vid":0, "appli_info":null, "auth_time":0, "authed_domain":"", "b_authed_licence":true, "b_has_info_corp":false, "b_hastoken":false, "b_internet_industry":false, "b_need_not_verify":false, "b_need_update_name":false, "card_url":"https:\/\/work.weixin.qq.com\/wework_admin\/user\/h5\/corp?", "coreate_source_info":"", "corp_desc":"", "corp_full_name":"xxxxxxx网络科技有限公司", "corp_logo":"https:\/\/p.qlogo.cn\/bizmail\/1icHExxxxxxg\/0", "corp_name":"xxxx", "corp_stat":0, "corp_use_status":0, "corpid":197032xxxxx6, "create_time":1532394113, "custom_check_url":"", "email_need_auth":"", "internation_code":"", "isAccepted":false, "isTrust":true, "is_corp_verify":false, "is_init_moduser":false, "is_overseas_corp":false, "join_need_verify":false, "language":1, "mail":"", "mem_appli_time":0, "mem_create_time":0, "mobile_need_auth":"", "moduser_info":{ "name":"", "vid":0 }, "ownername":"小邪", "personal_work_info":"", "personal_work_type":0, "pstn_main_number":"", "pstn_officephone_state":0, "qyh_info":"", "scorp_id":"wwfd561047d79e1a2d", "staff_info":{ "attr":0, "corp_mail":"", "corp_mail_active":false, "corp_position":"", "corp_rank":"", "custom_check_status":0, "english_name":"", "head_image":"http:\/\/wework.qpic.cn\/bizmail\/W9Sqc7EPicJeeR77ibdaMesvkicibwMdjCxxxxw\/0", // 头像 "internation_code":"86", "mail":"yiyxxa@lxxx.onexmail.com", "name":"一一xxx", "phone":"", "pstn_extension_number":"", "real_name":"" }, "staffnum":0, "status":0, "unreadNum":0, "v_init_domain_name":"", "v_superadmin_name":"", "v_superadmin_vid":0, "verify_msg":"", "verify_submit_time":0, "vid":16888505xxxxxx, "virtual_can_change_full_name":false, "virtual_corp_claiming_name":"", "work_card_back_url":"", "work_card_face_url":"" }, "flag":0, "item_type":1, "name":"", "openid":"orFrbsuSYHirGxxxxxx", // 添加为客户时要用到 "relation":1, "search_status":1, "wx_ticket":"6001221957E20E5D29D1E733EE712415FBE17551E97981837EFAE6FFE7C22D989C2C64ABFEFC22FB07A801B91A132985C1A360FCDEAA389547xxxDxxxxF" // 添加为客户时要用到 }], "error_code":0, "error_message":"", "flag":0, "keyword":"151xxxxxxxx", // 搜索的手机号 "name":"", "relation":1, "search_status":1 }, "type":11052 } */ #endregion if (user == null || data == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var keyWord = string.Empty; if (user.IsGetContactDic.ContainsKey(keyWord) && user.IsGetContactDic[keyWord]) return; try { user.IsGetContactDic[keyWord] = true; FriendInfoHandlerEnterprise friendInfo = null; var member_list = (JArray)data["member_list"]; if (member_list == null) return; var result = (JArray)data["datalist"][0]; if (result != null) { var uin = string.Empty; var openid = string.Empty; var wx_ticket = string.Empty; var corpid = string.Empty; var flag = false;//是否赋值 var contact_info_wx = result["contact_info_wx"]; if (flag = contact_info_wx != null) { uin = contact_info_wx["uin"].ToString(); openid = result["openid"].ToString(); wx_ticket = result["wx_ticket "].ToString(); } var contact_info = result["contact_info"]; if (flag = contact_info != null) { uin = contact_info["uin"].ToString(); corpid = contact_info["corpid"].ToString(); } if (flag) friendInfo = new FriendInfoHandlerEnterprise() { user_id = uin, openid = openid, wx_ticket = wx_ticket, corp_id = corpid }; } user.FriendHandlerDic[keyWord] = friendInfo; } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信通过手机号搜索用户信息", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(keyWord); } } break; case MsgType.MT_ADD_SEARCH_USER_MSG://添加查询的联系人 break; case MsgType.MT_MODIFY_USER_REMARK_MSG://修改用户备注 break; case MsgType.MT_MODIFY_USER_DESC_MSG://修改用户描述 break; case MsgType.MT_MODIFY_EXTERNAl_USER_PHONES_MSG://修改外部联系人手机号 break; case MsgType.MT_MODIFY_EXTERNAl_USER_COMPANY_MSG://修改外部联系人公司 break; case MsgType.MT_CREATE_ROOM_MSG://创建群 { #region 数据结构 /* { "data":{ "createruin":168885053xx82, //创建者user_id "createtime":1639322040, // 创建时间 "error_code":0, "error_message":"", "failmem":[{ "type":0, "vid":0 }], "msgid":109xx35, "msgseq":8513xxx, "roomid":1069605293xxx1944, // 群id "roomname":"", "sessionid":"Nm5GdS10TURTd3lGdEZ1aQ==", "success_add_vidlist":[{ "success_add_vidlist":7881300xxx2093 // 添加成功的成员用户id }] }, "type":11058 } */ #endregion if (data == null || user == null) return; var _type = RobotIsRunType.创建群; if (user.IsGetDic.ContainsKey(_type)) { if (user.IsGetDic[_type]) return; } try { user.IsGetDic[_type] = true; CreateGroupInfo CreateGroupInfo = null; var keyMd5 = HttpExtend.GetMD5String($"CACHE_CREATEGROUP{_type}"); if (data["error_code"].ToObject() == 0) { var createruin = data["createruin"].ToObject(); var createtime = data["createtime"].ToObject(); var roomid = data["roomid"].ToObject(); var roomname = data["roomname"].ToObject(); CreateGroupInfo = new CreateGroupInfo() { CreateUserName = createruin, CreateTime = createtime, GroupId = roomid, GroupNick = roomname }; } Common.SetCache(keyMd5, CreateGroupInfo, 10); } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信创建群", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetDic.Remove(_type); } } break; case MsgType.MT_CREATE_NULL_ROOM_MSG://创建外部空群 break; case MsgType.MT_MODIFY_ROOM_NAME_MSG://修改群名 break; case MsgType.MT_ROOM_ADD_MEMBERS_MSG://添加群成员 //break; case MsgType.MT_ROOM_DEL_MEMBERS_MSG://删除群成员 break; case MsgType.MT_RECV_FRIEND_REQUEST://接收好友请求 { //{"data":{"avatar":"http://wx.qlogo.cn/mmhead/0T8yO33zeeg33jJCQibIWobapj6GX4xFBbOECtmG9VdkYpnzyiaUr5iag/0","corp_id":"1970325134026788","nickname":"17","sex":2,"user_id":"7881301610989604","verify":"我17"},"type":11063} //{"data":{"avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaEI8qvnXF9KjgTpvaSAzfhbE2kGoIspb7ibbEHGZEQxRibAQ/0","corp_id":"1970325134026788","nickname":"助将","sex":0,"user_id":"7881303410988876","verify":"欧珀new"},"type":11063} //{"data":{"avatar":"http://wx.qlogo.cn/mmhead/zroWGtm5tmsxaCHfI2ibibuBxtzsZc6brAIDCicIianoDYI/0","corp_id":"1970325134026788","nickname":"Boom","sex":1,"user_id":"7881303336175964","verify":"我是Boom"},"type":11063} if (data == null) return; var socketClient = EasySoc.GetSocket(); var avatar = data["avatar"]?.ToString();//头像 var corp_id = data["corp_id"]?.ToString();//公司id var nickname = data["nickname"]?.ToString();//申请人昵称 var sex = data["sex"]?.ToString();//性别 var user_id = data["user_id"]?.ToString();//用户id var verify = data["verify"]?.ToString();//申请摘要 var wXApply = new WorkWechatApplyFriend(); wXApply.Cmd = PCRobotCMD.applyFriend_workWeChat; wXApply.RobotUsername = user.Wxid; wXApply.RobotUsernick = user.Nickname; wXApply.RobotType = RobotType.客户端企业微信; wXApply.Message = verify; wXApply.NewFriendWxid = user_id; wXApply.NewFriendNick = nickname; wXApply.OldFriendWxid = string.Empty; wXApply.OldFriendNick = string.Empty; wXApply.Token = CsharpHttpHelper.HttpHelper.ObjectToJson(new { user_id = user_id, corp_id = corp_id }); //记录申请人,用于记录 if (!FriendRequestRecord.ContainsKey(user_id)) FriendRequestRecord.TryAdd(user_id, new FriendInfo() { account = user_id, avatar = avatar, nickname = nickname, sex = int.Parse(sex), wxid = user_id }); socketClient.Send(wXApply); } break; case MsgType.MT_ADD_ROOM_USER_MSG://添加群成员为联系人 break; case MsgType.MT_ROOM_CREATE_NOTIFY_MSG://新群通知 break; case MsgType.MT_ROOM_MEMBER_QUIT_NOTIFY_MSG://群成员主动退出通知 break; case MsgType.MT_CONTACT_ADD_NOITFY_MSG://好友新增通知 { //{"data":{"avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM7fVNDOBibWpoNq079a20EfXcvBZKUALpibSIyVSfRiccAtw/0","conversation_id":"S:1688853956558440_7881299738174185","corp_id":"1970325134026788","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"7881299738174185","username":"蟹老板 。"},"type":11076} if (data == null || user == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; var socketClient = EasySoc.GetSocket(); var user_id = data["user_id"]?.ToString();//账号 #region //如果为机器人自动通过的,等待结果的方法 var md5 = HttpExtend.GetMD5String($"accept{user_id}"); if (!(user.IsGetContactDic.ContainsKey(md5) && user.IsGetContactDic[md5])) { try { user.IsGetContactDic[md5] = true; Common.SetCache(md5, "", 5);//通知等待返回结果的方法 } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业自动通过添加响应缓存", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(md5); } } #endregion var acctid = data["acctid"]?.ToString();//账号 var avatar = data["avatar"]?.ToString();//头像 var conversation_id = data["conversation_id"]?.ToString();//会话ID var corp_id = data["corp_id"]?.ToString();//公司id var mobile = data["mobile"]?.ToString();//公司id var nickname = data["nickname"]?.ToString();//昵称 var position = data["position"]?.ToString();//地址 var realname = data["realname"]?.ToString();//真实名称 var remark = data["remark"]?.ToString();//备注 var sex = (int)data["sex"];//性别 var unionid = data["unionid"]?.ToString(); var username = data["username"]?.ToString();//微信昵称 WechatNewFriend msg = new WechatNewFriend(); msg.FromUserName = user_id; msg.Avatar = avatar; msg.FromUserNick = username; msg.Sex = sex; socketClient.Send(msg); } break; case MsgType.MT_ACCEPT_FRIEND_REQUEST://接受加好友请求 break; case MsgType.MT_DEL_FRIEND_MSG: case MsgType.MT_DEL_FRIEND_BY_MSG: break; case MsgType.MT_ROOM_MODIFY_NICK_MSG: break; case MsgType.MT_GET_OWN_QRIMAGE: break; case MsgType.MT_CDN_DOWN_MSG: { #region 数据结构 //图片 //{"data":{"error_code":0,"save_path":"D:\\项目\\秒单客项目\\返利机器人\\3.0\\yz_client\\yz_client\\yz_client\\bin\\Debug\\Cache\\Image\\1d7a78febfb843bb8ab77fd298aba1b5.jpg"},"type":11171} //视频 //{"data":{"error_code":0,"save_path":"D:\\项目\\秒单客项目\\返利机器人\\3.0\\yz_client\\yz_client\\yz_client\\bin\\Debug\\Cache\\Image\\291d0e4442ee46a1a6cf3af21216863f.mp4"},"type":11171} #endregion if (user == null || data == null) return; var hook = WechatClient.GetApi(user); var md5 = string.Empty; try { var error_corde = data["error_code"].ToObject(); if (error_corde != 0) throw new Exception($"Cdn下载异常:{recvData}"); var save_path = data["save_path"].ToString(); md5 = HttpExtend.GetMD5String(save_path); try { user.IsGetContactDic[md5] = true; } catch (Exception) { } Common.SetCache(md5, 1, 5); } catch (Exception ex) { LogHelper.GetSingleObj().Error("企业微信解析Cdn消息", ex.Message); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(md5); } } break; case MsgType.MT_C2CCDN_DOWN_MSG: { #region 数据结构 // {"data":{"error_code":0,"file_id":"3069020102046230600201000204bafc490e02031e903802040ac7f46d0204624ee2c20434333133373039353935305f31313832323539395f3631316535633864343430316166393935353530356432636437343665616238020100020300904004000201010201000400","save_path":"D:\\项目\\秒单客项目\\返利机器人\\3.0\\yz_client\\yz_client\\yz_client\\bin\\Debug\\Cache\\Image\\0b02274e4946420a97592bf07da6db6d.jpg"},"type":11170} #endregion if (user == null || data == null) return; var md5 = string.Empty; try { var error_corde = data["error_code"].ToObject(); if (error_corde != 0) throw new Exception($"Cdn下载异常:{recvData}"); var save_path = data["save_path"].ToString(); md5 = HttpExtend.GetMD5String(save_path); try { user.IsGetContactDic[md5] = true; } catch (Exception) { } Common.SetCache(md5, 1, 5); } catch (Exception ex) { LogHelper.GetSingleObj().Error("企业微信解析C2cCdn消息", ex.Message); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(md5); } } break; case MsgType.MT_GETCDN_UPLOADFILE: { #region 数据结构 //{"data":{"error_code":0,"file_aes_key":"34336366636637353562383135383465","file_id":"3072020102046b30690201000204f4287e6802030f59b102049317fa710204625050f7042d4e45574944315f6634323837653638393331376661373136323530353133375f3136343934333037373633303002010002030107d0041000fcd55383fba8807e1510efed058c400201010201000400","file_key":"1649430840411","file_md5":"00fcd55383fba8807e1510efed058c40","file_path":"D:\\项目\\秒单客项目\\返利机器人\\3.0\\yz_client\\yz_client\\yz_client\\bin\\Debug\\Cache\\Image\\3c78ef60613e43f1b5a369d528ce50b6.jpg","file_size":67523,"file_type":1,"image_height":960,"image_width":960},"type":11115} #endregion if (user == null || data == null) return; var hook = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY; //有时候接收到的数据为一下情况 //{"data":{"user_id":"7881302484994318"},"type":11039} var file_path = data["file_path"]?.ToString(); var md5 = Path.GetFileNameWithoutExtension(file_path);//这里是之前传过来的以md5命名的文件名 if (user.IsGetContactDic.ContainsKey(md5) && user.IsGetContactDic[md5]) return; try { try { user.IsGetContactDic[md5] = true; } catch (Exception) { } user.FileC2cCdnInfoDic[md5] = new FileC2cCdnInfo() { error_code = data["error_code"].ToObject(), file_aes_key = data["file_aes_key"].ToObject(), file_id = data["file_id"].ToObject(), file_key = data["file_key"].ToObject(), file_md5 = data["file_md5"].ToObject(), file_path = data["file_path"].ToObject(), file_size = data["file_size"].ToObject(), file_type = data["file_type"].ToObject(), image_height = data["image_height"].ToObject(), image_width = data["image_width"].ToObject() }; } catch (Exception ex) { LogHelper.GetSingleObj().Error("机器人企业微信上传Cdn文件信息", $@"原始数据:{recvData} 错误:{ex.Message} - {ex.StackTrace}"); } finally { Thread.Sleep(100); user.IsGetContactDic.Remove(md5); } } break; default: break; } } catch (Exception ex) { //Console.WriteLine("解析消息异常:" + ex.Message + "," + recvData); LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".._" + recvData); } }); } catch (Exception ex) { LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_."); } } private static ConcurrentDictionary FriendRequestRecord = new ConcurrentDictionary(); private static void WxCloseCallback(uint dwClientId) { try { var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == dwClientId && f.Value.Type == WechatType.Xiaoxie_QY).Value; if (v != null) { LogHelper.GetSingleObj().Info("系统", $"WxCloseCallbackQY关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})"); WechatClient.RemoveUser(v); } } catch (Exception ex) { LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_.-"); } } private static void WxAcceptCallback(uint dwClientId) { Console.WriteLine("注入成功:" + dwClientId); } /// /// 启动微信 /// /// /// public static uint StartWechat(bool isError = false) { InitPc(); var WechatWinFile = HttpExtend.MapFile("WXWork.exe", $"WXWork\\{Version}"); var md5 = Common.GetMD5Hash(WechatWinFile).ToUpper(); if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper()) { if (isError) throw new Exception("易转发客户端企业微信版本不支持,请登录易转发端手动处理"); var _rst = MessageBox.Show("您的企业微信版本暂时不支持,立即重新安装吗?", "版本不兼容", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (_rst == DialogResult.Yes) { var f = new WechatUpdate(Version); f.ShowDialog(); if (!f.IsOk) return 0; } else return 0; } // 注入并多开 //return InjectWxWork(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes("")); var path = HttpExtend.MapFile("WXWork.exe", $"WXWork\\{Version}"); LogHelper.GetSingleObj().Debug("注入前", $"DPath = {DllPath},Path = {path}"); return InjectWxWorkMultiOpen(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path)); } } }