2191 lines
140 KiB
C#
2191 lines
140 KiB
C#
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<uint, int> MT_APP_READY_MSG_BIND = new Dictionary<uint, int>();
|
||
|
||
/// <summary>
|
||
/// 历史接收到的消息
|
||
/// </summary>
|
||
private static Dictionary<string, DateTime> HistMsg = new Dictionary<string, DateTime>();
|
||
|
||
private static ConcurrentDictionary<string, string> ServerIdCache = new ConcurrentDictionary<string, string>();
|
||
|
||
// 接收消息回调
|
||
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<string, string>();
|
||
}
|
||
|
||
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<int>();
|
||
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<int>();
|
||
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<int>();
|
||
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<WorkFriendInfo>();
|
||
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<int>();
|
||
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<WorkFriendInfo>();
|
||
|
||
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<int>();
|
||
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<int>(); //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<string>();
|
||
var auth_key = cdn["auth_key"].ToObject<string>();
|
||
var ld_size = cdn["ld_size"].ToObject<int>();
|
||
var ld_url = cdn["ld_url"].ToObject<string>();
|
||
var md5 = cdn["md5"].ToObject<string>();
|
||
var md_size = cdn["md_size"].ToObject<int>();
|
||
var md_url = cdn["md_url"].ToObject<string>();
|
||
var size = cdn["size"].ToObject<int>();
|
||
var url = cdn["url"].ToObject<string>();
|
||
|
||
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<string>();
|
||
var file_id = cdn["file_id"].ToObject<string>();
|
||
var file_name = cdn["file_name"].ToObject<string>();
|
||
var md5 = cdn["md5"].ToObject<int>();
|
||
//var preview_img_url = cdn["preview_img_url"].ToObject<string>();
|
||
var size = cdn["size"].ToObject<int>();
|
||
|
||
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<string>();
|
||
var auth_key = cdn["auth_key"].ToObject<string>();
|
||
var md5 = cdn["md5"].ToObject<string>();
|
||
var preview_img_size = cdn["preview_img_size"].ToObject<int>();
|
||
var preview_img_url = cdn["preview_img_url"].ToObject<string>();
|
||
var size = cdn["size"].ToObject<int>();
|
||
var url = cdn["url"].ToObject<string>();
|
||
|
||
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<string>();
|
||
var file_id = cdn["file_id"].ToObject<string>();
|
||
var file_name = cdn["file_name"].ToObject<string>();
|
||
var md5 = cdn["md5"].ToObject<int>();
|
||
//var preview_img_url = cdn["preview_img_url"].ToObject<string>();
|
||
var size = cdn["size"].ToObject<int>();
|
||
|
||
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<long>(); //消息时间戳
|
||
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<int>();
|
||
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<int>() == 0)
|
||
{
|
||
var createruin = data["createruin"].ToObject<string>();
|
||
var createtime = data["createtime"].ToObject<long>();
|
||
var roomid = data["roomid"].ToObject<string>();
|
||
var roomname = data["roomname"].ToObject<string>();
|
||
|
||
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<int>();
|
||
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<int>();
|
||
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<int>(),
|
||
file_aes_key = data["file_aes_key"].ToObject<string>(),
|
||
file_id = data["file_id"].ToObject<string>(),
|
||
file_key = data["file_key"].ToObject<string>(),
|
||
file_md5 = data["file_md5"].ToObject<string>(),
|
||
file_path = data["file_path"].ToObject<string>(),
|
||
file_size = data["file_size"].ToObject<int>(),
|
||
file_type = data["file_type"].ToObject<int>(),
|
||
image_height = data["image_height"].ToObject<int>(),
|
||
image_width = data["image_width"].ToObject<int>()
|
||
};
|
||
}
|
||
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<string, FriendInfo> FriendRequestRecord = new ConcurrentDictionary<string, FriendInfo>();
|
||
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 启动微信
|
||
/// </summary>
|
||
/// <param name="FileName"></param>
|
||
/// <returns></returns>
|
||
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));
|
||
}
|
||
}
|
||
}
|