3748 lines
234 KiB
C#
3748 lines
234 KiB
C#
|
using CsharpHttpHelper;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using PCRobot.Entitys;
|
|||
|
using PCRobot.Pack;
|
|||
|
using PCRobot.Utils;
|
|||
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Drawing;
|
|||
|
using System.Drawing.Imaging;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using System.Security.Cryptography;
|
|||
|
using System.Text;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Web;
|
|||
|
using System.Web.Caching;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace PCRobot.PCWechat
|
|||
|
{
|
|||
|
///// <summary>
|
|||
|
///// 参考文档:
|
|||
|
///// https://www.showdoc.cc/wxtool
|
|||
|
///// https://www.showdoc.cc/WeApiUltimate
|
|||
|
///// 密码:784615627.
|
|||
|
///// </summary>
|
|||
|
|
|||
|
public class Wechat_Xiaoxie : BaseApi
|
|||
|
{
|
|||
|
public delegate void OnEvent(string Name, string Message);
|
|||
|
public static OnEvent ClickEvent;
|
|||
|
|
|||
|
#region 静态函数
|
|||
|
public static void Install()
|
|||
|
{
|
|||
|
if (IsInstall) return;
|
|||
|
|
|||
|
#region 自动登录新建设备信息,注册表开关
|
|||
|
try
|
|||
|
{
|
|||
|
if (Version == "3.4.0.38")
|
|||
|
{
|
|||
|
string Winrarpath = @"Software\Tencent\WeChat";
|
|||
|
string key = "FakeDeviceId";
|
|||
|
//yes为开,no为关
|
|||
|
RegistryHelper.SetRegistryKey("HKEY_CURRENT_USER", Winrarpath, key, "no");
|
|||
|
RegistryHelper.GetRegistryValue(Winrarpath, key);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error("自动登录新建设备信息", $"注册表操作异常:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
ClickEvent?.Invoke("开始登录", "正在检测已登录微信,请稍等....");
|
|||
|
try
|
|||
|
{
|
|||
|
//Thread.Sleep(5000);
|
|||
|
//DllPath = HttpExtend.MapFile($"WeChatHelper_{Version}.dll", "Bin");
|
|||
|
m_AcceptCallbackFunc = WxAcceptCallback;
|
|||
|
m_RecvCallbackFunc = WxRecvCallback;
|
|||
|
m_CloseCallbackFunc = WxCloseCallback;
|
|||
|
UseUtf8();
|
|||
|
// 初始化Callback
|
|||
|
InitWeChatSocket(m_AcceptCallbackFunc, m_RecvCallbackFunc, m_CloseCallbackFunc);
|
|||
|
|
|||
|
DllPath = HttpExtend.MapFile($"WeChatHelper_{Version}.dll", "Bin");
|
|||
|
KillPc(true);
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
IsInstall = true;
|
|||
|
ClickEvent?.Invoke("登录完成", "");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static string DllPath;
|
|||
|
/// <summary>
|
|||
|
/// 微信WeChatWin.dll基址
|
|||
|
/// </summary>
|
|||
|
//private static IntPtr BaseAddress;
|
|||
|
|
|||
|
public delegate void AcceptCallbackFunc(uint dwClientId);
|
|||
|
public delegate void RecvCallbackFunc(uint dwClientId, IntPtr intPtr, uint dwSize);
|
|||
|
public delegate void CloseCallbackFunc(uint dwClientId);
|
|||
|
private static AcceptCallbackFunc m_AcceptCallbackFunc;
|
|||
|
private static RecvCallbackFunc m_RecvCallbackFunc;
|
|||
|
private static CloseCallbackFunc m_CloseCallbackFunc;
|
|||
|
|
|||
|
// 引入DLL导出函数
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern bool InitWeChatSocket(AcceptCallbackFunc acceptCallback,
|
|||
|
RecvCallbackFunc recvCallback, CloseCallbackFunc closeCallback);
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern uint InjectWeChat(byte[] strDllPath);
|
|||
|
//[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
//public static extern bool SetLoginWxid(byte[] szWxid);
|
|||
|
|
|||
|
//BOOL __stdcall UseUtf8();
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern bool UseUtf8();
|
|||
|
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern bool GetUserWeChatVersion(StringBuilder v);
|
|||
|
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern uint InjectWeChat2(byte[] dllPath, byte[] wechatPath);
|
|||
|
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern uint InjectWeChatMultiOpen(byte[] dllPath, byte[] wechatPath);
|
|||
|
|
|||
|
[DllImport("Bin\\WeChatServer.dll", EntryPoint = "SendWeChatData")]
|
|||
|
public static extern bool _SendWeChatData(uint dwClienId, byte[] strJsonData);
|
|||
|
public bool SendWeChatData(uint dwClienId, string strJsonData)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (WechatClient.IsDebug)
|
|||
|
LogHelper.GetSingleObj().Debug("调试发送", $"{dwClienId} -> {strJsonData}");
|
|||
|
if (User != null && !string.IsNullOrEmpty(User.Wxid))
|
|||
|
{
|
|||
|
var json = HttpExtend.JsonToDictionary(strJsonData);
|
|||
|
var type = json["type"].ToString();
|
|||
|
MsgType msgType;
|
|||
|
if (!Enum.TryParse(type, out msgType)) return false;
|
|||
|
switch (msgType)
|
|||
|
{
|
|||
|
//截取发送消息 - 为是否是辅助输入提供判断
|
|||
|
case MsgType.MT_SEND_TEXTMSG:
|
|||
|
case MsgType.MT_SEND_CHATROOM_ATMSG:
|
|||
|
case MsgType.MT_SEND_CARDMSG:
|
|||
|
case MsgType.MT_SEND_XMLMSG:
|
|||
|
case MsgType.MT_SEND_IMGMSG:
|
|||
|
case MsgType.MT_SEND_FILEMSG:
|
|||
|
case MsgType.MT_SEND_VIDEOMSG:
|
|||
|
case MsgType.MT_SEND_GIFMSG:
|
|||
|
{
|
|||
|
json = json["data"] as Dictionary<string, object>;
|
|||
|
string to_wxid = json["to_wxid"].ToString();
|
|||
|
string message = string.Empty;
|
|||
|
if (json.ContainsKey("content")) message = json["content"].ToString();
|
|||
|
else if (json.ContainsKey("card_wxid")) message = json["card_wxid"].ToString();
|
|||
|
else if (json.ContainsKey("xml")) message = json["xml"].ToString();
|
|||
|
else if (json.ContainsKey("file")) message = json["file"].ToString();
|
|||
|
if (!string.IsNullOrEmpty(message))
|
|||
|
Common.SetCache(User.Wxid, to_wxid, message);
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return _SendWeChatData(dwClienId, Encoding.UTF8.GetBytes(strJsonData));
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, $"{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
//[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern bool DestroyWeChat();
|
|||
|
|
|||
|
[DllImport("Bin\\WeChatServer.dll")]
|
|||
|
public static extern uint InjectWeChatPid(int dwPid, byte[] dllPath);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 卸载安装
|
|||
|
/// </summary>
|
|||
|
public static void UnInstall()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
DestroyWeChat();
|
|||
|
LogHelper.GetSingleObj().Info(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, "卸载成功");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 注入成功回调
|
|||
|
static void WxAcceptCallback(uint dwClientId)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, "注入成功:" + dwClientId);
|
|||
|
Console.WriteLine("注入成功:" + dwClientId);
|
|||
|
}
|
|||
|
|
|||
|
#region 微信版本基础变量
|
|||
|
|
|||
|
//private const string Version = "2.9.5.41";
|
|||
|
//private const int PcOffSet = 0x1769E00;//2.9.5.41
|
|||
|
//private const string PcMd5 = "194F44DF80553326711A4F576FE7166E";//2.9.5.41
|
|||
|
|
|||
|
//private const string Version = "3.3.0.93";
|
|||
|
//private const int PcOffSet = 0x1DAEB90;//3.3.0.93
|
|||
|
//private const string PcMd5 = "5EE8A5B9D4EE63BE1813632D8A7B2E77";//3.3.0.93
|
|||
|
|
|||
|
private const string Version = "3.4.0.38";
|
|||
|
private const int PcOffSet = 0x1DEE968;//3.4.0.38
|
|||
|
private const string PcMd5 = "AB0916C9949178A786192B188892AE2C";//3.4.0.38
|
|||
|
#endregion
|
|||
|
|
|||
|
public override string GetVersion()
|
|||
|
{
|
|||
|
return Version;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 杀死注入 pc
|
|||
|
/// </summary>
|
|||
|
/// <param name="isInject"></param>
|
|||
|
private static void KillPc(bool isInject = false)
|
|||
|
{
|
|||
|
Process[] MyProcesses = Process.GetProcesses();
|
|||
|
|
|||
|
var path1 = HttpExtend.MapPath("PCWechat");
|
|||
|
var path2 = HttpExtend.MapPath("PCWechat\\" + Version);
|
|||
|
//var path3 = HttpExtend.MapPath("PCWechat\\" + "3.3.0.93");//退出上个版本的微信
|
|||
|
foreach (Process MyProcess in MyProcesses)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var name = MyProcess.ProcessName.ToUpper();
|
|||
|
if (name == "WECHAT" && MyProcess.MainModule.FileName.StartsWith(path1))
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
#region 退掉这个版本的微信
|
|||
|
//if (MyProcess.MainModule.FileName.StartsWith(path3))
|
|||
|
//{
|
|||
|
// try
|
|||
|
// {
|
|||
|
// LogHelper.GetSingleObj().Info("主动Q", "版本不对杀死进程:" + MyProcess.Id);
|
|||
|
// MyProcess.Kill();
|
|||
|
// }
|
|||
|
// catch (Exception)
|
|||
|
// { }
|
|||
|
//}
|
|||
|
#endregion
|
|||
|
|
|||
|
//判断微信版本
|
|||
|
if (MyProcess.MainModule.FileName.StartsWith(path2))
|
|||
|
{
|
|||
|
var id = MyProcess.Id;
|
|||
|
if (isInject)
|
|||
|
{
|
|||
|
var result = Task<bool>.Factory.StartNew(delegate
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var WechatWinFile = HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
|
|||
|
var md5 = Common.GetMD5Hash(WechatWinFile);
|
|||
|
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"开始注入进程:{id}...");
|
|||
|
uint uin = InjectWeChatPid(id, Encoding.UTF8.GetBytes(DllPath));
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"注入成功:{id},句柄ID:{uin}");
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
return false;
|
|||
|
}).Wait(30000);
|
|||
|
if (!result)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统c", "杀死进程:" + MyProcess.Id);
|
|||
|
MyProcess.Kill();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("主动d", "杀死进程:" + MyProcess.Id);
|
|||
|
MyProcess.Kill();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
Thread.Sleep(10);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static uint StartWechat(string wxid, bool isError = false)
|
|||
|
{
|
|||
|
var path = string.Empty;
|
|||
|
|
|||
|
var WechatWinFile = HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
|
|||
|
var md5 = Common.GetMD5Hash(WechatWinFile);
|
|||
|
if (!File.Exists(WechatWinFile) || md5.ToUpper() != 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;
|
|||
|
}
|
|||
|
path = HttpExtend.MapFile("WeChat.exe", $"PCWechat\\" + Version);
|
|||
|
|
|||
|
//WechatLoginHelper.BeginLogin(wxid);
|
|||
|
|
|||
|
//var ss = SetLoginWxid(Encoding.UTF8.GetBytes(""));
|
|||
|
//返回dwClientId
|
|||
|
var pid = InjectWeChat2(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path));
|
|||
|
|
|||
|
//WechatLoginHelper.ClickLogin((int)pid);
|
|||
|
|
|||
|
return pid;
|
|||
|
|
|||
|
//return InjectWeChatMultiOpen(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path));
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 远程登录微信
|
|||
|
/// </summary>
|
|||
|
public static List<RemoteLoginCode> RemoteLoginCodes = new List<RemoteLoginCode>();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 是否在获取二维码
|
|||
|
/// </summary>
|
|||
|
private static string RemoteCache = "get_login_code_cache";
|
|||
|
|
|||
|
private static readonly object Friend_Lock = new object();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// pc微信登录二维码
|
|||
|
/// </summary>
|
|||
|
/// <param name="ServerMsgID"></param>
|
|||
|
public static void LoginQrcode(string wxid, string ServerMsgID)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
RemoteLoginCode result = null;
|
|||
|
try
|
|||
|
{
|
|||
|
StartWechat(wxid, true);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
result = new RemoteLoginCode() { pid = -1, rType = RobotType.客户端微信, b64Md5 = ex.Message };
|
|||
|
}
|
|||
|
|
|||
|
if (result == null)
|
|||
|
{
|
|||
|
result = Task.Factory.StartNew<RemoteLoginCode>(delegate ()
|
|||
|
{
|
|||
|
var awaitTime = DateTime.Now.AddSeconds(10);
|
|||
|
do
|
|||
|
{
|
|||
|
Thread.Sleep(200);
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
object item = cache[RemoteCache];
|
|||
|
if (item != null)
|
|||
|
{
|
|||
|
cache.Remove(RemoteCache);
|
|||
|
var r = item as RemoteLoginCode;
|
|||
|
return r;
|
|||
|
}
|
|||
|
} while (awaitTime >= DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
}
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = string.Empty;
|
|||
|
msg.RobotUsernick = string.Empty;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvLoginCode;
|
|||
|
msg.Data = result == null ? string.Empty : JsonConvert.SerializeObject(result);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 等待登录结果
|
|||
|
/// </summary>
|
|||
|
public static Dictionary<string, string> WaitLoginResult = new Dictionary<string, string>();
|
|||
|
|
|||
|
// 接收消息回调
|
|||
|
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
|
|||
|
if (WechatClient.IsDebug) LogHelper.GetSingleObj().Debug("调试收到文本消息", $"{dwClient} -> {recvData}\r\n");
|
|||
|
|
|||
|
//Console.WriteLine($"{dwClient} -> {recvData}\r\n");
|
|||
|
|
|||
|
var dwClientid = dwClient;
|
|||
|
Task.Factory.StartNew(delegate ()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//Console.WriteLine("收到消息:" + recvData);
|
|||
|
var json = HttpExtend.JsonToDictionary(recvData);
|
|||
|
var type = json["type"].ToString();
|
|||
|
|
|||
|
var data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
|
|||
|
|
|||
|
MsgType msgType;
|
|||
|
if (!Enum.TryParse(type, out msgType)) return;
|
|||
|
|
|||
|
if (PCRobotForm.AnalysisTypes != null && PCRobotForm.AnalysisTypes.Count != 0)
|
|||
|
{
|
|||
|
if (PCRobotForm.AnalysisTypes.FirstOrDefault(f => f == msgType.ToString().ToUpper()) == null)
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
switch (msgType)
|
|||
|
{
|
|||
|
case MsgType.MT_SEND_XMLMSG:
|
|||
|
break;
|
|||
|
case MsgType.MT_DECRYPT_IMG_MSG:
|
|||
|
break;
|
|||
|
case MsgType.MT_DEBUG_LOG:
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_QRCODE_MSG:
|
|||
|
{
|
|||
|
//{"data":{"code":"http://weixin.qq.com/x/A98qrQOk3qB6L_fWPtxF","file":"C:\\Users\\????006\\AppData\\Local\\Temp\\qrcF451.tmp","pid":24088},"type":11087}
|
|||
|
if (!data.ContainsKey("file")) return;
|
|||
|
var file = data["file"].ToString();
|
|||
|
|
|||
|
var reg = Regex.Match(file, @"Temp\\(?<文件名>[a-z0-9A-Z]+.tmp)", RegexOptions.IgnoreCase);
|
|||
|
if (reg.Success)
|
|||
|
{
|
|||
|
var codeFile = HttpExtend.MapFile($"{reg.Groups["文件名"].Value}", Path.GetTempPath());
|
|||
|
if (File.Exists(codeFile))
|
|||
|
{
|
|||
|
var pid = int.Parse(data["pid"].ToString());
|
|||
|
var codeFilePng = Path.ChangeExtension(codeFile, "png");
|
|||
|
try
|
|||
|
{
|
|||
|
if (File.Exists(codeFilePng))
|
|||
|
File.Delete(codeFilePng);
|
|||
|
File.Move(codeFile, codeFilePng);
|
|||
|
if (File.Exists(codeFilePng))
|
|||
|
{
|
|||
|
var cfBase64 = Common.ConvertImageToBase64(Image.FromFile(codeFilePng));
|
|||
|
|
|||
|
var codeInfo = new RemoteLoginCode() { pid = pid, 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);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_USER_LOGIN://登陆消息
|
|||
|
{
|
|||
|
WechatLoginHelper.EndBinginLogin();
|
|||
|
|
|||
|
var wxid = data["wxid"].ToString();
|
|||
|
var user = WechatClient.GetUser(wxid, dwClientid, WechatType.Xiaoxie);
|
|||
|
user.Nickname = data["nickname"].ToString();
|
|||
|
user.HeaderUrl = data["avatar"].ToString();
|
|||
|
user.DBFile = data["wx_user_dir"].ToString();
|
|||
|
user.Pid = int.Parse(data["pid"].ToString());
|
|||
|
user.Phone = data["phone"].ToString();
|
|||
|
user.Uin = GetUin(user.Pid);
|
|||
|
|
|||
|
WechatClient.OnRefUserEvent(user, WaitLoginResult);
|
|||
|
//if (WechatClient.IsDebug)
|
|||
|
// LogHelper.GetSingleObj().Debug("调试登录", $"{wxid} - {user}");
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_USER_LOGOUT:
|
|||
|
{
|
|||
|
var wxid = data["wxid"].ToString();
|
|||
|
var user = WechatClient.Users.FirstOrDefault(f => f.Key == wxid).Value;
|
|||
|
if (user != null)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"LogOut事件退出,Uin:{user.Uin},微信:{user.Nickname}({wxid})");
|
|||
|
WechatClient.RemoveUser(user);
|
|||
|
}
|
|||
|
//if (WechatClient.IsDebug)
|
|||
|
// LogHelper.GetSingleObj().Debug("调试注销", $"{wxid} - {user}");
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SQL_QUERY:
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_OWNER_MSG:
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_WXID_MSG:
|
|||
|
{
|
|||
|
//{"data":{"account":"MOKA_1314_","avatar":"http://wx.qlogo.cn/mmhead/ver_1/UKuQPgzLzEY0UPqTgmqpSibLmx1BMibAlwJxOp4t8QksClGJP8tLHxUiaBDAax1Vf0Eiae6wKBIoT3ibAgOYTuuWiaVDiaiayiaaIZF46LcE5aBvTtSQ/132","city":"Chengdu","country":"CN","nickname":"进销存","province":"Sichuan","remark":"","sex":2,"wxid":"wxid_va4xpj22"},"type":11029}
|
|||
|
|
|||
|
lock (Friend_Lock)
|
|||
|
{
|
|||
|
var wxid = data["wxid"]?.ToString();
|
|||
|
if (Common.IsGzh(wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
var f = new FriendInfo();
|
|||
|
|
|||
|
f.account = data["account"]?.ToString();
|
|||
|
f.wxid = wxid;
|
|||
|
f.nickname = data["nickname"]?.ToString();
|
|||
|
f.remark = data["remark"]?.ToString();
|
|||
|
f.avatar = data["avatar"]?.ToString();
|
|||
|
f.city = data["city"]?.ToString();
|
|||
|
f.country = data["country"]?.ToString();
|
|||
|
f.province = data["province"]?.ToString();
|
|||
|
f.sex = int.Parse(data["sex"]?.ToString());
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
|
|||
|
if (friend != null)
|
|||
|
if (!user.Friends.TryTake(out friend)) return;
|
|||
|
user.Friends.Add(f);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_FRIENDS_MSG:
|
|||
|
{
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie;
|
|||
|
if (!user.IsGetFriend) return;
|
|||
|
try
|
|||
|
{
|
|||
|
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
|
|||
|
if (_data == null) return;
|
|||
|
|
|||
|
for (int i = 0; i < _data.Count; i++)
|
|||
|
{
|
|||
|
var item = _data[i] as Dictionary<string, object>;
|
|||
|
|
|||
|
var wxid = item["wxid"]?.ToString();
|
|||
|
|
|||
|
if (Common.IsGzh(wxid, WechatClient.IsGzh)) continue;
|
|||
|
|
|||
|
var f = new FriendInfo();
|
|||
|
f.wxid = wxid;
|
|||
|
f.account = item["account"]?.ToString();
|
|||
|
f.nickname = item["nickname"]?.ToString();
|
|||
|
f.remark = item["remark"]?.ToString();
|
|||
|
f.avatar = item["avatar"]?.ToString();
|
|||
|
f.sex = int.Parse(item["sex"]?.ToString());
|
|||
|
f.city = item["city"]?.ToString();
|
|||
|
|
|||
|
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
|
|||
|
if (friend == null)
|
|||
|
user.Friends.Add(f);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{ }
|
|||
|
finally
|
|||
|
{
|
|||
|
user.IsGetFriend = false;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_CHATROOMS_MSG:
|
|||
|
{
|
|||
|
if (data == null)
|
|||
|
{
|
|||
|
lock (Friend_Lock)
|
|||
|
{
|
|||
|
//{"data":[{"avatar":"http://wx.qlogo.cn/mmcrhead/iahdQicCC5VBRq5vMm7FxlfPct57WiadZ0NEnMUeicvXyS0fh73Hibw0QkkDMw9RQMETbWENFia9NQlmpibkH0bKsOothztfu8waTFy/0","is_manager":0,"manager_wxid":"wxid_yeh4ssxdjpqv12","member_list":["wxid_yeh4ssxdjpqv12","wujiahua0876","wxid_aiwyq8o6iqja12","wxid_lzssz365bwl222"],"nickname":"成都测试群","total_member":4,"wxid":"24444455370@chatroom"}],"type":11031}
|
|||
|
|
|||
|
|
|||
|
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
|
|||
|
if (_data == null) return;
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
for (int i = 0; i < _data.Count; i++)
|
|||
|
{
|
|||
|
Thread.Sleep(1000);
|
|||
|
//{"avatar":"http://wx.qlogo.cn/mmcrhead/00GYaClAoOpPmXm2NY7u8dZ0mXndbaJvesrlr88KhsUXaPTGvDE8Rt5wpSv9qtHLZJSIHLNBbxEhwFBnbV9FmE6O2fAmlMW1/0","is_manager":0,"manager_wxid":"wzm881101","member_list":["wzmdd2562","wxid_axvwtp4221","huih2861","a30432165487","wangs381015","wxid_vy1kfbt22","wiujihcj056"],"nickname":"吃卤蛋不吐卤蛋壳群","total_member":7,"wxid":"6975286487@chatroom"}
|
|||
|
|
|||
|
var item = _data[i] as Dictionary<string, object>;
|
|||
|
var f = new FriendInfo();
|
|||
|
|
|||
|
f.avatar = item["avatar"]?.ToString();
|
|||
|
f.wxid = item["wxid"]?.ToString();
|
|||
|
f.nickname = item["nickname"]?.ToString();
|
|||
|
f.remark = item["nickname"]?.ToString();
|
|||
|
|
|||
|
f.manager_wxid = item["manager_wxid"]?.ToString();
|
|||
|
f.is_manager = int.Parse(item["is_manager"]?.ToString());
|
|||
|
f.member_list = string.Join(",", (string[])(item["member_list"] as ArrayList).ToArray(typeof(string)));
|
|||
|
|
|||
|
var group = user.Groups.FirstOrDefault(z => z.wxid == f.wxid);
|
|||
|
if (group == null)
|
|||
|
{
|
|||
|
//群不存在,去获取群成员信息
|
|||
|
var _json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = f.wxid } });
|
|||
|
_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
|
|||
|
|
|||
|
group = new GroupInfo() { wxid = f.wxid, nickname = f.nickname, avatar = f.avatar, total_member = f.member_list.Length, friends = new List<FriendInfo>() };
|
|||
|
user.Groups.Add(group);
|
|||
|
}
|
|||
|
else
|
|||
|
group.total_member = f.member_list.Length;
|
|||
|
|
|||
|
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
|
|||
|
if (friend == null)
|
|||
|
user.Friends.Add(f);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_CHATROOM_MEMBERS_MSG:
|
|||
|
{
|
|||
|
lock (Friend_Lock)
|
|||
|
{
|
|||
|
var group_wxid = data["group_wxid"].ToString();
|
|||
|
var total = data["total"].ToString();
|
|||
|
var member_list = data["member_list"] as ArrayList;
|
|||
|
if (member_list == null) return;
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
var group = user.Groups.FirstOrDefault(z => z.wxid == group_wxid);
|
|||
|
if (group == null)
|
|||
|
{
|
|||
|
group = new GroupInfo() { wxid = group_wxid, total_member = member_list.Count, friends = new List<FriendInfo>() };
|
|||
|
user.Groups.Add(group);
|
|||
|
}
|
|||
|
else
|
|||
|
group.total_member = member_list.Count;
|
|||
|
|
|||
|
for (int i = 0; i < member_list.Count; i++)
|
|||
|
{
|
|||
|
//{"account":"","avatar":"http://wx.qlogo.cn/mmhead/ver_1/klibauQfLYtmfniaYAzsV9l6V4cSHmdDhniaTmJ6aGo0z035JTkB5QWrOUbAPnJnP4YXTMuKKmwNBMNv2Fbj5ia9icNicYeXGXbbsRiagGFKryASro/132","city":"","country":"","nickname":"陈建","province":"","remark":"","sex":0,"wxid":"wxid_e1j30jf2k5zdk022"}
|
|||
|
|
|||
|
var item = member_list[i] as Dictionary<string, object>;
|
|||
|
|
|||
|
var f = new FriendInfo();
|
|||
|
f.account = item["account"]?.ToString();
|
|||
|
f.avatar = item["avatar"]?.ToString();
|
|||
|
f.city = item["city"]?.ToString();
|
|||
|
f.country = item["country"]?.ToString();
|
|||
|
f.nickname = item["nickname"]?.ToString();
|
|||
|
f.province = item["province"]?.ToString();
|
|||
|
f.remark = item["remark"]?.ToString();
|
|||
|
f.sex = int.Parse(item["sex"]?.ToString());
|
|||
|
f.wxid = item["wxid"]?.ToString();
|
|||
|
|
|||
|
var friend = group.friends.FirstOrDefault(z => z.wxid == f.wxid);
|
|||
|
if (friend == null)
|
|||
|
group.friends.Add(f);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#region xx
|
|||
|
|
|||
|
//List<List<nmWxidInfo>> nmss = new List<List<nmWxidInfo>>();
|
|||
|
//List<nmWxidInfo> mis = new List<nmWxidInfo>();
|
|||
|
//var count = 20;
|
|||
|
//var rem = member_list.Count % count;
|
|||
|
//var num = member_list.Count / count;
|
|||
|
|
|||
|
//for (int i = 0; i < member_list.Count; i++)
|
|||
|
//{
|
|||
|
// var item = member_list[i] as Dictionary<string, object>;
|
|||
|
|
|||
|
// var account = item["account"]?.ToString();
|
|||
|
// var avatar = item["avatar"]?.ToString();
|
|||
|
// var city = item["city"]?.ToString();
|
|||
|
// var country = item["country"]?.ToString();
|
|||
|
// var nickname = item["nickname"]?.ToString();
|
|||
|
// var province = item["province"]?.ToString();
|
|||
|
// var remark = item["remark"]?.ToString();
|
|||
|
// var sex = item["sex"]?.ToString();
|
|||
|
// var wxid = item["wxid"]?.ToString();
|
|||
|
|
|||
|
// nmWxidInfo MemberInfo = new nmWxidInfo();
|
|||
|
// MemberInfo.Wxid = wxid;
|
|||
|
// MemberInfo.WxNo = account;
|
|||
|
// MemberInfo.Nick = nickname;
|
|||
|
// MemberInfo.Mark = remark;
|
|||
|
// MemberInfo.HeadIMG = avatar;
|
|||
|
// mis.Add(MemberInfo);
|
|||
|
// if (mis.Count >= count)
|
|||
|
// {
|
|||
|
// nmss.Add(mis);
|
|||
|
// mis = new List<nmWxidInfo>();
|
|||
|
// }
|
|||
|
// else if (nmss.Count == num && mis.Count == rem)
|
|||
|
// {
|
|||
|
// nmss.Add(mis);
|
|||
|
// }
|
|||
|
|
|||
|
//}
|
|||
|
//var socketClient = EasySoc.GetSocket();
|
|||
|
//var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
//if (user == null) return;
|
|||
|
//foreach (var item in nmss)
|
|||
|
//{
|
|||
|
// WechatGroupMember msg = new WechatGroupMember();
|
|||
|
// msg.RobotUsername = user.Wxid;
|
|||
|
// msg.RobotUsernick = user.Nickname;
|
|||
|
// msg.RobotType = RobotType.客户端微信;
|
|||
|
|
|||
|
// msg.Cmd = PCRobotCMD.rcvGroupMember;
|
|||
|
|
|||
|
// nmGroupInfo group = new nmGroupInfo();
|
|||
|
// group.Count = int.Parse(total);
|
|||
|
// group.GroupID = group_wxid;
|
|||
|
// group.List = item;
|
|||
|
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, nmGroupInfo>() { { "data", group } });
|
|||
|
|
|||
|
// socketClient.Send(msg);
|
|||
|
// Thread.Sleep(5);
|
|||
|
//}
|
|||
|
#endregion
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_DATA_PUBLICS_MSG:
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_UPDATE_WXID_MSG:
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_UPDATE_ROOM_MEMBER_MSG:
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_LINK_MSG:
|
|||
|
{
|
|||
|
//if (WechatClient.IsDebug)
|
|||
|
// LogHelper.GetSingleObj().Debug("调试收到链接", $"{dwClientid} -> {recvData}");
|
|||
|
|
|||
|
var is_pc = data["is_pc"]?.ToString();
|
|||
|
var from_wxid = data["from_wxid"].ToString();
|
|||
|
|
|||
|
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
var raw_msg = data["raw_msg"].ToString();
|
|||
|
|
|||
|
var room_wxid = data["room_wxid"].ToString();
|
|||
|
var to_wxid = data["to_wxid"].ToString();
|
|||
|
var wx_type = int.Parse(data["wx_type"].ToString());
|
|||
|
var wx_sub_type = int.Parse(data["wx_sub_type"].ToString());
|
|||
|
|
|||
|
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
|
|||
|
{
|
|||
|
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
|
|||
|
if (ass.type == WechatClient.AssistanceType.终止) return;
|
|||
|
|
|||
|
//if (!string.IsNullOrWhiteSpace(raw_msg))
|
|||
|
//{
|
|||
|
// var reg = Regex.Match(raw_msg, "<url>(?<链接>.*)</url>");
|
|||
|
// if (reg.Success)
|
|||
|
// {
|
|||
|
// raw_msg = reg.Groups["链接"].Value;
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
|
|||
|
WechatReceiveMsg wmsg = new WechatReceiveMsg();
|
|||
|
wmsg.Cmd = PCRobotCMD.rcvTxt;
|
|||
|
wmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
|
|||
|
wmsg.RobotUsername = ass.robotName;
|
|||
|
wmsg.RobotUsernick = ass.robotNick;
|
|||
|
wmsg.RobotType = RobotType.客户端微信;
|
|||
|
wmsg.FromMessageType = WechatMsgType.文本;
|
|||
|
|
|||
|
if (room_wxid.Contains("@chatroom"))
|
|||
|
wmsg.FromGroupid = room_wxid;
|
|||
|
wmsg.FromUsername = ass.fromName;
|
|||
|
wmsg.FromUsernick = ass.fromNick;
|
|||
|
wmsg.FromMessage = raw_msg;
|
|||
|
|
|||
|
socketClient.Send(wmsg);
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_TEXT_MSG:
|
|||
|
{
|
|||
|
//if (WechatClient.IsDebug)
|
|||
|
// LogHelper.GetSingleObj().Debug("调试收到文本消息", $"{dwClientid} -> {recvData}");
|
|||
|
|
|||
|
var at_user_list = data["at_user_list"] as ArrayList;
|
|||
|
var from_wxid = data["from_wxid"].ToString();
|
|||
|
var msg = data["msg"].ToString();
|
|||
|
|
|||
|
var msg_temp = string.Copy(msg);
|
|||
|
#region 替换@里面的用户昵称
|
|||
|
if (at_user_list != null && at_user_list.Count != 0)
|
|||
|
{
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var client_temp = WechatClient.GetApi(user) as Wechat_Xiaoxie;
|
|||
|
foreach (string username in at_user_list)
|
|||
|
{
|
|||
|
var firent = user.Friends.FirstOrDefault(f => f.wxid == username);
|
|||
|
if (firent == null)
|
|||
|
{
|
|||
|
client_temp.GetWxidInfo(username);
|
|||
|
Thread.Sleep(1000);
|
|||
|
firent = user.Friends.FirstOrDefault(f => f.wxid == username);
|
|||
|
}
|
|||
|
if (firent != null)
|
|||
|
msg_temp = msg_temp.Replace("@" + firent.nickname + " ", "{$@}");
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
|
|||
|
var room_wxid = data["room_wxid"].ToString();
|
|||
|
var to_wxid = data["to_wxid"].ToString();
|
|||
|
var wx_type = int.Parse(data["wx_type"].ToString());
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, msg_temp))
|
|||
|
{
|
|||
|
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + msg_temp);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
|
|||
|
if (ass.type == WechatClient.AssistanceType.终止) return;
|
|||
|
|
|||
|
WechatReceiveMsg wmsg = new WechatReceiveMsg();
|
|||
|
wmsg.Cmd = PCRobotCMD.rcvTxt;
|
|||
|
wmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
|
|||
|
wmsg.RobotUsername = ass.robotName;
|
|||
|
wmsg.RobotUsernick = ass.robotNick;
|
|||
|
wmsg.RobotType = RobotType.客户端微信;
|
|||
|
wmsg.FromMessageType = WechatMsgType.文本;
|
|||
|
|
|||
|
if (room_wxid.Contains("@chatroom") || room_wxid.Contains("@im.chatroom"))
|
|||
|
{
|
|||
|
wmsg.FromGroupid = room_wxid;
|
|||
|
wmsg.FromUsername = from_wxid;
|
|||
|
wmsg.FromUsernick = from_wxid == ass.robotName ? ass.robotNick : string.Empty;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
wmsg.FromUsername = ass.fromName;
|
|||
|
wmsg.FromUsernick = ass.fromNick;
|
|||
|
}
|
|||
|
wmsg.FromMessage = msg;
|
|||
|
|
|||
|
socketClient.Send(wmsg);
|
|||
|
|
|||
|
//从网络上下载群成员(刷新)
|
|||
|
//var _json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_ROOM_MEMBER_MSG, data = new { room_wxid = "24444455370@chatroom" } });
|
|||
|
//_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
|
|||
|
//获取群成员列表
|
|||
|
//var _json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = "24444455370@chatroom" } });
|
|||
|
//_SendWeChatData(dwClientid, Encoding.UTF8.GetBytes(_json));
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_ZOMBIE_CHECK_MSG:
|
|||
|
{
|
|||
|
//if (data == null) return;
|
|||
|
//if (data.ContainsKey("errcode"))
|
|||
|
//{
|
|||
|
// var status = int.Parse(data["status"].ToString());
|
|||
|
// var wxid = data["wxid"].ToString();
|
|||
|
|
|||
|
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
// var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
// if (firend == null) return;
|
|||
|
// firend.is_zombie = status;
|
|||
|
//}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SEND_CARD_XMLMSG:
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_PICTURE_MSG:
|
|||
|
case MsgType.MT_RECV_VOICE_MSG:
|
|||
|
case MsgType.MT_RECV_FRIEND_MSG:
|
|||
|
case MsgType.MT_RECV_CARD_MSG:
|
|||
|
case MsgType.MT_RECV_VIDEO_MSG:
|
|||
|
case MsgType.MT_RECV_EMOJI_MSG:
|
|||
|
case MsgType.MT_RECV_LOCATION_MSG:
|
|||
|
case MsgType.MT_RECV_FILE_MSG:
|
|||
|
{
|
|||
|
var from_wxid = data["from_wxid"].ToString();
|
|||
|
|
|||
|
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
var raw_msg = data["raw_msg"].ToString();
|
|||
|
var room_wxid = data["room_wxid"].ToString();
|
|||
|
var to_wxid = data["to_wxid"].ToString();
|
|||
|
var wx_type = int.Parse(data["wx_type"].ToString());
|
|||
|
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
|
|||
|
{
|
|||
|
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
|
|||
|
return;
|
|||
|
}
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
|
|||
|
if (wx_type == 3 || wx_type == 34 || wx_type == 43 || wx_type == 49)//图片、语音、视频、文件
|
|||
|
{
|
|||
|
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
|
|||
|
if (ass.type == WechatClient.AssistanceType.终止) return;
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var client = WechatClient.GetApi(user);
|
|||
|
|
|||
|
WechatReceiveMsg msg = new WechatReceiveMsg();
|
|||
|
msg.Cmd = PCRobotCMD.rcvFile;
|
|||
|
msg.IsSend = false;
|
|||
|
if (wx_type == 3)//图片
|
|||
|
{
|
|||
|
//var image_thumb = data["image_thumb"].ToString();
|
|||
|
var image = data["image"].ToString();
|
|||
|
|
|||
|
#region 等待下载
|
|||
|
long size = -1L;
|
|||
|
var reg = Regex.Match(raw_msg, @"hdlength=\""(\d+?)\""");
|
|||
|
if (reg.Success)
|
|||
|
size = long.Parse(reg.Groups[1].Value);
|
|||
|
else
|
|||
|
{
|
|||
|
reg = Regex.Match(raw_msg, @"\slength=\""(\d+?)\""");
|
|||
|
if (reg.Success)
|
|||
|
size = long.Parse(reg.Groups[1].Value);
|
|||
|
else
|
|||
|
{ }
|
|||
|
}
|
|||
|
var waitTime = DateTime.Now.AddSeconds(10);
|
|||
|
do
|
|||
|
{
|
|||
|
Thread.Sleep(200);
|
|||
|
var size_temp = new FileInfo(image).Length;
|
|||
|
if (File.Exists(image) && size == size_temp)
|
|||
|
break;
|
|||
|
} while (waitTime >= DateTime.Now);
|
|||
|
#endregion
|
|||
|
|
|||
|
msg.Cmd = PCRobotCMD.rcvImg;
|
|||
|
|
|||
|
msg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
|
|||
|
|
|||
|
var path = Common.CacheFilePath(ass.robotName, ass.fromName, "IMAGE", data["msgid"].ToString(), "jpg");
|
|||
|
|
|||
|
#region 等待图片解密
|
|||
|
//int i = 0;
|
|||
|
//do
|
|||
|
//{
|
|||
|
// i++;
|
|||
|
// client.DecryptImage(image, path);
|
|||
|
// var failureTime = DateTime.Now.AddSeconds(2);
|
|||
|
// do
|
|||
|
// {
|
|||
|
// Thread.Sleep(200);
|
|||
|
// if (File.Exists(path)) break;
|
|||
|
// } while (failureTime >= DateTime.Now);
|
|||
|
// if (File.Exists(path))
|
|||
|
// break;
|
|||
|
//} while (4 >= i);
|
|||
|
|
|||
|
DecodeImage(image, byte.Parse(data["xor_key"].ToString()), path);
|
|||
|
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
|
|||
|
{ }
|
|||
|
else
|
|||
|
path = image;
|
|||
|
#endregion
|
|||
|
|
|||
|
msg.FromMessage = $"[图片={path}]";
|
|||
|
msg.FromMessageType = WechatMsgType.图片;
|
|||
|
msg.FileCDNXML = raw_msg;
|
|||
|
}
|
|||
|
else if (wx_type == 34)//语音
|
|||
|
{
|
|||
|
//msg.FromMessage = string.Empty;//$"[语音={FilePath}]";//TODO 语音文件
|
|||
|
//msg.FromMessageType = WechatMsgType.语音;
|
|||
|
return;
|
|||
|
}
|
|||
|
else if (wx_type == 43)//视频
|
|||
|
{
|
|||
|
//var video = data["video"].ToString();
|
|||
|
//msg.FromMessage = $"[视频={video}]";
|
|||
|
//msg.FromMessageType = WechatMsgType.视频;
|
|||
|
return;
|
|||
|
}
|
|||
|
else if (wx_type == 49)//文件
|
|||
|
{
|
|||
|
//msg.FromMessage = string.Empty;//$"[文件={FilePath}]";//TODO 文件
|
|||
|
//msg.FromMessageType = WechatMsgType.文件;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
msg.IsSend = false;
|
|||
|
msg.RobotUsername = ass.robotName;
|
|||
|
msg.RobotUsernick = ass.robotNick;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
|
|||
|
if (room_wxid.Contains("@chatroom"))
|
|||
|
msg.FromGroupid = room_wxid;
|
|||
|
|
|||
|
msg.FromUsername = from_wxid;
|
|||
|
//msg.FromUsernick = string.Empty;//TODO 昵称没有获取
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
else if (wx_type == 37)//接收到好友申请请求
|
|||
|
{
|
|||
|
WechatApplyFriend wXApply = new WechatApplyFriend();
|
|||
|
wXApply.Cmd = PCRobotCMD.applyFriend;
|
|||
|
wXApply.RobotUsername = to_wxid;
|
|||
|
wXApply.RobotUsernick = WechatClient.GetUser(to_wxid)?.Nickname;
|
|||
|
wXApply.RobotType = RobotType.客户端微信;
|
|||
|
|
|||
|
var reg = Regex.Match(raw_msg, @"content=""(?<申请文本>[^""]*?)""");
|
|||
|
if (reg.Success)
|
|||
|
wXApply.Message = reg.Groups["申请文本"].Value;
|
|||
|
|
|||
|
reg = Regex.Match(raw_msg, @"sourceusername=""(?<账号>[^""]*?)"" sourcenickname=""(?<昵称>[^""]*?)""");
|
|||
|
if (reg.Success)
|
|||
|
{
|
|||
|
wXApply.OldFriendWxid = reg.Groups["账号"].Value;
|
|||
|
wXApply.OldFriendNick = reg.Groups["昵称"].Value;
|
|||
|
}
|
|||
|
reg = Regex.Match(raw_msg, @"fromusername=""(?<账号>[^""]*?)""");
|
|||
|
if (reg.Success)
|
|||
|
{
|
|||
|
if (!string.IsNullOrWhiteSpace(reg.Groups["账号"].Value))
|
|||
|
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
|
|||
|
else
|
|||
|
{
|
|||
|
reg = Regex.Match(raw_msg, @"alias=""(?<账号>[^""]*?)""");
|
|||
|
if (reg.Success)
|
|||
|
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
|
|||
|
}
|
|||
|
}
|
|||
|
reg = Regex.Match(raw_msg, @"fromnickname=""(?<昵称>[^""]*?)""");
|
|||
|
if (reg.Success)
|
|||
|
wXApply.NewFriendNick = reg.Groups["昵称"].Value;
|
|||
|
|
|||
|
wXApply.Token = raw_msg;//TODO 这里好像要获取raw_msg 中 v1的值
|
|||
|
|
|||
|
socketClient.Send(wXApply);
|
|||
|
}
|
|||
|
//名片
|
|||
|
else if (wx_type == 42) { }
|
|||
|
//接收表情
|
|||
|
else if (wx_type == 47) { }
|
|||
|
//接收位置消息
|
|||
|
else if (wx_type == 48) { }
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_WCPAY_MSG:
|
|||
|
{
|
|||
|
var from_wxid = data["from_wxid"].ToString();
|
|||
|
|
|||
|
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
var raw_msg = data["raw_msg"].ToString();
|
|||
|
var to_wxid = data["to_wxid"].ToString();
|
|||
|
var wx_type = data["wx_type"].ToString();
|
|||
|
var wx_sub_type = data["wx_sub_type"].ToString();
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
if (raw_msg.IndexOf("微信转账") != -1 && raw_msg.IndexOf("收到转账") != -1)
|
|||
|
{
|
|||
|
string State = Common.StringMid(raw_msg, "<paysubtype>", "</paysubtype>");
|
|||
|
string Transid = Common.StringMid(raw_msg, "transferid><![CDATA[", "]]></transferid>");
|
|||
|
int dwTime = 0;
|
|||
|
int.TryParse(Common.StringMid(raw_msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
|
|||
|
if (State == "1" && Transid != string.Empty)
|
|||
|
{
|
|||
|
WechatReicevePay reicevePay = new WechatReicevePay();
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
reicevePay.RobotUsername = user.Wxid;
|
|||
|
reicevePay.RobotUsernick = user.Nickname;
|
|||
|
reicevePay.RobotType = RobotType.客户端微信;
|
|||
|
reicevePay.FromUsername = from_wxid;
|
|||
|
reicevePay.FromUsernick = string.Empty;//TODO 没有获取昵称
|
|||
|
reicevePay.Cmd = PCRobotCMD.receivePay;
|
|||
|
reicevePay.Invalidtime = dwTime.ToString();
|
|||
|
reicevePay.Transferid = Transid;
|
|||
|
var reg = Regex.Match(raw_msg, "收到转账(?<金额>.+)元");
|
|||
|
if (reg.Success)
|
|||
|
reicevePay.Money = double.Parse(reg.Groups["金额"].Value);
|
|||
|
if (reicevePay.RobotUsernick == null) reicevePay.RobotUsernick = string.Empty;
|
|||
|
socketClient.Send(reicevePay);
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_SYSTEM_MSG:
|
|||
|
{
|
|||
|
//{"data":{"from_wxid":"wxid_lzssz365bwl222","is_pc":0,"msgid":"9071106463111673540","raw_msg":"\"先森吳\"邀请\"查优惠小助手(语馨)\"加入了群聊","room_wxid":"24444455370@chatroom","timestamp":1585398781,"to_wxid":"24444455370@chatroom","wx_type":10000},"type":11058}
|
|||
|
|
|||
|
if (data != null && data.ContainsKey("raw_msg"))
|
|||
|
{
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var raw_msg = data["raw_msg"].ToString();
|
|||
|
var room_wxid = data["room_wxid"].ToString();
|
|||
|
var from_wxid = data["from_wxid"].ToString();
|
|||
|
|
|||
|
//新人入群
|
|||
|
if (!string.IsNullOrWhiteSpace(room_wxid) && room_wxid.Contains("@chatroom"))
|
|||
|
{
|
|||
|
//var reg1 = Regex.Match(raw_msg, @"""(?<邀请人昵称>.*)""邀请""(?<新人昵称>.*)""加入了群聊");
|
|||
|
//var reg2 = Regex.Match(raw_msg, @"你邀请""(?<新人昵称>.*)""加入了群聊");
|
|||
|
//var reg3 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描""(?<邀请人昵称>.*)""分享的二维码加入群聊");
|
|||
|
//var reg4 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描你分享的二维码加入群聊");
|
|||
|
|
|||
|
//if (reg1.Success || reg2.Success || reg3.Success || reg4.Success)
|
|||
|
//{
|
|||
|
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
// if (user == null)
|
|||
|
// return;
|
|||
|
// WechatNewMemer newMember = new WechatNewMemer();
|
|||
|
// newMember.Cmd = PCRobotCMD.newMember;
|
|||
|
// newMember.RobotType = RobotType.客户端微信;
|
|||
|
// newMember.RobotUsername = user.Wxid;
|
|||
|
// newMember.RobotUsernick = user.Nickname;
|
|||
|
|
|||
|
// if (reg1.Success)
|
|||
|
// {
|
|||
|
// newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
|
|||
|
// newMember.MemberNick = reg1.Groups["新人昵称"].Value;
|
|||
|
// }
|
|||
|
// else if (reg2.Success)
|
|||
|
// {
|
|||
|
// newMember.SourceNick = newMember.RobotUsernick;
|
|||
|
// newMember.MemberNick = reg2.Groups["新人昵称"].Value;
|
|||
|
// }
|
|||
|
// else if (reg3.Success)
|
|||
|
// {
|
|||
|
// newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
|
|||
|
// newMember.MemberNick = reg3.Groups["新人昵称"].Value;
|
|||
|
// }
|
|||
|
// else if (reg4.Success)
|
|||
|
// {
|
|||
|
// newMember.SourceNick = newMember.RobotUsernick;
|
|||
|
// newMember.MemberNick = reg4.Groups["新人昵称"].Value;
|
|||
|
// }
|
|||
|
|
|||
|
// if (room_wxid.Contains("@chatroom"))
|
|||
|
// {
|
|||
|
// newMember.GroupId = room_wxid;
|
|||
|
// newMember.GroupNick = string.Empty;
|
|||
|
// }
|
|||
|
// socketClient.Send(newMember);
|
|||
|
//}
|
|||
|
}
|
|||
|
else//新增好友
|
|||
|
{
|
|||
|
//#region 添加好友成功
|
|||
|
//var reg1 = Regex.Match(raw_msg, "^你已添加了(.*?),现在可以开始聊天了。$");
|
|||
|
//var reg2 = Regex.Match(raw_msg, "^(.*?)刚刚把你添加到通讯录,现在可以开始聊天了。$");
|
|||
|
//if (reg1.Success || reg2.Success)
|
|||
|
//{
|
|||
|
// var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
// if (user == null)
|
|||
|
// return;
|
|||
|
// WechatNewFriend msg = new WechatNewFriend();
|
|||
|
// msg.Cmd = PCRobotCMD.newfriend;
|
|||
|
// msg.RobotUsername = user.Wxid;
|
|||
|
// msg.RobotUsernick = user.Nickname;
|
|||
|
// msg.RobotType = RobotType.客户端微信;
|
|||
|
// msg.FromUserName = from_wxid;
|
|||
|
// msg.FromUserNick = reg1.Success ? reg1.Groups[1].Value : reg2.Groups[1].Value;
|
|||
|
// socketClient.Send(msg);
|
|||
|
//}
|
|||
|
//#endregion
|
|||
|
|
|||
|
#region 检测僵尸粉
|
|||
|
//{"data":{"from_wxid":"wujiahua0876","is_pc":0,"msgid":"3624674612069828076","raw_msg":"先森吳开启了朋友验证,你还不是他(她)朋友。请先发送朋友验证请求,对方验证通过后,才能聊天。<a href=\"weixin://findfriend/verifycontact\">发送朋友验证</a>","room_wxid":"","timestamp":1585125257,"to_wxid":"wxid_lzssz365bwl222","wx_type":10000},"type":11058}
|
|||
|
|
|||
|
//{"data":{"from_wxid":"wxid_89qxkbyaxrok22","is_pc":0,"msgid":"7401397021380323657","raw_msg":"消息已发出,但被对方拒收了。","room_wxid":"","timestamp":1603436524,"to_wxid":"wujiahua0876","wx_type":10000},"type":11058}
|
|||
|
if (raw_msg.Contains("开启了朋友验证") || raw_msg.Contains("但被对方拒收了"))//这里说明是僵尸粉
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Debug("调试清粉", $"{JsonConvert.SerializeObject(data)}");
|
|||
|
|
|||
|
var wxid = data["from_wxid"].ToString();
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (firend == null) return;
|
|||
|
if (raw_msg.Contains("但被对方拒收了"))
|
|||
|
firend.is_zombie = 2;//拉黑了
|
|||
|
else
|
|||
|
firend.is_zombie = 1;//单向好友
|
|||
|
|
|||
|
//var socketClient = EasySoc.GetSocket();
|
|||
|
WechatContact msg = new WechatContact();
|
|||
|
msg.RobotUsername = user.Wxid;
|
|||
|
msg.RobotUsernick = user.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.Cmd = PCRobotCMD.rcvContactList;
|
|||
|
msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", new List<FriendInfo>() { firend } } });
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
//{"data":{"from_wxid":"wxid_2ufntuf4purl22","is_pc":0,"msgid":"1580248074267233434","raw_msg":"由于名片类型或场景原因,暂不支持转发该名片。","room_wxid":"","timestamp":1585125880,"to_wxid":"wxid_lzssz365bwl222","wx_type":10000},"type":11058}
|
|||
|
else if (raw_msg.Contains("暂不支持转发该名片"))//这里说明是好友
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Debug("调试清粉_", $"{JsonConvert.SerializeObject(data)}");
|
|||
|
|
|||
|
var wxid = data["from_wxid"].ToString();
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
var firend = user.Friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (firend == null) return;
|
|||
|
firend.is_zombie = 0;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_REVOKE_MSG:
|
|||
|
{
|
|||
|
//私聊用户撤回消息
|
|||
|
//{"data":{"from_wxid":"wujiahua0876","is_pc":0,"msgid":"3768878978337666344","raw_msg":"<sysmsg type=\"revokemsg\">\n\t<revokemsg>\n\t\t<session>wujiahua0876</session>\n\t\t<msgid>1097101643</msgid>\n\t\t<newmsgid>5572791720720581005</newmsgid>\n\t\t<replacemsg><![CDATA[\"用户备注的昵称\" 撤回了一条消息]]></replacemsg>\n\t</revokemsg>\n</sysmsg>\n","room_wxid":"","timestamp":1586758499,"to_wxid":"wxid_lzssz365bwl222","wx_type":10002},"type":11059}
|
|||
|
//私聊用户机器人自己撤回消息
|
|||
|
//{"data":{"from_wxid":"wxid_lzssz365bwl222","is_pc":0,"msgid":"1526645333654331593","raw_msg":"<sysmsg type=\"revokemsg\"><revokemsg><session>wujiahua0876</session><msgid>1716323650</msgid><newmsgid>5998900618590839539</newmsgid><replacemsg><![CDATA[你撤回了一条消息]]></replacemsg></revokemsg></sysmsg>","room_wxid":"","timestamp":1586758971,"to_wxid":"wujiahua0876","wx_type":10002},"type":11059}
|
|||
|
|
|||
|
var from_wxid = string.Empty;
|
|||
|
if (data.ContainsKey("from_wxid"))
|
|||
|
from_wxid = data["from_wxid"]?.ToString();
|
|||
|
var raw_msg = string.Empty;
|
|||
|
if (data.ContainsKey("raw_msg"))
|
|||
|
{
|
|||
|
raw_msg = data["raw_msg"]?.ToString();
|
|||
|
}
|
|||
|
var to_wxid = string.Empty;
|
|||
|
if (data.ContainsKey("to_wxid"))
|
|||
|
to_wxid = data["to_wxid"]?.ToString();
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_OTHER_MSG:
|
|||
|
break;
|
|||
|
case MsgType.MT_RECV_OTHER_APP_MSG:
|
|||
|
case MsgType.MT_RECV_MINIAPP_MSG:
|
|||
|
{
|
|||
|
//if (WechatClient.IsDebug)
|
|||
|
// LogHelper.GetSingleObj().Debug("调试收到小程序消息", $"{dwClientid} -> {recvData}");
|
|||
|
if (data == null) return;
|
|||
|
|
|||
|
var wx_type = data["wx_type"]?.ToString();//微信原始类型,值为 49
|
|||
|
if (wx_type == "49")
|
|||
|
{
|
|||
|
var wx_sub_type = data["wx_sub_type"]?.ToString();//微信原始应用子类型,值为 36
|
|||
|
if (wx_sub_type == "1" || wx_sub_type == "36" || wx_sub_type == "33" || wx_sub_type == "3" || wx_sub_type == "19")
|
|||
|
{
|
|||
|
var from_wxid = data["from_wxid"]?.ToString();//发送者的wxid
|
|||
|
|
|||
|
if (Common.IsGzh(from_wxid, WechatClient.IsGzh)) return;
|
|||
|
|
|||
|
var is_pc = data["is_pc"]?.ToString();
|
|||
|
var raw_msg = data["raw_msg"]?.ToString();
|
|||
|
var msgid = data["msgid"]?.ToString();// 接收到的消息id
|
|||
|
var room_wxid = data["room_wxid"]?.ToString();//群聊的wxid
|
|||
|
var to_wxid = data["to_wxid"]?.ToString();//接收者的wxid
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
if (!WechatClient.IsAuxiliaryInput(from_wxid, to_wxid, raw_msg))
|
|||
|
{
|
|||
|
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var ass = WechatClient.IsAssistance(from_wxid, to_wxid, dwClientid);
|
|||
|
if (ass.type == WechatClient.AssistanceType.终止) return;
|
|||
|
|
|||
|
//if (!string.IsNullOrWhiteSpace(raw_msg))
|
|||
|
//{
|
|||
|
// var reg = Regex.Match(raw_msg, @"<publisherId>(?<链接>.*)</publisherId>");
|
|||
|
// if (reg.Success)
|
|||
|
// raw_msg = reg.Groups["链接"].Value;
|
|||
|
//}
|
|||
|
|
|||
|
WechatReceiveMsg wmsg = new WechatReceiveMsg();
|
|||
|
wmsg.Cmd = PCRobotCMD.rcvTxt;
|
|||
|
wmsg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
|
|||
|
wmsg.RobotUsername = ass.robotName;
|
|||
|
wmsg.RobotUsernick = ass.robotNick;
|
|||
|
wmsg.RobotType = RobotType.客户端微信;
|
|||
|
wmsg.FromMessageType = WechatMsgType.文本;
|
|||
|
|
|||
|
if (room_wxid.Contains("@chatroom"))
|
|||
|
{
|
|||
|
wmsg.FromGroupid = room_wxid;
|
|||
|
wmsg.FromUsername = from_wxid;
|
|||
|
wmsg.FromUsernick = from_wxid == ass.robotName ? ass.robotNick : string.Empty;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
wmsg.FromUsername = ass.fromName;
|
|||
|
wmsg.FromUsernick = ass.fromNick;
|
|||
|
}
|
|||
|
wmsg.FromMessage = raw_msg;
|
|||
|
|
|||
|
socketClient.Send(wmsg);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_CHECK_URL_STATUS_MSG:
|
|||
|
{
|
|||
|
//if (CheckUrlCache.Count > 500) CheckUrlCache.Clear();
|
|||
|
//{"data":{"status":-2005,"url":"https://ycs9d.kuaizhan.com/?id=07E4060844959"},"type":11123}
|
|||
|
if (data["status"] != null)
|
|||
|
{
|
|||
|
var url = data["url"]?.ToString();
|
|||
|
if (!string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
//CheckUrlCache.Add(url.Trim(), int.Parse(data["status"].ToString()));
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
//查找 md5 的缓存,不存在则返回null
|
|||
|
object item = cache[url.Trim()];
|
|||
|
cache.Insert(url.Trim(), int.Parse(data["status"].ToString()), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
//case MsgType.MT_CHECK_URL_STATUS2_MSG:
|
|||
|
// {
|
|||
|
|
|||
|
// if (data.ContainsKey("baseResponse"))
|
|||
|
// {
|
|||
|
// var baseResponse = data["baseResponse"] as Dictionary<string, object>;
|
|||
|
// if (baseResponse.ContainsKey("ret"))
|
|||
|
// {
|
|||
|
// var ret = baseResponse["ret"].ToString();
|
|||
|
// Cache cache = HttpRuntime.Cache;
|
|||
|
// //查找 md5 的缓存,不存在则返回null
|
|||
|
// object item = cache[url.Trim()];
|
|||
|
// cache.Insert(url.Trim(), int.Parse(ret), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }
|
|||
|
// break;
|
|||
|
case MsgType.MT_ROOM_ADD_MEMBER_NOTIFY_MSG://群成员新增通知
|
|||
|
{
|
|||
|
//{"data":{"avatar":"","is_manager":1,"manager_wxid":"wxid_tnizkijej5uq22","member_list":[{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/MpicosfFj1KMvlSPoxWHjUfT2KGqJvEKrDkDCUiaQp4ryYkv3NMdsYofXUVvgalGx0ylia2swn2MMNWwiaWWEUl4QvQayM2Y28pAaxShUZUH5ms/132","invite_by":"wujiahua0876","nickname":"A083赚钱鸭💯(葫芦娃)","wxid":"wxid_5fn1vpyjpfj022"}],"nickname":"111111","room_wxid":"24466267291@chatroom","total_member":5},"type":11098}
|
|||
|
|
|||
|
if (data == null) return;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var avatar = data["avatar"].ToString();//头像
|
|||
|
var is_manager = data["is_manager"].ToString();//
|
|||
|
var manager_wxid = data["manager_wxid"].ToString();//管理账号
|
|||
|
var room_nick = data["nickname"].ToString();//群昵称
|
|||
|
var room_wxid = data["room_wxid"].ToString();//群账号
|
|||
|
var total_member = int.Parse(data["total_member"].ToString());//群人数
|
|||
|
|
|||
|
var member_list = data["member_list"] as ArrayList;
|
|||
|
if (member_list != null && member_list.Count != 0)
|
|||
|
{
|
|||
|
var member = member_list[0] as Dictionary<string, object>;
|
|||
|
var avatar_user = member["avatar"].ToString();//头像
|
|||
|
var invite_by = member["invite_by"].ToString();//邀请者wxid
|
|||
|
var nickname = member["nickname"].ToString();//新用户昵称
|
|||
|
var wxid = member["wxid"].ToString();//新用户账号
|
|||
|
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
WechatNewMemer newMember = new WechatNewMemer();
|
|||
|
newMember.Cmd = PCRobotCMD.newMember;
|
|||
|
newMember.RobotType = RobotType.客户端微信;
|
|||
|
newMember.RobotUsername = user.Wxid;
|
|||
|
newMember.RobotUsernick = user.Nickname;
|
|||
|
|
|||
|
//if (reg1.Success)
|
|||
|
//{
|
|||
|
// newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
|
|||
|
// newMember.MemberNick = reg1.Groups["新人昵称"].Value;
|
|||
|
//}
|
|||
|
//else if (reg2.Success)
|
|||
|
//{
|
|||
|
// newMember.SourceNick = newMember.RobotUsernick;
|
|||
|
// newMember.MemberNick = reg2.Groups["新人昵称"].Value;
|
|||
|
//}
|
|||
|
//else if (reg3.Success)
|
|||
|
//{
|
|||
|
// newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
|
|||
|
// newMember.MemberNick = reg3.Groups["新人昵称"].Value;
|
|||
|
//}
|
|||
|
//else if (reg4.Success)
|
|||
|
//{
|
|||
|
// newMember.SourceNick = newMember.RobotUsernick;
|
|||
|
// newMember.MemberNick = reg4.Groups["新人昵称"].Value;
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
newMember.SourceNick = string.Empty;
|
|||
|
newMember.SourceName = (string.IsNullOrWhiteSpace(invite_by) || invite_by == user.Wxid) ? string.Empty : invite_by;
|
|||
|
newMember.MemberNick = nickname;
|
|||
|
newMember.MemberName = wxid;
|
|||
|
newMember.GroupId = room_wxid;
|
|||
|
newMember.GroupNick = room_nick;
|
|||
|
newMember.TotalMember = total_member;
|
|||
|
|
|||
|
socketClient.Send(newMember);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_ROOM_DEL_MEMBER_NOTIFY_MSG://群成员删除/退出通知
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_ROOM_CREATE_NOTIFY_MSG://通过接口创建群聊的通知
|
|||
|
{
|
|||
|
//{"data":{"avatar":"http://wx.qlogo.cn/mmcrhead/MvMkWKHbPUVricNicF781PXeuPMW2vHEywf6lkuMfLgHN4IlRAyPiaDX8AG9d9XEa1ibiaMXBr83ibDVmgCT70qkHXPN9SFn5iaHC7y/0","is_manager":1,"manager_wxid":"wxid_tnizkijej5uq22","member_list":[{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/CVGILsl6SCMBjjCuyxUOZXNRgeiaPx4EwT1WMqCDz9qp3XcuzuVm3SHuPuial3wOMVUSbbJujBtUqPkB3Uz1ruTVzibqZ74FTnBKibNCq67qBcE/132","invite_by":"wxid_tnizkijej5uq22","nickname":"小张晚安","wxid":"wxid_uwbxwbt4ihjd22"},{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/cstPo5zCEb794wfD44BbnoQicfDOeOzkB3BficFYticVmQy7umm4SArThiaia6f6ZJFriaewskJ3foyuxrEVYic7NicwXQ/132","invite_by":"wxid_tnizkijej5uq22","nickname":"先森吳","wxid":"wujiahua0876"},{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/tbfVwxp5B5WkAx7KxDCTia8kzWgMIj3bqA1QaoHxXvQTwS5aRw6h9WjTQMWBhD6fkt4XjUxURDDGF5aBek8xSnY4kqPIQ9T4oweMyaKLSwnM/132","invite_by":"","nickname":"Coco","wxid":"wxid_tnizkijej5uq22"}],"nickname":"","room_wxid":"24652183014@chatroom","total_member":3},"type":11100}
|
|||
|
|
|||
|
if (data == null) return;
|
|||
|
|
|||
|
var wxids = new List<string>();
|
|||
|
var member_list = data["member_list"] as ArrayList;
|
|||
|
for (int i = 0; i < member_list.Count; i++)
|
|||
|
{
|
|||
|
//{"avatar":"http://wx.qlogo.cn/mmhead/ver_1/CVGILsl6SCMBjjCuyxUOZXNRgeiaPx4EwT1WMqCDz9qp3XcuzuVm3SHuPuial3wOMVUSbbJujBtUqPkB3Uz1ruTVzibqZ74FTnBKibNCq67qBcE/132","invite_by":"wxid_tnizkijej5uq22","nickname":"小安","wxid":"wxid_uwbxwbt4ihjd22"}
|
|||
|
|
|||
|
var m = member_list[i] as Dictionary<string, object>;
|
|||
|
if (m == null) continue;
|
|||
|
wxids.Add(m["wxid"]?.ToString());
|
|||
|
}
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var client = WechatClient.GetApi(user);
|
|||
|
wxids.Sort(StringComparer.CurrentCulture);
|
|||
|
|
|||
|
var md5Text = Common.GetMD5(string.Join(",", wxids));
|
|||
|
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
//查找 md5 的缓存,不存在则返回null
|
|||
|
object item = cache[md5Text];
|
|||
|
cache.Insert(md5Text, data["room_wxid"].ToString(), null, DateTime.Now.AddSeconds(8), Cache.NoSlidingExpiration);
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_ROOM_DEL_NOTIFY_MSG://群成员删除通知
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_CONTACT_ADD_NOITFY_MSG://好友新增通知
|
|||
|
{
|
|||
|
//{"data":{"account":"dx21101","avatar":"http://wx.qlogo.cn/mmhead/ver_1/we0fG4Y8r0NjN7GUSHFXCu0qicqZf2KKHBeRKIByBNAvvJ8KcgeaomwSju0AqUicJztS6oiaEzDVJiblnZmrJQTibDdPyk7fwzwPbS5JxwibS6POI/0","city":"","country":"","nickname":"秒单客-小张","remark":"","sex":1,"wxid":"wxid_g9r17s6hdb6w22"},"type":11102}
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
//var account = data["account"].ToString();//新用户账号
|
|||
|
//var avatar = data["avatar"].ToString();//新用户头像
|
|||
|
var nickname = data["nickname"].ToString();//新用户昵称
|
|||
|
//var sex = int.Parse(data["sex"].ToString());//性别
|
|||
|
var wxid = data["wxid"].ToString();//新用户微信id
|
|||
|
|
|||
|
#region 添加好友成功
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var msg = new WechatNewFriend();
|
|||
|
msg.Cmd = PCRobotCMD.newfriend;
|
|||
|
msg.RobotUsername = user.Wxid;
|
|||
|
msg.RobotUsernick = user.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.FromUserName = wxid;
|
|||
|
msg.FromUserNick = nickname;
|
|||
|
socketClient.Send(msg);
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_CONTACT_DEL_NOTIFY_MSG://群成员删除通知
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_TIMELINE_MSG://获取朋友圈首页
|
|||
|
{
|
|||
|
#region 数据
|
|||
|
//{"data":{"advertiseCount":1,"advertiseList":[{"adInfo":{"string":"<?xml version='1.0' encoding='utf-8' ?>\n<ADInfo>\n\t<viewid>51Hky7pHhu%2BI0D6z6NGPpR15cypIpKvA%2B/WmCm0cjdoElUITIAFetWDTQN4vCIoS6ghxwuN0AHfz/Dd5uv0MOe0BAnqUde7RfcpcLvnU4pKwzvPOf09bD57/YLjKvDkkbHks%2BFQ8yTrjpqCQtrqKXVDJrR%2B/6t2%2BIcLfsbPDz%2B6jDc8gjbkn6ADHUW7tOArlAowZ3aNCjtfk5fBHzow8vwBuatiNIeQQySyetV69UB2exOBcR42IFoB%2BgD0ygOTBlYMnaiQtzS0upkBl4NSPHN9xen3lITxROz3Bj6ZRkqrlzrEJjj%2B%2BX0NTbO/ZduF8Fnsq47hKzFn3RzMmrMiMmRT%2BiJpTD3Tz/rwtYsS3tGTCmbneafTW0o%2B9uinX5C2QK45tKlFSDlAlYqEtepY51N2mrvp5aK8wd1A1dotcSJdRCv%2Bibez/B8KZud5p9NbSvb9U/x10HSpgNsWnqqfBc6UOyLTOR6sULIq3RYG3hO4ttiHsTqJ19OXmIJ18uKdRAwm0W%2B1UgpgsirdFgbeE7i22IexOonX0eoikpovBL67pm9Ry5rKfmdqujuKJIrqR7yAiM9QkVyqfLisGkW2BGdifn1WRZE2eZtz1TIwtr5RIz4fr%2BzWthJ%2B8b4mUiIvRnrvbxY2kLOMTQyaDsIwWCrVVcQmRZEtem7CV9y12Npy2t0P5SYgr9G%2B5LOMNBx0okUHnjJOesdHfVxBOI3ioGMEqURMdxzGKUPEh9cdQZT13OIB60lApJboBtPiusgt2pGeKIWX2go19ctm1ASL/nffmXkqCH/XmhdQh01bx83nD%2BNuVWBsGt7Z9yUJAhgfU2HILNweMjSHCmbneafTW0pglqgouP3YMJyDHsaOablYrOJ7sA5PLjhGJilyjGpsHWO0hq0fn1/6LGFYxykl1OjPcIHGFfpCHLlbaL5ZjZUhhz/C8BOcXNC6vq3hZ1wVbOWBOpKjp0CGTuQXg3A4f0G8kXEJdvrlDsxGnYDSTXSrxeCw34BZX0wRD99w7JmukOIQEjoOL%2BMDlCU9gndnYr00zc1cEpTNCjhbE8KAYJBZdF2AjSLljq1308TAxRKbRrFcgG%2BJiF686OhCWD1v6PpvXQtcAwKCuVWFqytU8Snl/XGkfveCEdkXHGR%2B5wQVpN8L6zzMEG%2BrGdae643cmQb9QbyClCgocIhr5xdxaJXPYn59VkWRNnrbPaWePalQctVk7VbyIJUOzQwHaGlZwKOw/ReHEmsuRdunnXbmrEQRK31EdpPUtw%2BrkaExxbpeSMYgHQ4BoIWvqWUJyOKxwPFyEo3Cvbyx3zs8YEIDR6RYMyvLMeZ593lX52lJXIuf7ZRO6kWIOBbYENyusw81Q0PWttkAUANcUYTIqQmpJ%2Bl18qm66d0POojRw0yPqMI/iLYxfYPjGjxhb1M2zfU9m6L39x5/vp8yN12xfT20Zd3eyVauOFxOb9E3aTDebYH0%2BxbxNh/vbG4SZj9HCaNr0679ITrLZHYXBMDckEiDLDwR8Kw37v7qSMMW8TYf72xuEmY/Rwmja9Ou/SE6y2R2FwX8i5x5zY5Tl5uNpEpeEFoAqMk%2BZ6vqgE02GIVVhiy4hc5/GHP79qRrm42kSl4QWgCoyT5nq%2BqATdoRifFt8u0d30DLV9rACLenS8pBrppyFKjJPmer6oBPjILouBe1NDxY74ukW5A91YGOCIYWrgLdFGxIyh6vP7RAgb9YYpXW87wJPd786IpFTQpa3wkYMP8KZud5p9NbSAzTjUvENRy8XeTjKE1qKCzYwKm%2BvgnNWRTCLfefMjKvCmbneafTW0gM041LxDUcvxxDLN%2BQh1dSf3TphpbYWRLoHQm6WpwmDgyX2IiPt3jiN3ZxN%2BdG6zHs8QtlMdETD2u/GbqAmsR47GXT6%2Bd9vzfByhJ%2BosnjffLJWXJQXjVhUDTGN5mqOpQk1YhZbSJ7Gl3YPDnKBt%2BrT/HSDJ%2Bl2Rgf0drS1gCA4TsUAXLNhv0/py7JV78weUyrsXfLMLC3iynBrDlriy8KB/M/vFXqo7T6zykyz/ykKHC9fpUczj0/%2BiYQb3B2u4h%2B9QlK5J0kaYbM9DtGs1EUIRKIqCLzwHz3wEe%2BlG/jvSp462KvE8TSFOCswenppPI1a65q11Y%2BlO8ydxJ0yKldx4NgHf19YAWnJZAl%2BTTbsgLcaCUPrWS5lz1ndLvPYPcbyJmoyss54YkoMCaTa42hTuW08DkxX84NfS0ImGwrDzyMDV8pAyc7VLiJ3BxfADIWMj9C3nfYHWkD5oDTvOHbrCS0oVJZ1y61s4g4lI3FyoWh1%2Bszkttr3tqOGmeY5mCk2pNpt19zSXB4%2B2Et6MfY5rX9USLkHs0PPXGYe6wXuyT4Luymi/Txdbmkt1cP7P6F2o6H5ahvnzLtULV02HVfYj7vBsaMStTPgp8Bsmt1Dyphn5nqGAASmhUDfXW24V7WKihAkyAHELyMNe%2BsOg6bsTHBBKNGKPGzR5p2LY9gYFVY5/qmRA5d8MkAWlZENvXpAfbBdhejCJLU4lQBGZ0eDGmGOZuaA%2BQ6RMJncv%2BR%2BTAP9TvkNsP5x7Yko/BM2IAtCWoMdFGbhobUaNtVkkvCOc%2BwkwlIOXrrn2yrxTx37JNMsN7RFYiEZJNViWH7dXQlLiz9MOANT8H5t5HmgKEctOb1WDmztxkdBkLAejjMY20ZfUiVjwKSEkrrfw03HXk/sbeLtUsrb7nfeb7wpBi2sU7b8X6/dzpHX9DXDm2i1pOR5s/Ng0yeD/6qROyXiFZLD66XRp7//JznTqFw2TWYDkazuFWAyB7ElWqOVd/DOs%2BCAoORBxxiRhbApMiOYRyTumUb%2B%2B6Zl4qOepsczZ29vS6uVWWJ0p0rEOI2RhVZ7btZ%2Ba3lZVRIf/hRMwBoyRlWyRWLyfEmArfOGNYSa4BdrmxeeV0tdIpmLBesqH%2BfzlDeIDk7mYMk0FEAe2cpwAcbBhbqspuYIxkrOTmw00bthKfiRChNDe%2BQee7ugp8pqvuhoz7xLRUD1lTtlqG/NViTumUb%2B%2B6Zl2S6T12VBePmOOxGKAf3beJ%2BnBqYMHgKRlN2Tkq4GQ/YgJNrT9CcDRl8GQ1XD0o6U3YyDCdZIJrEUeI/uSzP6ju5XimNM1qfeiTty4z6jWFh99u%2BfIUuDvxOIp4XGKpLpJ07p9SXuh1Zy%2Bo/31T9J1fWVO2Wob81W5KyA3Dyc2bO1jtlhgW9eAI47EYoB/dt4FQiAo2J5oyUX0qTwlZ90N6Lln5bTToih/GwuFeIuyfUpNqTabdfc0rQ0s06SldO6V93k1aTZhOJHm3uL1CBBMvhQgjxSWRtrp3DKjyMPfVpYPVWi5Ngj3Y5aIpCQuZXtqruCuUkaNnhqKrfImYGgGKmrjkQD2h3urPY6VezxI9OHcs%2BXYnYPN4PKT1x7h8SO2qEn264xwBl1V6YUdN1FXoZsAsPrnFzWcz5uqxEiT0sch%2BHvj9RxWk0HOHHe5NbmAMHuVM8G7t4hl1NT6tf4sD/1uHZDwAxdwJtX0l2GsaAX7It4cWddtlJ5lscfXYNcmftrlkis981E5N9H4zW918IEMg6uvzSz4T8Zay2P9sMQsCF%2Ba3w6VCY0ZuwxbJqN1QaGDzVOAqmJCgwXZe3RYp2/gyNcSjjkQtBUKhqP42BdVQgg%2BXSnthkM2BlKHdHbibjVedFgMtLy4jXQ0jD%2BwHpBztRpAg5ko9PX7d2z/pJt8YzG3w6JRH3V0XrfkwE0SMU46R%2BTSPmgMgjWPkNxa/m2uLgcrsVBMP%2BUoqGYb3MkzDDj01vctVPDoYnT
|
|||
|
#endregion
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie;
|
|||
|
if (!user.IsGetCircle) return;
|
|||
|
try
|
|||
|
{
|
|||
|
//var _data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
|
|||
|
//if (_data == null) return;
|
|||
|
|
|||
|
//foreach (KeyValuePair<string, object> item in _data)
|
|||
|
//{
|
|||
|
// var wxid = item["wxid"]?.ToString();
|
|||
|
|
|||
|
//}
|
|||
|
//for (int i = 0; i < _data.Count; i++)
|
|||
|
//{
|
|||
|
// var item = _data[i] as Dictionary<string, object>;
|
|||
|
|
|||
|
// var wxid = item["wxid"]?.ToString();
|
|||
|
|
|||
|
|
|||
|
//}
|
|||
|
|
|||
|
user.CircleData = recvData;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{ }
|
|||
|
finally
|
|||
|
{
|
|||
|
user.IsGetCircle = false;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_AUTO_AUTH_MINIAPP_LOGIN://小程序自动授权登录
|
|||
|
{
|
|||
|
//{"data":{"appid":"wxde8ac0a21135c07d","code":"051QFNkl2pCwt748wlol2XID1B4QFNk8"},"type":11136}
|
|||
|
|
|||
|
var appid = data["appid"].ToString();
|
|||
|
var code = data["code"].ToString();
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
if (user.AutoAuthLoginMiNiApps.ContainsKey(appid))
|
|||
|
user.AutoAuthLoginMiNiApps.Remove(appid);
|
|||
|
user.AutoAuthLoginMiNiApps.Add(appid, code);
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_POST_MSG://发送朋友圈
|
|||
|
{
|
|||
|
#region 数据结构
|
|||
|
/*
|
|||
|
{"data":{"baseResponse":{"ret":0},"snsObject":{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1627522835,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13652651078544265545,"isNotRichText":0,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"、","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD4xMzY1MjY1MTA3ODU0NDI2NTU0NTwvaWQ+PHVzZXJuYW1lPnd4aWRfdnY3cmV2N2E0eHBqMjI8L3VzZXJuYW1lPjxjcmVhdGVUaW1lPjE2Mjc1MjI4MzU8L2NyZWF0ZVRpbWU+PGNvbnRlbnREZXNjU2hvd1R5cGU+MDwvY29udGVudERlc2NTaG93VHlwZT48Y29udGVudERlc2NTY2VuZT4zPC9jb250ZW50RGVzY1NjZW5lPjxwcml2YXRlPjA8L3ByaXZhdGU+PGNvbnRlbnREZXNjPui/meS4quS9oOiCr+WumuS4jeefpemBk+aIkeeOsOWcqOaDs+eahEE8L2NvbnRlbnREZXNjPjxzaWdodEZvbGRlZD4wPC9zaWdodEZvbGRlZD48c2hvd0ZsYWc+MDwvc2hvd0ZsYWc+PGFwcEluZm8+PGlkPjwvaWQ+PHZlcnNpb24+PC92ZXJzaW9uPjxhcHBOYW1lPjwvYXBwTmFtZT48aW5zdGFsbFVybD48L2luc3RhbGxVcmw+PGZyb21Vcmw+PC9mcm9tVXJsPjxpc0ZvcmNlVXBkYXRlPjA8L2lzRm9yY2VVcGRhdGU+PC9hcHBJbmZvPjxzb3VyY2VVc2VyTmFtZT48L3NvdXJjZVVzZXJOYW1lPjxzb3VyY2VOaWNrTmFtZT48L3NvdXJjZU5pY2tOYW1lPjxzdGF0aXN0aWNzRGF0YT48L3N0YXRpc3RpY3NEYXRhPjxzdGF0RXh0U3RyPjwvc3RhdEV4dFN0cj48Q29udGVudE9iamVjdD48Y29udGVudFN0eWxlPjI8L2NvbnRlbnRTdHlsZT48dGl0bGU+PC90aXRsZT48ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj48bWVkaWFMaXN0PjwvbWVkaWFMaXN0Pjxjb250ZW50VXJsPjwvY29udGVudFVybD48L0NvbnRlbnRPYmplY3Q+PGFjdGlvbkluZm8+PGFwcE1zZz48bWVzc2FnZUFjdGlvbj48L21lc3NhZ2VBY3Rpb24+PC9hcHBNc2c+PC9hY3Rpb25JbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":1112},"objectOperations":{"buffer":"","iLen":0},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wxid_vv7rev7a4xpj22","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0},"spamTips":""},"type":11148}
|
|||
|
*/
|
|||
|
#endregion
|
|||
|
|
|||
|
if (data.ContainsKey("snsObject"))
|
|||
|
{
|
|||
|
var snsObject = data["snsObject"] as Dictionary<string, object>;
|
|||
|
if (snsObject.ContainsKey("id"))
|
|||
|
{
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
user.SendCircleId = snsObject["id"].ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_COMMENT_MSG://朋友圈评论
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_LIKE_MSG://朋友圈点赞
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_UPLOAD_IMAGE_MSG://朋友圈上传图片
|
|||
|
{
|
|||
|
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGYkibHF8s3Pu0RAQNicdgRVsn/0"},"clientId":"wxid_vv7rev7a4xpj22_1627486860","id":0,"path":"D:\\PCRobot\\bin\\Debug\\Cache\\0728114016639.png","startPos":16627,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGYkibHF8s3Pu0RAQNicdgRVsn/150"}],"totalLen":16627,"type":2},"type":11149}
|
|||
|
|
|||
|
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGa9quIRWhDvpnuvgkSLwxaz/0"},"clientId":"wxid_vv7rev7a4xpj22_1627491212","id":0,"path":"","startPos":59023,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGxEyianCKF1vsqwWh9GicmTGa9quIRWhDvpnuvgkSLwxaz/150"}],"totalLen":59023,"type":2},"type":11149}
|
|||
|
|
|||
|
//{"data":{"baseResponse":{"ret":0},"bufferUrl":{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGytHnYnRDfnZ3JnOPBfd4kopkfT9Kic2vlQibkXia04Zweib/0"},"clientId":"wxid_vv7rev7a4xpj22_1627523859","id":0,"path":"D:\\公司项目\\fl_system\\PCRobot\\bin\\Debug\\Cache\\0729095735481.jpg","startPos":47326,"thumbUrlCount":1,"thumbUrls":[{"type":1,"url":"http://mmsns.qpic.cn/mmsns/PiajxSqBRaELvAyQVFmJhGytHnYnRDfnZ3JnOPBfd4kopkfT9Kic2vlQibkXia04Zweib/150"}],"totalLen":47326,"type":2},"type":11149}
|
|||
|
|
|||
|
LogHelper.GetSingleObj().Info(new StackTrace().GetFrame(0).GetMethod().Name, $"正在上传朋友圈图片:" + recvData);
|
|||
|
|
|||
|
var upLoadImage = JsonConvert.DeserializeObject<UpLoadImage>(recvData);
|
|||
|
if (upLoadImage != null)
|
|||
|
{
|
|||
|
if (upLoadImage.data.startPos == upLoadImage.data.totalLen)
|
|||
|
{
|
|||
|
var path = upLoadImage.data.path;
|
|||
|
var url = upLoadImage.data.bufferUrl.url;
|
|||
|
if (!string.IsNullOrWhiteSpace(path) && !string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
if (user.UpLoadImages.ContainsKey(path))
|
|||
|
user.UpLoadImages.Remove(path);
|
|||
|
user.UpLoadImages.Add(path, url);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case MsgType.MT_SNS_TIMELINE_USER_MSG://获取指定用户的朋友圈
|
|||
|
{
|
|||
|
#region 数据样式
|
|||
|
/*
|
|||
|
{"data":{"baseResponse":{"ret":207},"continueId":0,"firstPageMd5":"b7e1f61580104448","limitedId":0,"newRequestTime":1627613128,"objectCount":1,"objectCountForSameMd5":1,"objectList":[{"blackListCount":0,"commentCount":0,"commentUserListCount":0,"createTime":1627612789,"deleteFlag":0,"extFlag":1,"groupCount":0,"groupUserCount":0,"id":13653405663930290388,"isNotRichText":1,"likeCount":0,"likeFlag":0,"likeUserListCount":0,"nickname":"先森吳","noChange":0,"objectDesc":{"buffer":"PFRpbWVsaW5lT2JqZWN0PjxpZD48IVtDREFUQVsxMzY1MzQwNTY2MzkzMDI5MDM4OF1dPjwvaWQ+PHVzZXJuYW1lPjwhW0NEQVRBW3d1amlhaHVhMDg3Nl1dPjwvdXNlcm5hbWU+PGNyZWF0ZVRpbWU+PCFbQ0RBVEFbMTYyNzYxMjc4OV1dPjwvY3JlYXRlVGltZT48Y29udGVudERlc2NTaG93VHlwZT4wPC9jb250ZW50RGVzY1Nob3dUeXBlPjxjb250ZW50RGVzY1NjZW5lPjA8L2NvbnRlbnREZXNjU2NlbmU+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48Y29udGVudERlc2M+PCFbQ0RBVEFb5L2g6IKv5a6a5LiN55+l6YGT5oiR546w5Zyo5oOz6KGo6L6+5LuA5LmIXV0+PC9jb250ZW50RGVzYz48Y29udGVudGF0dHI+PCFbQ0RBVEFbMF1dPjwvY29udGVudGF0dHI+PHNvdXJjZVVzZXJOYW1lPjwvc291cmNlVXNlck5hbWU+PHNvdXJjZU5pY2tOYW1lPjwvc291cmNlTmlja05hbWU+PHN0YXRpc3RpY3NEYXRhPjwvc3RhdGlzdGljc0RhdGE+PHdlYXBwSW5mbz48YXBwVXNlck5hbWU+PC9hcHBVc2VyTmFtZT48cGFnZVBhdGg+PC9wYWdlUGF0aD48dmVyc2lvbj48IVtDREFUQVswXV0+PC92ZXJzaW9uPjxkZWJ1Z01vZGU+PCFbQ0RBVEFbMF1dPjwvZGVidWdNb2RlPjxzaGFyZUFjdGlvbklkPjwvc2hhcmVBY3Rpb25JZD48aXNHYW1lPjwhW0NEQVRBWzBdXT48L2lzR2FtZT48bWVzc2FnZUV4dHJhRGF0YT48L21lc3NhZ2VFeHRyYURhdGE+PHN1YlR5cGU+PCFbQ0RBVEFbMF1dPjwvc3ViVHlwZT48cHJlbG9hZFJlc291cmNlcz48L3ByZWxvYWRSZXNvdXJjZXM+PC93ZWFwcEluZm8+PGNhbnZhc0luZm9YbWw+PC9jYW52YXNJbmZvWG1sPjxDb250ZW50T2JqZWN0Pjxjb250ZW50U3R5bGU+PCFbQ0RBVEFbMV1dPjwvY29udGVudFN0eWxlPjxjb250ZW50U3ViU3R5bGU+PCFbQ0RBVEFbMF1dPjwvY29udGVudFN1YlN0eWxlPjx0aXRsZT48L3RpdGxlPjxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPjxjb250ZW50VXJsPjwvY29udGVudFVybD48bWVkaWFMaXN0PjxtZWRpYT48aWQ+PCFbQ0RBVEFbMTM2NTM0MDU2NjQ1NTkyMzkzODZdXT48L2lkPjx0eXBlPjwhW0NEQVRBWzJdXT48L3R5cGU+PHRpdGxlPjwvdGl0bGU+PGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+PHByaXZhdGU+PCFbQ0RBVEFbMF1dPjwvcHJpdmF0ZT48dXJsIHR5cGU9IjEiIG1kNT0iNDI1YTRiODEyNjQ2NzQwY2Y3MzlmYWI4Y2E2ZGIyNWUiPjwhW0NEQVRBW2h0dHA6Ly9zaG1tc25zLnFwaWMuY24vbW1zbnMvaWNySERtdkRpYjB4bUhUbkFPODJKSVVjaDFUVmUySWFtbDdYWHdaSlVuUWpZU3dsSjVNa09iQXlYRkpUbVNTbk5DZmNITFgyNE9RUncvMF1dPjwvdXJsPjx0aHVtYiB0eXBlPSIxIj48IVtDREFUQVtodHRwOi8vc2htbXNucy5xcGljLmNuL21tc25zL2ljckhEbXZEaWIweG1IVG5BTzgySklVY2gxVFZlMklhbWw3WFh3WkpVblFqWVN3bEo1TWtPYkF5WEZKVG1TU25OQ2ZjSExYMjRPUVJ3LzE1MF1dPjwvdGh1bWI+PHZpZGVvRHVyYXRpb24+PCFbQ0RBVEFbMC4wXV0+PC92aWRlb0R1cmF0aW9uPjxzaXplIHRvdGFsU2l6ZT0iMTAxOTIuMCIgd2lkdGg9IjEwODAuMCIgaGVpZ2h0PSIyMzQwLjAiPjwvc2l6ZT48L21lZGlhPjwvbWVkaWFMaXN0PjwvQ29udGVudE9iamVjdD48YWN0aW9uSW5mbz48YXBwTXNnPjxtZWRpYVRhZ05hbWU+PC9tZWRpYVRhZ05hbWU+PG1lc3NhZ2VFeHQ+PC9tZXNzYWdlRXh0PjxtZXNzYWdlQWN0aW9uPjwvbWVzc2FnZUFjdGlvbj48L2FwcE1zZz48L2FjdGlvbkluZm8+PGFwcEluZm8+PGlkPjwvaWQ+PC9hcHBJbmZvPjxsb2NhdGlvbiBwb2lDbGFzc2lmeUlkPSIiIHBvaU5hbWU9IiIgcG9pQWRkcmVzcz0iIiBwb2lDbGFzc2lmeVR5cGU9IjAiIGNpdHk9IiI+PC9sb2NhdGlvbj48cHVibGljVXNlck5hbWU+PC9wdWJsaWNVc2VyTmFtZT48c3RyZWFtdmlkZW8+PHN0cmVhbXZpZGVvdXJsPjwvc3RyZWFtdmlkZW91cmw+PHN0cmVhbXZpZGVvdGh1bWJ1cmw+PC9zdHJlYW12aWRlb3RodW1idXJsPjxzdHJlYW12aWRlb3dlYnVybD48L3N0cmVhbXZpZGVvd2VidXJsPjwvc3RyZWFtdmlkZW8+PC9UaW1lbGluZU9iamVjdD4=","iLen":2060},"objectOperations":{"buffer":"CAA=","iLen":2},"preDownloadInfo":{"noPreDownloadRange":"","preDownloadNetType":0,"preDownloadPercent":0},"referId":0,"referUsername":"","snsRedEnvelops":{"reportId":0,"reportKey":0,"resourceId":0,"rewardCount":0},"username":"wujiahua0876","weAppInfo":{"appId":0,"mapPoiId":"","redirectUrl":"","score":0,"showType":0,"userName":""},"withUserCount":0,"withUserListCount":0}],"objectTotalCount":5,"retTips":"朋友仅展示最近一个月的朋友圈","serverConfig":{"copyAndPasteWordLimit":100,"postMentionLimit":10},"snsUserInfo":{"snsBgImgId":"http://szmmsns.qpic.cn/mmsns/icrHDmvDib0xnEAtnSHHGziac6GNMlhWZK61YORztv9pl7x3AeNWibkAcdJstckibqwBFVFcFO9ovscc/0","snsBgObjectId":13404086805597261983,"snsFlag":1,"snsFlagEx":6273}},"type":11150}
|
|||
|
*/
|
|||
|
#endregion
|
|||
|
|
|||
|
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
|
|||
|
if (user == null)
|
|||
|
return;
|
|||
|
|
|||
|
if (data.ContainsKey("objectList"))
|
|||
|
{
|
|||
|
var objectList = data["objectList"] as ArrayList;
|
|||
|
if (objectList != null && objectList.Count != 0)
|
|||
|
{
|
|||
|
var result = objectList[0] as Dictionary<string, object>;
|
|||
|
if (result != null)
|
|||
|
{
|
|||
|
if (result.ContainsKey("username"))
|
|||
|
{
|
|||
|
var uname = result["username"].ToString();
|
|||
|
if (user.GetUserCircles.ContainsKey(uname))
|
|||
|
user.GetUserCircles.Remove(uname);
|
|||
|
user.GetUserCircles.Add(uname, recvData);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 本地解密dat图片
|
|||
|
/// </summary>
|
|||
|
/// <param name="FileName"></param>
|
|||
|
/// <param name="XorKey"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string DecodeImage(string FileName, byte XorKey, string DecodeImagePath)
|
|||
|
{
|
|||
|
var data = File.ReadAllBytes(FileName);
|
|||
|
for (int i = 0; i < data.Length; i++)
|
|||
|
data[i] = Convert.ToByte(data[i] ^ XorKey);
|
|||
|
//var path = FileName.Replace(Path.GetFileName(FileName), Path.GetFileNameWithoutExtension(FileName) + ".jpg");
|
|||
|
File.WriteAllBytes(DecodeImagePath, data);
|
|||
|
return DecodeImagePath;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取微信的uin的值
|
|||
|
/// </summary>
|
|||
|
/// <param name="pid"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public static string GetUin(int pid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
Process[] processes = Process.GetProcesses();
|
|||
|
foreach (Process process in processes)
|
|||
|
{
|
|||
|
if (process.Id == pid)
|
|||
|
{
|
|||
|
foreach (ProcessModule processModule in process.Modules)
|
|||
|
{
|
|||
|
if (processModule.ModuleName == "WeChatWin.dll")
|
|||
|
{
|
|||
|
//微信基址
|
|||
|
var WeChatWinBaseAddress = processModule.BaseAddress;
|
|||
|
//Console.WriteLine("微信基址:\t" + "0x" + ((int)(processModule.BaseAddress)).ToString("X8") + Environment.NewLine);
|
|||
|
var WxNameAddress = WeChatWinBaseAddress + PcOffSet;
|
|||
|
var uinStr = Common.GetString(process.Handle, WxNameAddress, 4);
|
|||
|
Console.WriteLine($"uinStr = {uinStr}");
|
|||
|
return uinStr;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
return string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
// 关闭回调
|
|||
|
static void WxCloseCallback(uint dwClientId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == dwClientId && f.Value.Type == WechatType.Xiaoxie).Value;
|
|||
|
if (v != null)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"WxCloseCallback关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
|
|||
|
WechatClient.RemoveUser(v);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
public Wechat_Xiaoxie(WechatUser User) : base(User) { }
|
|||
|
|
|||
|
public override void SendMessage(string wxid, string message)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = string.Empty;
|
|||
|
message = message.Replace("\r\n", "\n");
|
|||
|
if (Common.isXML(message))
|
|||
|
{
|
|||
|
//var msgs = Regex.Matches(message, "(<.*?>)(.*?)(</.*?>)");
|
|||
|
//foreach (Match item in msgs)
|
|||
|
//{
|
|||
|
// if (item.Success && !string.IsNullOrEmpty(item.Groups[2].Value) && !item.Groups[2].Value.StartsWith("<![CDATA["))
|
|||
|
// {
|
|||
|
// var temp = item.Groups[1].Value + "<![CDATA["+item.Groups[2]+"]]>" + item.Groups[3];
|
|||
|
// message = message.Replace(item.Groups[1].Value,temp);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//<appid>wxfedd75bfcbbcd58c</appid>
|
|||
|
//<appid>wx13e41a437b8a1d2e</appid>
|
|||
|
//<pagepath>pages/index/index.html?orderid=[领取地址]</pagepath>
|
|||
|
if (Regex.IsMatch(message, @"<appid>(?<appid>[^<]+)</appid>") || Regex.IsMatch(message, @"<pagepath>(.+?)</pagepath>"))
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_XMLMSG, data = new { to_wxid = wxid, xml = Common.XMLDispose(message.Replace("&", "&")) } });
|
|||
|
else
|
|||
|
{
|
|||
|
message = message.Replace("&", "&");
|
|||
|
var title = string.Empty;
|
|||
|
var desc = string.Empty;
|
|||
|
var url = string.Empty;
|
|||
|
var image_url = string.Empty;
|
|||
|
var reg = Regex.Match(message, @"<title>(?<标题>[\w\W]+?)</title>");
|
|||
|
if (reg.Success) title = reg.Groups["标题"].Value;
|
|||
|
reg = Regex.Match(message, @"<des>(?<介绍>[\w\W]+?)</des>");
|
|||
|
if (reg.Success) desc = reg.Groups["介绍"].Value;
|
|||
|
reg = Regex.Match(message, @"<url>(?<链接>[\w\W]+?)</url>");
|
|||
|
if (reg.Success) url = reg.Groups["链接"].Value;
|
|||
|
reg = Regex.Match(message, @"<thumburl>(?<图片链接>[\w\W]+?)</thumburl>");
|
|||
|
if (reg.Success) image_url = reg.Groups["图片链接"].Value;
|
|||
|
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_LINKMSG, data = new { to_wxid = wxid, title = $"{title.XMLReplace()}", desc = $"{desc.XMLReplace()}", url = url.XMLReplace(), image_url = image_url.XMLReplace() } });
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var atUsername = new List<string>();
|
|||
|
var regs = Regex.Matches(message, @"\[@([^\]]+?)\]");
|
|||
|
var flag = true;
|
|||
|
if (wxid.Contains("@chatroom"))
|
|||
|
{
|
|||
|
//[@wujiahua0876]你懂得,我只是测试一下
|
|||
|
|
|||
|
foreach (Match item in regs)
|
|||
|
{
|
|||
|
atUsername.Add(item.Groups[1].Value.Trim());
|
|||
|
}
|
|||
|
if (atUsername.Count != 0)
|
|||
|
{
|
|||
|
flag = false;
|
|||
|
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "{$@}");
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CHATROOM_ATMSG, data = new { to_wxid = wxid, content = message, at_list = atUsername.ToArray() } });
|
|||
|
}
|
|||
|
}
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "");
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_TEXTMSG, data = new { to_wxid = wxid, content = message } });
|
|||
|
}
|
|||
|
}
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取朋友圈
|
|||
|
/// </summary>
|
|||
|
/// <param name="circleId"></param>
|
|||
|
public override void FindCircles(string circleId, string username)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (!string.IsNullOrWhiteSpace(username))
|
|||
|
{
|
|||
|
#region 获取指定用户朋友圈数据
|
|||
|
try
|
|||
|
{
|
|||
|
if (!User.GetUserCircles.ContainsKey(username))
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_TIMELINE_USER_MSG, data = new { username = username, first_page_md5 = "", max_id = circleId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(30);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.GetUserCircles.ContainsKey(username))
|
|||
|
{
|
|||
|
var res = User.GetUserCircles[username];
|
|||
|
|
|||
|
#region 修正数据格式
|
|||
|
var jsonDic = HttpExtend.JsonToDictionary(res);
|
|||
|
var data = jsonDic["data"] as Dictionary<string, object>;
|
|||
|
//var firstPageMd5 = data["firstPageMd5"].ToString();
|
|||
|
//var data = new { FirFirstPageMd5 = firstPageMd5, SnsObjectsCount = long.Parse(HttpExtend.GetTimeStamp()), };
|
|||
|
|
|||
|
var cirCleInfoOriList = new List<CirCleInfoOri>();
|
|||
|
if (data.ContainsKey("objectList"))
|
|||
|
{
|
|||
|
var objectList = data["objectList"] as ArrayList;
|
|||
|
if (objectList != null && objectList.Count != 0)
|
|||
|
{
|
|||
|
for (int i = 0; i < objectList.Count; i++)
|
|||
|
{
|
|||
|
var obj = JsonConvert.SerializeObject(objectList[i]);
|
|||
|
if (obj != null)
|
|||
|
{
|
|||
|
var cInfo = JsonConvert.DeserializeObject<CirCleInfoOri>(obj);
|
|||
|
if (cInfo != null)
|
|||
|
{
|
|||
|
cirCleInfoOriList.Add(cInfo);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
cirCleInfoOriList = cirCleInfoOriList.OrderByDescending(f => f.createTime).ToList();
|
|||
|
|
|||
|
List<Dictionary<string, object>> _objs = new List<Dictionary<string, object>>();
|
|||
|
|
|||
|
for (int i = 0; i < cirCleInfoOriList.Count; i++)
|
|||
|
{
|
|||
|
var tmp = HttpHelper.ObjectToJson(cirCleInfoOriList[i]);
|
|||
|
var dic = HttpExtend.JsonToDictionary(tmp);
|
|||
|
_objs.Add(dic);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
if (cirCleInfoOriList != null && cirCleInfoOriList.Count != 0)
|
|||
|
return HttpHelper.ObjectToJson(new { data = new { objectList = new List<CirCleInfoOri>() { cirCleInfoOriList[0] } } });
|
|||
|
return string.Empty;
|
|||
|
}
|
|||
|
Thread.Sleep(400);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCircleData;
|
|||
|
msg.Data = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
User.GetUserCircles.Remove(username);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
#region 朋友圈首页
|
|||
|
if (!User.IsGetCircle)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_TIMELINE_MSG, data = new { max_id = circleId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
User.IsGetCircle = true;
|
|||
|
}
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
Thread.Sleep(1000);
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(30);
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetCircle)
|
|||
|
{
|
|||
|
return User.CircleData;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCircleData;
|
|||
|
msg.Data = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 自动授权登录小程序
|
|||
|
/// </summary>
|
|||
|
/// <param name="appid"></param>
|
|||
|
public override void AutoAuthMiniAPPLogin(string appid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_AUTO_AUTH_MINIAPP_LOGIN, data = new { appid = appid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.AutoAuthLoginMiNiApps.ContainsKey(appid))
|
|||
|
{
|
|||
|
return User.AutoAuthLoginMiNiApps[appid];
|
|||
|
}
|
|||
|
Thread.Sleep(400);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvMiniAppCode;
|
|||
|
msg.Data = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 发送朋友圈
|
|||
|
/// </summary>
|
|||
|
/// <param name="xmlmsg"></param>
|
|||
|
public override void SendCircle(string xmlmsg)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_POST_MSG, data = new { object_desc = xmlmsg } });
|
|||
|
User.SendCircleId = string.Empty;
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (!string.IsNullOrWhiteSpace(User.SendCircleId))
|
|||
|
{
|
|||
|
return User.SendCircleId;
|
|||
|
}
|
|||
|
Thread.Sleep(400);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCircleReturnId;
|
|||
|
msg.Data = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
User.SendCircleId = string.Empty;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 发送朋友圈评论
|
|||
|
/// </summary>
|
|||
|
/// <param name="circleId"></param>
|
|||
|
/// <param name="content"></param>
|
|||
|
public override void SendCircleComment(string circleId, string content)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_COMMENT_MSG, data = new { object_id = circleId, content = content } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 朋友圈点赞
|
|||
|
/// </summary>
|
|||
|
/// <param name="circleId">朋友圈的object_id</param>
|
|||
|
public override void SendCirclePraise(string circleId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_LIKE_MSG, data = new { object_id = circleId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 朋友圈上传本地图片,返回上传以后返回的地址
|
|||
|
/// </summary>
|
|||
|
/// <param name="path"></param>
|
|||
|
public override void CircleUpLoadImage(string data)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var path = string.Empty;
|
|||
|
Bitmap bitmap = null;
|
|||
|
if (data.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
|
|||
|
{
|
|||
|
HttpHelper http = new HttpHelper();
|
|||
|
var item = http.GetItem(data);
|
|||
|
item.ResultType = CsharpHttpHelper.Enum.ResultType.Byte;
|
|||
|
|
|||
|
using (MemoryStream ms = new MemoryStream(http.GetHtml(item).ResultByte))
|
|||
|
{
|
|||
|
using (Image mImage = Image.FromStream(ms, true))
|
|||
|
{
|
|||
|
bitmap = new Bitmap(mImage);
|
|||
|
path = HttpExtend.MapFile($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
|
|||
|
bitmap.Save(path);
|
|||
|
bitmap.Dispose();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
bitmap = Common.ConvertBase64ToImage(data);
|
|||
|
using (MemoryStream stream = new MemoryStream())
|
|||
|
{
|
|||
|
bitmap.Save(stream, ImageFormat.Jpeg);
|
|||
|
byte[] data1 = new byte[stream.Length];
|
|||
|
stream.Seek(0, SeekOrigin.Begin);
|
|||
|
stream.Read(data1, 0, Convert.ToInt32(stream.Length));
|
|||
|
bitmap = Common.CompressionImage(new MemoryStream(data1), 25);
|
|||
|
}
|
|||
|
|
|||
|
path = HttpExtend.MapFile($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
|
|||
|
|
|||
|
bitmap.Save(path);
|
|||
|
bitmap.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info(new StackTrace().GetFrame(0).GetMethod().Name, $"开始上传朋友圈图片:" + path);
|
|||
|
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_UPLOAD_IMAGE_MSG, data = new { path = path } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(60);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.UpLoadImages.ContainsKey(path))
|
|||
|
{
|
|||
|
return User.UpLoadImages[path];
|
|||
|
}
|
|||
|
Thread.Sleep(400);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCircleUploadImageUrl;
|
|||
|
msg.Data = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
else
|
|||
|
{ }
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, $"上传朋友圈图片异常:{ex.Message},{ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendFile(string wxid, string file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_FILEMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendImage(string wxid, string file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (file.StartsWith("http", StringComparison.InvariantCultureIgnoreCase))
|
|||
|
{
|
|||
|
byte[] ImangByte = null;
|
|||
|
string extension = Path.GetExtension(file);
|
|||
|
extension = string.IsNullOrWhiteSpace(extension) ? ".jpg" : extension;
|
|||
|
ImangByte = new System.Net.WebClient().DownloadData(file);
|
|||
|
byte[] imageHash = new MD5CryptoServiceProvider().ComputeHash(ImangByte);
|
|||
|
|
|||
|
var path = Common.CacheFilePath(User.Wxid, wxid, "IMAGE", Guid.NewGuid().ToString("N"), extension);
|
|||
|
if (!File.Exists(path))
|
|||
|
{
|
|||
|
File.WriteAllBytes(path, ImangByte);
|
|||
|
}
|
|||
|
if (File.Exists(path))
|
|||
|
file = path;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (!File.Exists(file))
|
|||
|
{
|
|||
|
if (Common.IsBase64(file))
|
|||
|
{
|
|||
|
var path = Common.CacheFilePath(User.Wxid, wxid, "IMAGE", Guid.NewGuid().ToString("N"), "jpg");
|
|||
|
if (Common.Base64ToFileAndSave(file, path) && File.Exists(path))
|
|||
|
{
|
|||
|
file = path;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{ }
|
|||
|
}
|
|||
|
}
|
|||
|
var json = string.Empty;
|
|||
|
if (file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase))
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_GIFMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
else
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMGMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendVideo(string wxid, string file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_VIDEOMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void AgreeAddMe(string text)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var v1 = string.Empty;
|
|||
|
var v2 = string.Empty;
|
|||
|
var scene = 0;
|
|||
|
|
|||
|
var reg = Regex.Match(text, @"encryptusername=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
v1 = reg.Groups[1].Value;
|
|||
|
reg = Regex.Match(text, @"ticket=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
v2 = reg.Groups[1].Value;
|
|||
|
reg = Regex.Match(text, @"scene=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
scene = int.Parse(reg.Groups[1].Value);
|
|||
|
|
|||
|
LogHelper.GetSingleObj().Info("------", $"v1 = {v1} v2 = {v1} scene = {scene}");
|
|||
|
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2, scene = scene } });
|
|||
|
//var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendCard(string to_wxid, string card_wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = string.Empty;
|
|||
|
if (card_wxid.Contains("@chatroom"))
|
|||
|
//json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = card_wxid, member_list = new string[] { to_wxid } } });
|
|||
|
{
|
|||
|
InviteMemberToRoom_40Up(card_wxid, to_wxid);
|
|||
|
return;
|
|||
|
}
|
|||
|
else
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARDMSG, data = new { to_wxid = to_wxid, card_wxid = card_wxid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 创建群
|
|||
|
/// </summary>
|
|||
|
/// <param name="wxidData"></param>
|
|||
|
public override void CreateRoom(string wxidData)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(wxidData)) return;
|
|||
|
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
|||
|
if (wxids == null || wxids.Length == 0) return;
|
|||
|
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CREATE_ROOM_MSG, data = wxids });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var wxidstmp = wxids.ToList();
|
|||
|
wxidstmp.Add(User.Wxid);
|
|||
|
wxidstmp.Sort(StringComparer.CurrentCulture);
|
|||
|
|
|||
|
var md5Text = Common.GetMD5(string.Join(",", wxidstmp));
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
var awaitTime = DateTime.Now.AddSeconds(15);
|
|||
|
do
|
|||
|
{
|
|||
|
Thread.Sleep(200);
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
object item = cache[md5Text];
|
|||
|
if (item != null)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
cache.Remove(md5Text);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{ }
|
|||
|
return item.ToString();
|
|||
|
}
|
|||
|
} while (awaitTime >= DateTime.Now);
|
|||
|
return string.Empty;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CreateRoom();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCreateRoom;
|
|||
|
msg.GroupId = result;
|
|||
|
msg.MemberTotal = wxidstmp.Count - 1;
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public override void InviteMemberToRoom_40Up(string groupid, string wxidData)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(wxidData)) return;
|
|||
|
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
|||
|
if (wxids != null && wxids.Length != 0)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = groupid, member_list = wxids } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void InviteMemberToRoom_40Down(string groupid, string wxidData)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(wxidData)) return;
|
|||
|
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
|
|||
|
if (wxids != null && wxids.Length != 0)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_MSG, data = new { room_wxid = groupid, member_list = wxids } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".._.");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void DeleteRoomMember(string wxid, string room)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (room.Contains("@chatroom") || room.Contains("@im.chatroom"))
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DEL_ROOM_MEMBER_MSG, data = new { room_wxid = room, member_list = new string[] { wxid } } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void DecryptImage(string src_file, string dest_file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DECRYPT_IMG_MSG, data = new { src_file = src_file, dest_file = dest_file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void PayTransferConfirm(string data)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var transferid = string.Empty;
|
|||
|
var dic = HttpExtend.JsonToDictionary(data);
|
|||
|
if (dic.ContainsKey("Transferid"))
|
|||
|
transferid = dic["Transferid"].ToString();
|
|||
|
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_WCPAY_MSG, data = new { transferid = transferid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void DeleteFriend(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DEL_FRIEND_MSG, data = new { wxid = wxid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void EditCotacts(string wxid, string remark)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_FRIEND_REMARK_MSG, data = new { wxid = wxid, remark = remark } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void StateOpt(string wxid, bool status)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_CHAT_SESSION_TOP_MSG, data = new { wxid = wxid, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static bool IsZombizRun = false;
|
|||
|
|
|||
|
internal void GetZombiz()//这个方法临时用,以后修改 (不应该用休眠的)
|
|||
|
{
|
|||
|
if (IsZombizRun) return;
|
|||
|
try
|
|||
|
{
|
|||
|
IsZombizRun = true;
|
|||
|
|
|||
|
GetContact();
|
|||
|
var flag = Task.Factory.StartNew<bool>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(15);
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetFriend)
|
|||
|
return true;
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return false;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom") && f.is_zombie == -1).ToList();
|
|||
|
foreach (var item in friends)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARD_XMLMSG, data = new { to_wxid = item.wxid, xml = @"<?xml version=""1.0""?> <msg bigheadimgurl="""" smallheadimgurl="""" username=""[wxid]"" nickname=""[name]"" fullpy=""chulian"" shortpy="""" alias="""" imagestatus=""0"" scene=""0"" province="""" city="""" sign="""" sex=""0"" certflag=""0"" certinfo="""" brandIconUrl="""" brandHomeUrl="""" brandSubscriptConfigUrl="""" brandFlags=""0"" regionCode="""" antispamticket=""[wxid]"" />".Replace("[wxid]", item.wxid).Replace("[name]", ".") } });
|
|||
|
var u = User.Friends.FirstOrDefault(f => f.wxid == item.wxid);
|
|||
|
if (u != null && u.is_zombie == -1)
|
|||
|
{
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
Thread.Sleep(800 + new Random().Next(100, 200));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//#region 发送xx
|
|||
|
//var nmss = new List<List<FriendInfo>>();
|
|||
|
//var mis = new List<FriendInfo>();
|
|||
|
//var count = 30;
|
|||
|
//var rem = friends.Count % count;
|
|||
|
//var num = friends.Count / count;
|
|||
|
|
|||
|
//for (int i = 0; i < friends.Count; i++)
|
|||
|
//{
|
|||
|
// mis.Add(friends[i]);
|
|||
|
// if (mis.Count >= count)
|
|||
|
// {
|
|||
|
// nmss.Add(mis);
|
|||
|
// mis = new List<FriendInfo>();
|
|||
|
// }
|
|||
|
// else if (nmss.Count == num && mis.Count == rem)
|
|||
|
// {
|
|||
|
// nmss.Add(mis);
|
|||
|
// }
|
|||
|
//}
|
|||
|
//var user = WechatClient.GetUser(User.DwClientId, WechatType.Xiaoxie);
|
|||
|
//if (user == null) return;
|
|||
|
//var socketClient = EasySoc.GetSocket();
|
|||
|
//foreach (var item in nmss)
|
|||
|
//{
|
|||
|
// var msg = new WechatContact();
|
|||
|
// msg.RobotUsername = user.Wxid;
|
|||
|
// msg.RobotUsernick = user.Nickname;
|
|||
|
// msg.RobotType = RobotType.客户端微信;
|
|||
|
|
|||
|
// msg.Cmd = PCRobotCMD.rcvContactList;
|
|||
|
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", item } });
|
|||
|
|
|||
|
// socketClient.Send(msg);
|
|||
|
// Thread.Sleep(5);
|
|||
|
//}
|
|||
|
//#endregion
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
finally
|
|||
|
{
|
|||
|
IsZombizRun = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void GetContact()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//获取好友列表(数据库读取)
|
|||
|
//var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } });
|
|||
|
//SendWeChatData(User.DwClientId, json);
|
|||
|
Task.Run(() =>
|
|||
|
{
|
|||
|
GetFriendInfos();
|
|||
|
});
|
|||
|
|
|||
|
Thread.Sleep(1000);
|
|||
|
|
|||
|
//获取群列表(数据库读取)
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void GetContact(bool isUpdate)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var result = GetFriendInfos(true);
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
CommonResult msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvFriendList;
|
|||
|
msg.Data = result == null ? string.Empty : HttpHelper.ObjectToJson(result);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取好友列表
|
|||
|
/// </summary>
|
|||
|
/// <param name="flushGroupsCache">刷新缓存数据</param>
|
|||
|
/// <returns></returns>
|
|||
|
//public override List<FriendInfo> GetFriendInfos(bool flushGroupsCache = false)
|
|||
|
public override string GetFriendInfos(bool flushGroupsCache = false)
|
|||
|
{
|
|||
|
List<FriendInfo> friends = null;
|
|||
|
try
|
|||
|
{
|
|||
|
#region 获取缓存数据
|
|||
|
friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom")).ToList();
|
|||
|
if (!flushGroupsCache && friends.Count != 0)
|
|||
|
return JsonConvert.SerializeObject(friends);
|
|||
|
#endregion
|
|||
|
|
|||
|
if (!User.IsGetFriend)
|
|||
|
{
|
|||
|
//获取好友列表(数据库读取)
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
User.IsGetFriend = true;
|
|||
|
}
|
|||
|
|
|||
|
var result_ = Task.Factory.StartNew<List<FriendInfo>>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetFriend)
|
|||
|
{
|
|||
|
friends = User.Friends.Where(f => !f.wxid.Contains("@chatroom")).ToList();
|
|||
|
return friends;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
return JsonConvert.SerializeObject(friends);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "#__#");
|
|||
|
}
|
|||
|
return string.Empty;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取群列表
|
|||
|
/// </summary>
|
|||
|
public override void GetGroupsNotInMember()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//获取群列表(数据库读取)
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
Thread.Sleep(4000);
|
|||
|
var groups = User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList();
|
|||
|
return groups == null ? string.Empty : HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", groups } });
|
|||
|
}).Result;
|
|||
|
|
|||
|
if (result == null)
|
|||
|
result = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList() } });
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new WechatContact();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvContactList;
|
|||
|
msg.Message = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过用户id查询用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="wxid"></param>
|
|||
|
public override void GetWxidInfo(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_WXID_MSG, data = new { wxid = wxid } });
|
|||
|
var u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u == null)
|
|||
|
{
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
var friend = Task.Factory.StartNew<FriendInfo>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(15);
|
|||
|
do
|
|||
|
{
|
|||
|
u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u != null) return u;
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
}
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
WechatContact msg = new WechatContact();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvContact;
|
|||
|
msg.Message = u == null ? string.Empty : HttpHelper.ObjectToJson(u);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过群号查询指定的用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupId">要查询群号</param>
|
|||
|
/// <param name="wxid">要查询的用户</param>
|
|||
|
public override void GetGroupAndFriendInfo(string groupId, string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
GroupInfo group = null;
|
|||
|
FriendInfo u = null;
|
|||
|
if (groupId.Contains("@chatroom") || groupId.Contains("@im.chatroom"))
|
|||
|
{
|
|||
|
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
|||
|
if (g != null)
|
|||
|
{
|
|||
|
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u != null)
|
|||
|
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
|
|||
|
}
|
|||
|
|
|||
|
if (group == null)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = groupId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(15);
|
|||
|
do
|
|||
|
{
|
|||
|
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
|||
|
if (g != null)
|
|||
|
{
|
|||
|
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u != null)
|
|||
|
{
|
|||
|
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
|
|||
|
return group;
|
|||
|
}
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
}
|
|||
|
|
|||
|
if (group == null) group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { new FriendInfo() { wxid = wxid } }, total_member = 1 };
|
|||
|
}
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new WechatContact();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvContact;
|
|||
|
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 通过群号查询指定的用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="groupId">要查询群号</param>
|
|||
|
/// <param name="wxid">要查询的用户</param>
|
|||
|
public override void GetGroupAndFriendInfo(string groupId, string wxid, bool flush = false)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
GroupInfo group = null;
|
|||
|
FriendInfo u = null;
|
|||
|
if (groupId.Contains("@chatroom") || groupId.Contains("@im.chatroom"))
|
|||
|
{
|
|||
|
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
|||
|
if (g != null)
|
|||
|
{
|
|||
|
if (flush)
|
|||
|
{
|
|||
|
g.friends.Clear();
|
|||
|
UpdateGroupInfo(groupId);
|
|||
|
Thread.Sleep(100);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u != null)
|
|||
|
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (group == null)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = groupId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(15);
|
|||
|
do
|
|||
|
{
|
|||
|
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
|||
|
if (g != null)
|
|||
|
{
|
|||
|
u = g.friends.FirstOrDefault(f => f.wxid == wxid);
|
|||
|
if (u != null)
|
|||
|
{
|
|||
|
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
|
|||
|
return group;
|
|||
|
}
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (end_time > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
}
|
|||
|
|
|||
|
if (group == null) group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { new FriendInfo() { wxid = wxid } }, total_member = 1 };
|
|||
|
}
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new WechatContact();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvContact;
|
|||
|
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public override void UpdateWxidInfo(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_WXID_MSG, data = new { wxid = wxid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void UpdateGroupInfo(string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_UPDATE_ROOM_MEMBER_MSG, data = new { wxid = groupId } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void GetFriend(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_WXID_MSG, data = new { wxid = wxid } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 浏览器
|
|||
|
/// </summary>
|
|||
|
//public void MtOpenBrowserMsg(string url)
|
|||
|
//{
|
|||
|
// try
|
|||
|
// {
|
|||
|
// var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_OPEN_BROWSER_MSG, data = new { url = url } });
|
|||
|
// SendWeChatData(this.User.DwClientId, json);
|
|||
|
// }
|
|||
|
// catch (Exception ex)
|
|||
|
// {
|
|||
|
// LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
public override void CloseWechat(string message)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == User.DwClientId && f.Value.Type == WechatType.Xiaoxie).Value;
|
|||
|
if (v != null)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"CloseWechat事件退出,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
|
|||
|
WechatClient.RemoveUser(v, true);
|
|||
|
if (!string.IsNullOrWhiteSpace(message))
|
|||
|
PCRobotForm.ErrorMessAction?.Invoke(message);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 检测URL在微信中是否有效
|
|||
|
/// </summary>
|
|||
|
/// <param name="url">要检测的网址</param>
|
|||
|
public override void CheckUrl(string url)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
url = url.Trim();
|
|||
|
if (!string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
//var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS_MSG, data = new { url = url } });
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS2_MSG, data = new { url = url } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
var result = Task.Factory.StartNew<int>(delegate ()
|
|||
|
{
|
|||
|
var awaitTime = DateTime.Now.AddSeconds(10);
|
|||
|
do
|
|||
|
{
|
|||
|
Thread.Sleep(200);
|
|||
|
//if (CheckUrlCache.ContainsKey(url)) return CheckUrlCache[url];
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
object item = cache[url];
|
|||
|
if (item != null)
|
|||
|
return int.Parse(item.ToString());
|
|||
|
} while (awaitTime >= DateTime.Now);
|
|||
|
return -1;
|
|||
|
}).Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
var msg = new CheckUrl();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvCheckUrl;
|
|||
|
msg.Status = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void OpenUrl(string url)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
url = url.Trim();
|
|||
|
if (!string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_OPEN_BROWSER_MSG, data = new { url = url } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 清理历史聊天记录
|
|||
|
/// </summary>
|
|||
|
/// <param name="url"></param>
|
|||
|
public override void ClearChatHistoryMsg()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CLEAR_CHAT_HISTORY_MSG, data = new { } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 设置会话已读
|
|||
|
/// </summary>
|
|||
|
/// <param name="url"></param>
|
|||
|
public override void SetSessionReadedMsg(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SET_SESSION_READED_MSG, data = new { wxid = wxid } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改群聊名称
|
|||
|
/// </summary>
|
|||
|
/// <param name="new_name">新的群名</param>
|
|||
|
/// <param name="groupId">群id</param>
|
|||
|
public override void SetRoomName(string new_name, string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NAME_MSG, data = new { room_wxid = groupId, name = new_name } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改群公告(可用于@全体)
|
|||
|
/// </summary>
|
|||
|
/// <param name="notice">新公告</param>
|
|||
|
/// <param name="groupId">群聊wxid</param>
|
|||
|
public override void SetRoomNotice(string notice, string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NOTICE_MSG, data = new { room_wxid = groupId, notice = notice } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 设置自己在群中昵称
|
|||
|
/// </summary>
|
|||
|
/// <param name="nickname">要设置的昵称</param>
|
|||
|
/// <param name="groupId">需要设置的群id</param>
|
|||
|
public override void ModRoomMyName(string nickname, string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_MEMBER_NAME_MSG, data = new { room_wxid = groupId, nickname = nickname } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 设置是否显示群成员昵称
|
|||
|
/// </summary>
|
|||
|
/// <param name="status">true为开启</param>
|
|||
|
/// <param name="groupId">要显示得到群</param>
|
|||
|
public override void SetRoomShowMemeberName(bool status, string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_SHOW_NAME_MSG, data = new { room_wxid = groupId, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 修改群聊名称
|
|||
|
/// </summary>
|
|||
|
/// <param name="newnick">新名称</param>
|
|||
|
/// <param name="groupId">群号</param>
|
|||
|
public override void ModRoomName(string newnick, string groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NAME_MSG, data = new { room_wxid = groupId, name = newnick } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 是否消息免打扰
|
|||
|
/// </summary>
|
|||
|
/// <param name="status">true为开启</param>
|
|||
|
/// <param name="wxid">wxid</param>
|
|||
|
public override void SetRecvNotify(bool status, string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_RECV_NOTIFY_MSG, data = new { wxid = wxid, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 关注公众号
|
|||
|
/// </summary>
|
|||
|
/// <param name="wxid">公众号wxid</param>
|
|||
|
public override void AddPublicUser(string wxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_ADD_PUBLIC_USER_MSG, data = new { wxid = wxid } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 开启/关闭防撤回功能
|
|||
|
/// </summary>
|
|||
|
/// <param name="status">1是开启防撤回,0是关闭</param>
|
|||
|
public override void SetDisableRevoke(bool status)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DISABLE_REVOKE_MSG, data = new { status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#region 内部类
|
|||
|
|
|||
|
public enum MsgType : ushort
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// DEBUG消息
|
|||
|
/// </summary>
|
|||
|
MT_DEBUG_LOG = 11024,
|
|||
|
/// <summary>
|
|||
|
/// 登录消息
|
|||
|
/// </summary>
|
|||
|
MT_USER_LOGIN = 11025,
|
|||
|
/// <summary>
|
|||
|
/// 注销消息
|
|||
|
/// </summary>
|
|||
|
MT_USER_LOGOUT = 11026,
|
|||
|
/// <summary>
|
|||
|
/// 数据库查询消息
|
|||
|
/// </summary>
|
|||
|
MT_SQL_QUERY = 11027,
|
|||
|
/// <summary>
|
|||
|
/// 获取我的信息消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_OWNER_MSG = 11028,
|
|||
|
/// <summary>
|
|||
|
/// 获取单个好友消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_WXID_MSG = 11029,
|
|||
|
/// <summary>
|
|||
|
/// 获取好友列表消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_FRIENDS_MSG = 11030,
|
|||
|
/// <summary>
|
|||
|
/// 获取群聊列表消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_CHATROOMS_MSG = 11031,
|
|||
|
/// <summary>
|
|||
|
/// 获取群成员消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_CHATROOM_MEMBERS_MSG = 11032,
|
|||
|
/// <summary>
|
|||
|
/// 获取公众号消息
|
|||
|
/// </summary>
|
|||
|
MT_DATA_PUBLICS_MSG = 11033,
|
|||
|
/// <summary>
|
|||
|
/// 从网络更新单个好友信息消息
|
|||
|
/// </summary>
|
|||
|
MT_UPDATE_WXID_MSG = 11034,
|
|||
|
/// <summary>
|
|||
|
/// 从网络更新群成员信息消息
|
|||
|
/// </summary>
|
|||
|
MT_UPDATE_ROOM_MEMBER_MSG = 11035,
|
|||
|
/// <summary>
|
|||
|
/// 发送文本消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_TEXTMSG = 11036,
|
|||
|
/// <summary>
|
|||
|
/// 发送群@消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_CHATROOM_ATMSG = 11037,
|
|||
|
/// <summary>
|
|||
|
/// 发送名片消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_CARDMSG = 11038,
|
|||
|
/// <summary>
|
|||
|
/// 发送链接消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_LINKMSG = 11039,
|
|||
|
/// <summary>
|
|||
|
/// 发送图片消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_IMGMSG = 11040,
|
|||
|
/// <summary>
|
|||
|
/// 发送文件消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_FILEMSG = 11041,
|
|||
|
/// <summary>
|
|||
|
/// 发送视频消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_VIDEOMSG = 11042,
|
|||
|
/// <summary>
|
|||
|
/// 发送GIF消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_GIFMSG = 11043,
|
|||
|
/// <summary>
|
|||
|
/// 接收文本消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_TEXT_MSG = 11046,
|
|||
|
/// <summary>
|
|||
|
/// 接收图片消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_PICTURE_MSG = 11047,
|
|||
|
/// <summary>
|
|||
|
/// 接收语音消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_VOICE_MSG = 11048,
|
|||
|
/// <summary>
|
|||
|
/// 接收申请好友消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_FRIEND_MSG = 11049,
|
|||
|
/// <summary>
|
|||
|
/// 接收名片消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_CARD_MSG = 11050,
|
|||
|
/// <summary>
|
|||
|
/// 接收视频消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_VIDEO_MSG = 11051,
|
|||
|
/// <summary>
|
|||
|
/// 接收表情消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_EMOJI_MSG = 11052,
|
|||
|
/// <summary>
|
|||
|
/// 接收位置消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_LOCATION_MSG = 11053,
|
|||
|
/// <summary>
|
|||
|
/// 接收链接消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_LINK_MSG = 11054,
|
|||
|
/// <summary>
|
|||
|
/// 接收文件消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_FILE_MSG = 11055,
|
|||
|
/// <summary>
|
|||
|
/// 接收小程序消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_MINIAPP_MSG = 11056,
|
|||
|
/// <summary>
|
|||
|
/// 接收好友转账消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_WCPAY_MSG = 11057,
|
|||
|
/// <summary>
|
|||
|
/// 接收系统消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_SYSTEM_MSG = 11058,
|
|||
|
/// <summary>
|
|||
|
/// 接收撤回消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_REVOKE_MSG = 11059,
|
|||
|
/// <summary>
|
|||
|
/// 接收其他未知消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_OTHER_MSG = 11060,
|
|||
|
/// <summary>
|
|||
|
/// 接收应用类型未知消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_OTHER_APP_MSG = 11061,
|
|||
|
/// <summary>
|
|||
|
/// 发送加好友消息
|
|||
|
/// </summary>
|
|||
|
MT_ADD_FRIEND_MSG = 11062,
|
|||
|
/// <summary>
|
|||
|
/// 发送修改好友备注消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_FRIEND_REMARK_MSG = 11063,
|
|||
|
/// <summary>
|
|||
|
/// 发送删除好友消息
|
|||
|
/// </summary>
|
|||
|
MT_DEL_FRIEND_MSG = 11064,
|
|||
|
/// <summary>
|
|||
|
/// 发送同意加好友申请消息
|
|||
|
/// </summary>
|
|||
|
MT_ACCEPT_FRIEND_MSG = 11065,
|
|||
|
/// <summary>
|
|||
|
/// 发送接收好友转帐消息
|
|||
|
/// </summary>
|
|||
|
MT_ACCEPT_WCPAY_MSG = 11066,
|
|||
|
/// <summary>
|
|||
|
/// 发送同意进群邀请消息
|
|||
|
/// </summary>
|
|||
|
MT_ACCEPT_ROOM_MSG = 11067,
|
|||
|
/// <summary>
|
|||
|
/// 发送创建群聊消息
|
|||
|
/// </summary>
|
|||
|
MT_CREATE_ROOM_MSG = 11068,
|
|||
|
/// <summary>
|
|||
|
/// 发送邀请好友进群消息,40人以下
|
|||
|
/// </summary>
|
|||
|
MT_INVITE_TO_ROOM_MSG = 11069,
|
|||
|
/// <summary>
|
|||
|
/// 发送邀请好友进群消息,40人以上
|
|||
|
/// </summary>
|
|||
|
MT_INVITE_TO_ROOM_REQ_MSG = 11070,
|
|||
|
/// <summary>
|
|||
|
/// 发送删除群成员消息
|
|||
|
/// </summary>
|
|||
|
MT_DEL_ROOM_MEMBER_MSG = 11071,
|
|||
|
/// <summary>
|
|||
|
/// 发送修改群名称消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_ROOM_NAME_MSG = 11072,
|
|||
|
/// <summary>
|
|||
|
/// 发送修改群通知消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_ROOM_NOTICE_MSG = 11073,
|
|||
|
/// <summary>
|
|||
|
/// 发送修改我在本群的昵称消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_ROOM_MEMBER_NAME_MSG = 11074,
|
|||
|
/// <summary>
|
|||
|
/// 发送修改显示群昵称消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_ROOM_SHOW_NAME_MSG = 11075,
|
|||
|
/// <summary>
|
|||
|
/// 发送保存到联系人消息
|
|||
|
/// </summary>
|
|||
|
MT_SAVE_ROOM_TO_CONTACT_MSG = 11076,
|
|||
|
/// <summary>
|
|||
|
/// 发送退出并删除群消息
|
|||
|
/// </summary>
|
|||
|
MT_QUIT_DEL_ROOM_MSG = 11077,
|
|||
|
/// <summary>
|
|||
|
/// 发送消息免打扰消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_RECV_NOTIFY_MSG = 11078,
|
|||
|
/// <summary>
|
|||
|
/// 发送置顶消息
|
|||
|
/// </summary>
|
|||
|
MT_MOD_CHAT_SESSION_TOP_MSG = 11079,
|
|||
|
/// <summary>
|
|||
|
/// 发送无痕清粉消息
|
|||
|
/// </summary>
|
|||
|
MT_ZOMBIE_CHECK_MSG = 11080,
|
|||
|
/// <summary>
|
|||
|
/// 发送自动同意好友申请消息
|
|||
|
/// </summary>
|
|||
|
MT_AUTO_ACCEPT_FRIEND_MSG = 11081,
|
|||
|
/// <summary>
|
|||
|
/// 发送自动同意好友转帐消息
|
|||
|
/// </summary>
|
|||
|
MT_AUTO_ACCEPT_WCPAY_MSG = 11082,
|
|||
|
/// <summary>
|
|||
|
/// 发送自动进群邀请消息
|
|||
|
/// </summary>
|
|||
|
MT_AUTO_ACCEPT_ROOM_MSG = 11083,
|
|||
|
/// <summary>
|
|||
|
/// 发送自动加名片消息
|
|||
|
/// </summary>
|
|||
|
MT_AUTO_ACCPET_CARD_MSG = 11084,
|
|||
|
/// <summary>
|
|||
|
/// 发送解密图片消息
|
|||
|
/// </summary>
|
|||
|
MT_DECRYPT_IMG_MSG = 11085,
|
|||
|
/// <summary>
|
|||
|
/// 发送打开浏览器消息
|
|||
|
/// </summary>
|
|||
|
MT_OPEN_BROWSER_MSG = 11086,
|
|||
|
/// <summary>
|
|||
|
/// 获取用户登录二维码,于2019年5月28日新增
|
|||
|
/// </summary>
|
|||
|
MT_RECV_QRCODE_MSG = 11087,
|
|||
|
/// <summary>
|
|||
|
/// 窗口变化通知消息
|
|||
|
/// </summary>
|
|||
|
MT_WX_WND_CHANGE_MSG = 11088,
|
|||
|
/// <summary>
|
|||
|
/// 发送和获取未读数量变动消息
|
|||
|
/// </summary>
|
|||
|
MT_UNREAD_MSG_COUNT_CHANGE_MSG = 11089,
|
|||
|
/// <summary>
|
|||
|
/// 与指定人聊天
|
|||
|
/// </summary>
|
|||
|
MT_TO_CHAT_MSG = 11090,
|
|||
|
/// <summary>
|
|||
|
/// 当前聊天对象改变
|
|||
|
/// </summary>
|
|||
|
MT_TALKER_CHANGE_MSG = 11091,
|
|||
|
/// <summary>
|
|||
|
/// 通过二维码进群
|
|||
|
/// </summary>
|
|||
|
MT_ACCEPT_QRCODE_ROOM_MSG = 11092,
|
|||
|
/// <summary>
|
|||
|
/// 单向加好友
|
|||
|
/// </summary>
|
|||
|
MT_ACCEPT_ONEWAY_FRIEND_MSG = 11093,
|
|||
|
/// <summary>
|
|||
|
/// 设置微信版本号
|
|||
|
/// </summary>
|
|||
|
MT_CUSTOM_WX_VERSION_MSG = 11094,
|
|||
|
/// <summary>
|
|||
|
/// 接收到二微码付款消息
|
|||
|
/// </summary>
|
|||
|
MT_RECV_QRCODE_WCPAY_MSG = 11095,
|
|||
|
/// <summary>
|
|||
|
/// 通过手机号/微信号/QQ号查询联系人
|
|||
|
/// </summary>
|
|||
|
MT_SEARCH_CONTACT_MSG = 11096,
|
|||
|
/// <summary>
|
|||
|
/// 添加通过手机号/微信号/QQ号查询的联系人
|
|||
|
/// </summary>
|
|||
|
MT_ADD_SEARCH_CONTACT_MSG = 11097,
|
|||
|
/// <summary>
|
|||
|
/// 群成员新增通知
|
|||
|
/// </summary>
|
|||
|
MT_ROOM_ADD_MEMBER_NOTIFY_MSG = 11098,
|
|||
|
/// <summary>
|
|||
|
/// 群成员删除通知
|
|||
|
/// </summary>
|
|||
|
MT_ROOM_DEL_MEMBER_NOTIFY_MSG = 11099,
|
|||
|
/// <summary>
|
|||
|
/// 通过接口创建群聊的通知
|
|||
|
/// </summary>
|
|||
|
MT_ROOM_CREATE_NOTIFY_MSG = 11100,
|
|||
|
/// <summary>
|
|||
|
/// 退群或被踢通知
|
|||
|
/// </summary>
|
|||
|
MT_ROOM_DEL_NOTIFY_MSG = 11101,
|
|||
|
/// <summary>
|
|||
|
/// 联系人新增通知
|
|||
|
/// </summary>
|
|||
|
MT_CONTACT_ADD_NOITFY_MSG = 11102,
|
|||
|
/// <summary>
|
|||
|
/// 联系人删除通知
|
|||
|
/// </summary>
|
|||
|
MT_CONTACT_DEL_NOTIFY_MSG = 11103,
|
|||
|
/// <summary>
|
|||
|
/// 注销登录
|
|||
|
/// </summary>
|
|||
|
MT_QUIT_LOGIN_MSG = 11104,
|
|||
|
/// <summary>
|
|||
|
/// 无需确认退出
|
|||
|
/// </summary>
|
|||
|
MT_QUIT_WECHAT_MSG = 11105,
|
|||
|
/// <summary>
|
|||
|
/// 当点击微信托盘图标和未读消息时消息
|
|||
|
/// </summary>
|
|||
|
MT_TRAYICON_SHOW_WINDOW_MSG = 11106,
|
|||
|
/// <summary>
|
|||
|
/// 退还朋友的转账
|
|||
|
/// </summary>
|
|||
|
MT_REFUSE_FRIEND_WCPAY_MSG = 11107,
|
|||
|
/// <summary>
|
|||
|
/// 清除聊天记录
|
|||
|
/// </summary>
|
|||
|
MT_CLEAR_CHAT_HISTORY_MSG = 11108,
|
|||
|
/// <summary>
|
|||
|
/// 获取收藏列表
|
|||
|
/// </summary>
|
|||
|
MT_DATA_FAVITEMS_MSG = 11109,
|
|||
|
/// <summary>
|
|||
|
/// 发送收藏
|
|||
|
/// </summary>
|
|||
|
MT_SEND_FAVITEM_MSG = 11110,
|
|||
|
/// <summary>
|
|||
|
/// 收藏指定消息
|
|||
|
/// </summary>
|
|||
|
MT_ADD_FAVITEM_FROM_MSG = 11111,
|
|||
|
/// <summary>
|
|||
|
/// 语音翻译
|
|||
|
/// </summary>
|
|||
|
MT_TRANS_VOICE_MSG = 11112,
|
|||
|
/// <summary>
|
|||
|
/// 发送XML消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_XMLMSG = 11113,
|
|||
|
/// <summary>
|
|||
|
/// 发送名版XML消息
|
|||
|
/// </summary>
|
|||
|
MT_SEND_CARD_XMLMSG = 11114,
|
|||
|
/// <summary>
|
|||
|
/// 关注公众号
|
|||
|
/// </summary>
|
|||
|
MT_ADD_PUBLIC_USER_MSG = 11115,
|
|||
|
/// <summary>
|
|||
|
/// 转发小程序
|
|||
|
/// </summary>
|
|||
|
MT_FORWARD_APP_MSG = 11118,
|
|||
|
/// <summary>
|
|||
|
/// 开启/关闭防撤回消息
|
|||
|
/// </summary>
|
|||
|
MT_DISABLE_REVOKE_MSG = 11121,
|
|||
|
/// <summary>
|
|||
|
/// 设置会话为已读
|
|||
|
/// </summary>
|
|||
|
MT_SET_SESSION_READED_MSG = 11122,
|
|||
|
/// <summary>
|
|||
|
/// 检测URL在微信中是否有效
|
|||
|
/// </summary>
|
|||
|
MT_CHECK_URL_STATUS_MSG = 11123,
|
|||
|
/// <summary>
|
|||
|
/// 检测URL在微信中是否有效2
|
|||
|
/// </summary>
|
|||
|
MT_CHECK_URL_STATUS2_MSG = 11135,
|
|||
|
/// <summary>
|
|||
|
/// 微信二维码识别
|
|||
|
/// </summary>
|
|||
|
//MT_SCAN_QRCODE_IMG_MSG = 11127,
|
|||
|
/// <summary>
|
|||
|
/// 自动授权登录小程序
|
|||
|
/// </summary>
|
|||
|
MT_SNS_AUTO_AUTH_MINIAPP_LOGIN = 11136,
|
|||
|
/// <summary>
|
|||
|
/// 获取朋友圈首页
|
|||
|
/// </summary>
|
|||
|
MT_SNS_TIMELINE_MSG = 11145,
|
|||
|
/// <summary>
|
|||
|
/// 评论
|
|||
|
/// </summary>
|
|||
|
MT_SNS_COMMENT_MSG = 11146,
|
|||
|
/// <summary>
|
|||
|
/// 点赞
|
|||
|
/// </summary>
|
|||
|
MT_SNS_LIKE_MSG = 11147,
|
|||
|
/// <summary>
|
|||
|
/// 发朋友圈
|
|||
|
/// </summary>
|
|||
|
MT_SNS_POST_MSG = 11148,
|
|||
|
/// <summary>
|
|||
|
/// 朋友圈上传图片
|
|||
|
/// </summary>
|
|||
|
MT_SNS_UPLOAD_IMAGE_MSG = 11149,
|
|||
|
/// <summary>
|
|||
|
/// 获取指定用户的朋友圈
|
|||
|
/// </summary>
|
|||
|
MT_SNS_TIMELINE_USER_MSG = 11150,
|
|||
|
}
|
|||
|
|
|||
|
enum _EnRawMsgType
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 0x1 文本
|
|||
|
/// </summary>
|
|||
|
WX_MSG_TEXT = 1,
|
|||
|
/// <summary>
|
|||
|
/// 0x3 图片
|
|||
|
/// </summary>
|
|||
|
WX_MSG_PICTURE = 3,
|
|||
|
/// <summary>
|
|||
|
/// 0x22 语音
|
|||
|
/// </summary>
|
|||
|
WX_MSG_VOICE = 34,
|
|||
|
/// <summary>
|
|||
|
/// 0x25 加好友请求 "from_wxid" : "fmessage"
|
|||
|
/// </summary>
|
|||
|
WX_MSG_FRIEND = 37,
|
|||
|
/// <summary>
|
|||
|
/// 0x2A 名片
|
|||
|
/// </summary>
|
|||
|
WX_MSG_CARD = 42,
|
|||
|
/// <summary>
|
|||
|
/// 0x2B 视频
|
|||
|
/// </summary>
|
|||
|
WX_MSG_VIDEO = 43,
|
|||
|
/// <summary>
|
|||
|
/// 0x2F 表情
|
|||
|
/// </summary>
|
|||
|
WX_MSG_EMOJI = 47,
|
|||
|
/// <summary>
|
|||
|
/// 0x30 位置
|
|||
|
/// </summary>
|
|||
|
WX_MSG_LOCATION = 48,
|
|||
|
/// <summary>
|
|||
|
/// 0x31 应用类型,子类型参考EnRawAppMsgType
|
|||
|
/// </summary>
|
|||
|
WX_MSG_APP = 49,
|
|||
|
/// <summary>
|
|||
|
/// 0x2710 系统消息
|
|||
|
/// </summary>
|
|||
|
WX_MSG_SYSTEM = 10000,
|
|||
|
/// <summary>
|
|||
|
/// 0x2712 撤回消息
|
|||
|
/// </summary>
|
|||
|
WX_MSG_REVOKE = 10002,
|
|||
|
}
|
|||
|
//EnRawMsgType;
|
|||
|
// XML XPATH路径 /msg/appmsg/type/text()
|
|||
|
enum _EnRawAppMsgType
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 链接(包含群邀请)
|
|||
|
/// </summary>
|
|||
|
WX_APPMSG_LINK = 5,
|
|||
|
/// <summary>
|
|||
|
/// 文件
|
|||
|
/// </summary>
|
|||
|
WX_APPMSG_FILE = 6,
|
|||
|
/// <summary>
|
|||
|
/// 合并消息
|
|||
|
/// </summary>
|
|||
|
WX_APPMSG_MUTIL = 19,
|
|||
|
/// <summary>
|
|||
|
/// 小程序
|
|||
|
/// </summary>
|
|||
|
WX_APPMSG_MINIAPP = 33,
|
|||
|
/// <summary>
|
|||
|
/// 转帐
|
|||
|
/// </summary>
|
|||
|
WX_APPMSG_WCPAY = 2000,
|
|||
|
}
|
|||
|
//EnRawAppMsgType;
|
|||
|
#endregion
|
|||
|
|
|||
|
}
|
|||
|
}
|