1783 lines
81 KiB
C#
1783 lines
81 KiB
C#
using CsharpHttpHelper;
|
||
using HPSocketCS;
|
||
using Newtonsoft.Json.Linq;
|
||
using NM_WeChat;
|
||
using PCRobot.Pack;
|
||
using PCRobot.Utils;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using static PCRobot.PCWechat.WechatClient;
|
||
|
||
namespace PCRobot.PCWechat
|
||
{
|
||
public class Wechat_Dazong : BaseApi
|
||
{
|
||
public Wechat_Dazong(WechatUser User) : base(User) { }
|
||
|
||
static TcpPackServer HP_Server;
|
||
static NMCore nmCore;
|
||
static NMHelper nmHeler;
|
||
|
||
#region 微信版本基础信息
|
||
|
||
//private const string Version = "2.7.1.88";
|
||
//private const int PcOffSet = 0x138D6C0;//2.7.1.88
|
||
//private const string PcMd5 = "ced61f308edd8cf3e2d864df285dc2af";//2.7.1.88
|
||
|
||
//private const string Version = "3.1.0.41";
|
||
//private const int PcOffSet = 0x1885DE0;//3.1.0.41
|
||
//private const string PcMd5 = "E9D55BB8A28F02FAC6645480FEC35B8D";//3.1.0.41
|
||
|
||
private const string Version = "3.2.1.154";
|
||
private const int PcOffSet = 0x1AA82E8;//3.2.1.154
|
||
private const string PcMd5 = "68B06E378747CD3C58935A70A9DBA431";//3.2.1.154
|
||
|
||
private const string NanMuCore = "NanMuCore_3.2.1.154.dll";
|
||
|
||
//private const string Version = "3.2.1.154";
|
||
//private const int PcOffSet = 0x1CF9128;//3.3.5.50
|
||
////1D03368
|
||
////1D04228
|
||
////1D29830
|
||
////1D2C550
|
||
//private const string PcMd5 = "68B06E378747CD3C58935A70A9DBA431";//3.3.5.50
|
||
|
||
//private const string NanMuCore = "NanMuCore_3.3.5.50.dll";
|
||
|
||
#endregion
|
||
|
||
|
||
public static void Install()
|
||
{
|
||
|
||
|
||
DllPath = HttpExtend.MapFile(NanMuCore, "Bin");
|
||
if (IsKsfInstall) return;
|
||
|
||
HP_Server = new TcpPackServer();
|
||
nmHeler = new NMHelper();
|
||
|
||
HP_Server.OnAccept += new ServerEvent.OnAcceptEventHandler(OnAccept);
|
||
HP_Server.OnReceive += new ServerEvent.OnReceiveEventHandler(OnReceive);
|
||
HP_Server.OnClose += new ServerEvent.OnCloseEventHandler(OnClose);
|
||
HP_Server.MaxPackSize = 0x3FFFFF;
|
||
HP_Server.IpAddress = "127.0.0.1";
|
||
HP_Server.Port = 0;
|
||
|
||
if (HP_Server.Start() == true)
|
||
{
|
||
nmCore = new NMCore(HP_Server);
|
||
string szIPAddress = string.Empty;
|
||
ushort dwPort = 0;
|
||
HP_Server.GetListenAddress(ref szIPAddress, ref dwPort);
|
||
if (dwPort == 0)
|
||
{
|
||
MessageBox.Show("通信端口创建失败,请重试!", "错误");
|
||
Environment.Exit(0);
|
||
}
|
||
nmHeler.Socket_Port = dwPort;
|
||
|
||
try
|
||
{
|
||
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
|
||
IsKsfInstall = true;
|
||
|
||
return;
|
||
Process[] MyProcesses = Process.GetProcesses();
|
||
var path1 = HttpExtend.MapPath("PCWechat");
|
||
var path2 = HttpExtend.MapPath("PCWechat\\" + Version);
|
||
foreach (Process MyProcess in MyProcesses)
|
||
{
|
||
try
|
||
{
|
||
var name = MyProcess.ProcessName.ToUpper();
|
||
if (name == "WECHAT" && MyProcess.MainModule.FileName.StartsWith(path1))
|
||
{
|
||
try
|
||
{
|
||
//判断微信版本
|
||
//if (MyProcess.MainModule.FileName.StartsWith(path2) || is_inject)
|
||
if (MyProcess.MainModule.FileName.StartsWith(path2))
|
||
{
|
||
var id = MyProcess.Id;
|
||
|
||
bool flag = Task.Factory.StartNew(delegate
|
||
{
|
||
try
|
||
{
|
||
//var path = CsharpHttpHelper.HttpExtend.MapPath($"PCWechat\\" + Version);
|
||
|
||
//string szDllPath = System.IO.Directory.GetCurrentDirectory() + "\\Bin\\"+NanMuCore;
|
||
//NMHelper.NM_CreateWeChatProcess(path, "WeChat.exe", szDllPath, nmHeler.Socket_Port);
|
||
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
|
||
}
|
||
catch (Exception)
|
||
{ }
|
||
}).Wait(5000);
|
||
if (!flag)
|
||
{
|
||
try
|
||
{
|
||
MyProcess.Kill();
|
||
}
|
||
catch (Exception)
|
||
{ }
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//终止掉,其他版本
|
||
try
|
||
{
|
||
MyProcess.Kill();
|
||
}
|
||
catch (Exception)
|
||
{ }
|
||
}
|
||
}
|
||
catch (Exception)
|
||
{ }
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通信事件_登录成功
|
||
/// </summary>
|
||
/// <param name="ConnID"></param>
|
||
/// <param name="RecvJson"></param>
|
||
static void Event_Login(int ConnID, JObject RecvJson)
|
||
{
|
||
var wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
|
||
var user = WechatClient.GetUser(wxid, (uint)ConnID, WechatType.Dazong);
|
||
|
||
user.Nickname = nmHeler.Json_GetString(RecvJson, "Nick", true);
|
||
user.Wxid = wxid;
|
||
user.HeaderUrl = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
|
||
|
||
//user.DBFile = data["wx_user_dir"].ToString();
|
||
int pid = 0;
|
||
nmHeler.Json_GetInt(RecvJson, "ProcessId", out pid);
|
||
user.Pid = pid;
|
||
user.Phone = nmHeler.Json_GetString(RecvJson, "phone", true);
|
||
user.Uin = GetUin(user.Pid);
|
||
WechatClient.OnRefUserEvent(user);
|
||
if (WechatClient.IsDebug)
|
||
LogHelper.GetSingleObj().Debug("调试登录", $"{wxid} - {user}");
|
||
}
|
||
/// <summary>
|
||
/// 获取微信的uin的值
|
||
/// </summary>
|
||
/// <param name="pid"></param>
|
||
/// <returns></returns>
|
||
public static string GetUin(int pid)
|
||
{
|
||
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);
|
||
return uinStr;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
return string.Empty;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 关闭事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="connId"></param>
|
||
/// <param name="enOperation"></param>
|
||
/// <param name="errorCode"></param>
|
||
/// <returns></returns>
|
||
private static HandleResult OnClose(IServer sender, IntPtr connId, SocketOperation enOperation, int errorCode)
|
||
{
|
||
try
|
||
{
|
||
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == (uint)connId && f.Value.Type == WechatType.Dazong).Value;
|
||
if (v != null)
|
||
{
|
||
LogHelper.GetSingleObj().Info("系统", $"WxCloseCallbackDaZong关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
|
||
WechatClient.RemoveUser(v);
|
||
}
|
||
return HandleResult.Ok;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
return HandleResult.Error;
|
||
}
|
||
|
||
private static HandleResult OnReceive(IServer sender, IntPtr connId, byte[] bytes)
|
||
{
|
||
try
|
||
{
|
||
string s_Recv = Encoding.Default.GetString(bytes);
|
||
JObject RecvJson = JObject.Parse(s_Recv);
|
||
Console.WriteLine(RecvJson);
|
||
int RecvType;
|
||
var method = new Action(delegate ()
|
||
{
|
||
if (nmHeler.Json_GetInt(RecvJson, "PackType", out RecvType) == true)
|
||
{
|
||
if (RecvType == NMHelper.Recv_QRCode)
|
||
{
|
||
Event_QRCode(RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.Recv_Login)
|
||
{
|
||
Event_Login((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.Recv_Logout)
|
||
{
|
||
Event_Logout((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.Recv_Msg)
|
||
{
|
||
Event_RecvMsg((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.Recv_SelectTalker)
|
||
{
|
||
Event_SelectTalker((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_GetContactList)
|
||
{
|
||
Event_RecvContactList((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_GetGroupMember)
|
||
{
|
||
Event_RecvGroupMember((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_GetWxidInfo)
|
||
{
|
||
Event_RecvWxidInfo((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_AddFriend)
|
||
{
|
||
Event_AddFriend((int)connId, RecvJson);//主动申请加别人
|
||
}
|
||
else if (RecvType == NMHelper.NM_CreateGroup)
|
||
{
|
||
Event_CreateGroup((int)connId, RecvJson);//建群
|
||
}
|
||
else if (RecvType == NMHelper.NM_GetFavList)
|
||
{
|
||
Event_GetFavList((int)connId, RecvJson);//收藏
|
||
}
|
||
else if (RecvType == NMHelper.NM_GetA8Key)
|
||
{
|
||
Event_GetA8Key((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_InvitePull)
|
||
{
|
||
Event_GroupInvite((int)connId, RecvJson);
|
||
}
|
||
else if (RecvType == NMHelper.NM_QuitGroup)
|
||
{
|
||
Event_GroupQuit((int)connId, RecvJson);
|
||
}
|
||
}
|
||
});
|
||
method.BeginInvoke(null, null);
|
||
return HandleResult.Ok;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
return HandleResult.Error;
|
||
}
|
||
|
||
private static void Event_QRCode(JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
int dwPid = 0;
|
||
nmHeler.Json_GetInt(RecvJson, "ProcessId", out dwPid);
|
||
string B64_QRCode = nmHeler.Json_GetString(RecvJson, "QRCode", false);
|
||
if (B64_QRCode != string.Empty)
|
||
{
|
||
byte[] imageBytes = Convert.FromBase64String(B64_QRCode);
|
||
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
|
||
ms.Write(imageBytes, 0, imageBytes.Length);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_GroupQuit(int ConnId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
string outLog = "[群员动态-退群]" + RecvWxid;
|
||
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
|
||
outLog += "群聊ID:" + GroupID;
|
||
JArray MemberList = RecvJson.Value<JArray>("List");
|
||
if (MemberList != null)
|
||
{
|
||
for (int i = 0; i < MemberList.Count; i++)
|
||
{
|
||
JToken JtMember = MemberList.ElementAt(i);
|
||
if (JtMember != null)
|
||
{
|
||
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
|
||
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
|
||
|
||
outLog += "[" + (i + 1).ToString() + "]";
|
||
outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_GroupInvite(int ConnId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
string outLog = "[群员动态-进群]" + RecvWxid;
|
||
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
|
||
outLog = "群聊ID:" + GroupID;
|
||
JArray MemberList = RecvJson.Value<JArray>("List");
|
||
if (MemberList != null)
|
||
{
|
||
for (int i = 0; i < MemberList.Count; i++)
|
||
{
|
||
JToken JtMember = MemberList.ElementAt(i);
|
||
if (JtMember != null)
|
||
{
|
||
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
|
||
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
|
||
string InvWxid = nmHeler.Json_GetString((JObject)JtMember, "InvWxid", true);
|
||
string InvNick = nmHeler.Json_GetString((JObject)JtMember, "InvNick", true);
|
||
outLog += "[" + (i + 1).ToString() + "]";
|
||
outLog += "进群人:" + Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
|
||
outLog += "邀请人:" + InvWxid + (InvNick == string.Empty ? string.Empty : "(" + InvNick + ")");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_GetA8Key(int ConnId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
string outLog = "[GetA8Key]" + RecvWxid;
|
||
string URL = nmHeler.Json_GetString(RecvJson, "URL", true);
|
||
string LastURL = nmHeler.Json_GetString(RecvJson, "LastURL", true);
|
||
outLog += "获取链接:" + URL;
|
||
outLog += "返回链接:" + LastURL;
|
||
|
||
|
||
//if (URL.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
|
||
//{
|
||
// HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(URL);
|
||
// Request.Method = "POST";
|
||
// Request.AllowAutoRedirect = false;
|
||
// Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
|
||
// Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.556.400 QQBrowser/9.0.2524.400";
|
||
// Request.Referer = URL;
|
||
// Request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4");
|
||
// HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
|
||
// string hLocation = Response.GetResponseHeader("Location").ToString();
|
||
// if (hLocation != "")
|
||
// {
|
||
// if (hLocation.IndexOf("chatroom") != -1)
|
||
// {
|
||
// string GroupID = nmHeler.StringMid(hLocation, "weixin://jump/mainframe/", "@chatroom");
|
||
// WriteLog("[接受群聊邀请]" + RecvWxid + "群聊ID:" + GroupID + "@chatroom");
|
||
// }
|
||
// }
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_GetFavList(int connId, JObject recvJson)
|
||
{
|
||
try
|
||
{
|
||
//string outLog = "[收藏列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) ;
|
||
//JArray FavList = RecvJson.Value<JArray>("List");
|
||
//if (FavList != null)
|
||
//{
|
||
// list_Fav.Items.Clear();
|
||
// int dwCount = FavList.Count;
|
||
// if (dwCount != 0)
|
||
// {
|
||
// list_Fav.BeginUpdate();
|
||
|
||
// for (int i = 0; i < dwCount; i++)
|
||
// {
|
||
// JToken JtMember = FavList.ElementAt(i);
|
||
// if (JtMember != null)
|
||
// {
|
||
// int Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
|
||
// string SearchKey = nmHeler.Json_GetString((JObject)JtMember, "SearchKey", true);
|
||
// string TypeName = nmHeler.GetFavType(Type);
|
||
// ListViewItem FavItem = new ListViewItem();
|
||
// FavItem.Text = i.ToString();
|
||
// FavItem.SubItems.Add(TypeName);
|
||
// FavItem.SubItems.Add(SearchKey == string.Empty ? "[" + TypeName + "文件]" : SearchKey);
|
||
// list_Fav.Items.Add(FavItem);
|
||
// }
|
||
// }
|
||
// list_Fav.EndUpdate();
|
||
// outLog += "收藏列表读取成功,共" + dwCount.ToString() + "条记录!";
|
||
// }
|
||
// else
|
||
// {
|
||
// outLog += "没有收藏";
|
||
// }
|
||
//}
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_CreateGroup(int ConnId, JObject RecvJson)
|
||
{
|
||
//try
|
||
//{
|
||
// string outLog = "[创建群聊]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
// string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
|
||
// string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
|
||
// outLog += "建群返回:" + Data;
|
||
// outLog += GroupID == string.Empty ? string.Empty : "群聊ID:" + GroupID;
|
||
// JArray MemberList = RecvJson.Value<JArray>("List");
|
||
// if (MemberList != null)
|
||
// {
|
||
// outLog += "群员列表:";
|
||
// for (int i = 0; i < MemberList.Count; i++)
|
||
// {
|
||
// JToken JtMember = MemberList.ElementAt(i);
|
||
// if (JtMember != null)
|
||
// {
|
||
// string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
|
||
// string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
|
||
// int state = nmHeler.Json_GetIntEx((JObject)JtMember, "State");
|
||
// if (Wxid != string.Empty)
|
||
// {
|
||
// outLog += "[" + state.ToString() + "]" + (state == 0 ? "[成功]" : "[失败]");
|
||
// outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
|
||
// }
|
||
// }
|
||
// }
|
||
// }
|
||
|
||
//}
|
||
//catch (Exception ex)
|
||
//{
|
||
// LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
//}
|
||
}
|
||
|
||
private static void Event_AddFriend(int ConnID, JObject RecvJson)
|
||
{
|
||
//try
|
||
//{
|
||
// string outLog = "[添加好友]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
// int DataType = nmHeler.Json_GetIntEx(RecvJson, "DataType");
|
||
// string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
|
||
// int Type = nmHeler.Json_GetIntEx(RecvJson, "Type");
|
||
// int AddType = nmHeler.Json_GetIntEx(RecvJson, "AddType");
|
||
// string Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
|
||
// string v2 = nmHeler.Json_GetString(RecvJson, "V2", true);
|
||
// string Message = nmHeler.Json_GetString(RecvJson, "Message", true);
|
||
|
||
// outLog += "添加返回:[" + DataType.ToString() + "]" + (DataType == 0 ? "已发送好友请求或已添加好友。" : Data);
|
||
// outLog += "添加类型:" + Type.ToString() + " 添加来源:" + AddType.ToString();
|
||
// outLog += "Wxid:" + Wxid;
|
||
// outLog += v2 == string.Empty ? string.Empty : "v2:" + v2;
|
||
// outLog += Message == string.Empty ? string.Empty : "附加消息:" + Message;
|
||
|
||
|
||
// if (Type == 1 && DataType == -44)
|
||
// {
|
||
// //nmCore.NM_AddFriend(ConnID, 2, AddType, Wxid, v2, text_Friend_Message.Text);
|
||
// nmCore.NM_AddFriend(ConnID, 2, AddType, Wxid, v2, string.Empty);//TODO 改成了string.e
|
||
// }
|
||
//}
|
||
//catch (Exception ex)
|
||
//{
|
||
//LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
//}
|
||
}
|
||
|
||
private static void Event_RecvWxidInfo(int connId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
//string outLog = "[下载详细信息]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
|
||
//int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
|
||
//if (dwState == -1) { outLog += "下载详细信息超时(原因:服务器无返回)!"; }
|
||
//else if (dwState == 0) { outLog += "下载详细信息失败(原因:可能是输入的Wxid不正确)!"; }
|
||
//else if (dwState == 1)
|
||
//{
|
||
// string szGroupID = nmHeler.Json_GetString(RecvJson, "GroupId", true);
|
||
// NMHelper.nmWxidInfo MemberInfo = new NMHelper.nmWxidInfo();
|
||
// MemberInfo.Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
|
||
// MemberInfo.WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
|
||
// MemberInfo.Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
|
||
// MemberInfo.V1 = nmHeler.Json_GetString(RecvJson, "v1", true);
|
||
// MemberInfo.HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
|
||
// MemberInfo.Address = nmHeler.Json_GetString(RecvJson, "Address", true);
|
||
// MemberInfo.Sex = MemberInfo.GetSex(nmHeler.Json_GetIntEx(RecvJson, "Sex"));
|
||
|
||
// outLog += szGroupID == string.Empty ? string.Empty : "群ID:" + szGroupID + NewLine;
|
||
// outLog += "Wxid:" + MemberInfo.Wxid + NewLine;
|
||
// outLog += MemberInfo.WxNo == string.Empty ? string.Empty : "微信号:" + MemberInfo.WxNo + NewLine;
|
||
// outLog += "昵称:" + MemberInfo.Nick + NewLine;
|
||
// outLog += MemberInfo.V1 == string.Empty ? string.Empty : "v1:" + MemberInfo.V1 + NewLine;
|
||
// outLog += "性别:" + MemberInfo.Sex + NewLine;
|
||
// outLog += MemberInfo.Address == string.Empty ? string.Empty : "地区:" + MemberInfo.Address + NewLine;
|
||
// outLog += MemberInfo.HeadIMG == string.Empty ? string.Empty : "头像:" + MemberInfo.HeadIMG + NewLine;
|
||
//}
|
||
//WriteLog(outLog);
|
||
|
||
|
||
var wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
|
||
var WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
|
||
var Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
|
||
var V1 = nmHeler.Json_GetString(RecvJson, "v1", true);
|
||
var HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
|
||
var Address = nmHeler.Json_GetString(RecvJson, "Address", true);
|
||
//var Sex = MemberInfo.GetSex(nmHeler.Json_GetIntEx(RecvJson, "Sex"));
|
||
|
||
if (Common.IsGzh(wxid, WechatClient.IsGzh)) return;
|
||
|
||
var f = new FriendInfo();
|
||
|
||
f.account = WxNo;
|
||
f.wxid = wxid;
|
||
f.nickname = Nick;
|
||
f.remark = Nick;
|
||
f.avatar = HeadIMG;
|
||
f.city = string.Empty;
|
||
f.country = string.Empty;
|
||
f.province = string.Empty;
|
||
f.sex = nmHeler.Json_GetIntEx(RecvJson, "Sex");
|
||
|
||
var user = WechatClient.GetUser((uint)connId, WechatType.Dazong);
|
||
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);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_RecvGroupMember(int ConnId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
//string outLog = "[群员列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
|
||
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
|
||
if (dwState == 0)//群员列表读取失败!
|
||
return;
|
||
JArray m_List = RecvJson.Value<JArray>("List");
|
||
if (m_List != null)
|
||
{
|
||
//var recv_wxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);//群主
|
||
var user = WechatClient.GetUser((uint)ConnId, WechatType.Dazong);
|
||
if (user == null)
|
||
return;
|
||
var group_wxid = nmHeler.Json_GetString(RecvJson, "GroupID", true);
|
||
var Count = (int)RecvJson["Count"];
|
||
var group = user.Groups.FirstOrDefault(z => z.wxid == group_wxid);
|
||
if (group == null)
|
||
{
|
||
group = new GroupInfo() { wxid = group_wxid, total_member = Count, friends = new List<FriendInfo>() };
|
||
user.Groups.Add(group);
|
||
}
|
||
else
|
||
group.total_member = Count;
|
||
|
||
for (int i = 0; i < m_List.Count; i++)
|
||
{
|
||
JToken JtMember = m_List.ElementAt(i);
|
||
if (JtMember != null)
|
||
{
|
||
var Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
|
||
var Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
|
||
var Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
|
||
var HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
|
||
|
||
var f = new FriendInfo();
|
||
f.account = Wxid;//item["account"]?.ToString();
|
||
f.avatar = HeadIMG;//item["avatar"]?.ToString();
|
||
f.city = string.Empty;//item["city"]?.ToString();
|
||
f.country = string.Empty;//item["country"]?.ToString();
|
||
f.nickname = Nick;//item["nickname"]?.ToString();
|
||
f.province = string.Empty;//item["province"]?.ToString();
|
||
f.remark = Mark;//item["remark"]?.ToString();
|
||
f.sex = -1;//int.Parse(item["sex"]?.ToString());
|
||
f.wxid = Wxid;//item["wxid"]?.ToString();
|
||
|
||
var friend = group.friends.FirstOrDefault(z => z.wxid == f.wxid);
|
||
if (friend == null)
|
||
group.friends.Add(f);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_RecvContactList(int ConnId, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
var user = WechatClient.GetUser((uint)ConnId, WechatType.Dazong);
|
||
if (user == null)
|
||
return;
|
||
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
|
||
if (dwState == 0)//通讯录列表读取失败!
|
||
return;
|
||
JArray m_List = RecvJson.Value<JArray>("List");
|
||
if (m_List != null)
|
||
{
|
||
for (int i = 0; i < m_List.Count; i++)
|
||
{
|
||
JToken JtMember = m_List.ElementAt(i);
|
||
if (JtMember != null)
|
||
{
|
||
var Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
|
||
var List = nmHeler.Json_GetIntEx((JObject)JtMember, "List");
|
||
var Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
|
||
var WxNo = nmHeler.Json_GetString((JObject)JtMember, "WxNo", true);
|
||
var Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
|
||
var Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
|
||
var HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
|
||
|
||
if (Type == 8 || Type == 24 || Type == 29)
|
||
continue;
|
||
else if (Wxid.LastIndexOf("@chatroom") != -1)
|
||
{
|
||
////UserItem.Text = MemberInfo.Nick == string.Empty ? "群聊" : MemberInfo.Nick;
|
||
////UserItem.SubItems.Add(MemberInfo.Wxid);
|
||
////UserItem.SubItems.Add(MemberInfo.WxNo);
|
||
////UserItem.SubItems.Add(MemberInfo.List.ToString());
|
||
////UserItem.SubItems.Add(MemberInfo.HeadIMG);
|
||
////list_Group.Items.Add(UserItem);
|
||
|
||
var f = new FriendInfo();
|
||
f.avatar = HeadIMG;
|
||
f.wxid = Wxid;
|
||
f.nickname = Nick;
|
||
f.remark = Mark;
|
||
f.manager_wxid = WxNo;
|
||
f.member_list = string.Empty;
|
||
|
||
var group = user.Groups.FirstOrDefault(z => z.wxid == f.wxid);
|
||
if (group == null)
|
||
{
|
||
//群不存在,去获取群成员信息
|
||
nmCore.NM_GetGroupMember(ConnId, f.wxid);
|
||
|
||
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);
|
||
|
||
}
|
||
else if (List != 2)
|
||
{
|
||
var f = new FriendInfo();
|
||
f.wxid = Wxid;
|
||
//f.account = item["account"]?.ToString();
|
||
f.nickname = Nick;//item["nickname"]?.ToString();
|
||
f.remark = Mark;//item["remark"]?.ToString();
|
||
f.avatar = HeadIMG;//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)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_SelectTalker(int connId, JObject recvJson)
|
||
{
|
||
//throw new NotImplementedException();
|
||
}
|
||
|
||
private static void Event_RecvMsg(int _dwClientid, JObject RecvJson)
|
||
{
|
||
try
|
||
{
|
||
var dwClientid = (uint)_dwClientid;
|
||
//NMHelper.nmMsgInfo MsgInfo = new NMHelper.nmMsgInfo();
|
||
var recv_wxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);//机器人账号
|
||
var wx_type = nmHeler.Json_GetIntEx(RecvJson, "Type");
|
||
var State = nmHeler.Json_GetIntEx(RecvJson, "State");
|
||
var Time = nmHeler.Json_GetIntEx(RecvJson, "Time");
|
||
var IsSend = nmHeler.Json_GetIntEx(RecvJson, "Sender");
|
||
var LocalMsgID = nmHeler.Json_GetIntEx(RecvJson, "LocalID");
|
||
var ServerMsgID = nmHeler.Json_GetString(RecvJson, "ServerID", false);
|
||
var Wxid_1 = nmHeler.Json_GetString(RecvJson, "Wxid_1", true);//发送者的账号 //to_wxid 为群的时候 为群号
|
||
var Nick_1 = nmHeler.Json_GetString(RecvJson, "Nick_1", true);//发送者的昵称
|
||
var Wxid_2 = nmHeler.Json_GetString(RecvJson, "Wxid_2", true); //群内发送人的账号
|
||
var Nick_2 = nmHeler.Json_GetString(RecvJson, "Nick_2", true);//发送者的昵称
|
||
var raw_msg = nmHeler.Json_GetString(RecvJson, "Msg", true);
|
||
var Source = nmHeler.Json_GetString(RecvJson, "Source", true);
|
||
|
||
|
||
|
||
var socketClient = EasySoc.GetSocket();
|
||
if (wx_type == 1)
|
||
{
|
||
|
||
if (Common.IsGzh(Wxid_1, WechatClient.IsGzh)) return;
|
||
|
||
Assistance ass = null;
|
||
if (IsSend == 1)
|
||
{
|
||
var from_qun = Wxid_1.Contains("@chatroom");
|
||
var from_wxid = from_qun ? Wxid_2 : Wxid_1;
|
||
|
||
if (from_qun && string.IsNullOrWhiteSpace(Wxid_2)) return;
|
||
|
||
if (!WechatClient.IsAuxiliaryInput(recv_wxid, from_qun ? Wxid_2 : Wxid_1, raw_msg))
|
||
{
|
||
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
|
||
return;
|
||
}
|
||
|
||
ass = WechatClient.IsAssistance(recv_wxid, Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, dwClientid, WechatType.Dazong);
|
||
// if (ass.type == WechatClient.AssistanceType.终止) return;
|
||
}
|
||
else
|
||
{
|
||
ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
|
||
}
|
||
|
||
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 (Wxid_1.Contains("@chatroom"))
|
||
{
|
||
wmsg.FromGroupid = Wxid_1;
|
||
wmsg.FromUsername = Wxid_2;
|
||
wmsg.FromUsernick = Nick_1 == ass.robotName ? ass.robotNick : string.Empty;
|
||
}
|
||
else
|
||
{
|
||
wmsg.FromUsername = ass.fromName;
|
||
wmsg.FromUsernick = ass.fromNick;
|
||
}
|
||
wmsg.FromMessage = raw_msg;
|
||
|
||
socketClient.Send(wmsg);
|
||
}
|
||
|
||
if (wx_type == 3 || wx_type == 34 || wx_type == 43 || wx_type == 49)//图片、语音、视频、文件
|
||
{
|
||
var ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
|
||
if (ass.type == WechatClient.AssistanceType.终止) return;
|
||
|
||
WechatReceiveMsg msg = new WechatReceiveMsg();
|
||
msg.Cmd = PCRobotCMD.rcvFile;
|
||
msg.IsSend = false;
|
||
if (wx_type == 3)//|| wx_type == 43)//图片
|
||
{
|
||
//string FileData = nmHeler.Json_GetString(RecvJson, "File", false);
|
||
//if (FileData != string.Empty)
|
||
//{
|
||
// byte[] FileBytes = Convert.FromBase64String(FileData);
|
||
// string FilePath = nmHeler.SaveFile(recv_wxid, Wxid_1, (wx_type == 3 ? "IMAGE" : "VOICE"), ServerMsgID, (wx_type == 3 ? "jpg" : "silk"), FileBytes);
|
||
|
||
|
||
|
||
// msg.Cmd = PCRobotCMD.rcvImg;
|
||
// msg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
|
||
// var path = Common.CacheFilePath(ass.robotName, ass.fromName, "IMAGE", ServerMsgID, "jpg");
|
||
// msg.FromMessage = $"[图片={path}]";
|
||
// msg.FromUsername = ass.fromName;
|
||
// msg.FromUsernick = string.Empty;//没有获取昵称
|
||
// msg.FromMessageType = WechatMsgType.图片;
|
||
// msg.FileCDNXML = raw_msg;
|
||
//}
|
||
//else
|
||
return;
|
||
}
|
||
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.文件;
|
||
|
||
//转账自动收款
|
||
if (IsSend == 0 && 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.Dazong);
|
||
if (user == null)
|
||
return;
|
||
reicevePay.RobotUsername = user.Wxid;
|
||
reicevePay.RobotUsernick = user.Nickname;
|
||
reicevePay.RobotType = RobotType.客户端微信;
|
||
reicevePay.FromUsername = recv_wxid;
|
||
reicevePay.FromUsernick = string.Empty;//没有获取昵称
|
||
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;
|
||
}
|
||
}
|
||
else if (raw_msg.Trim().Contains("<?xml "))
|
||
{
|
||
try
|
||
{
|
||
if (Common.IsGzh(recv_wxid, WechatClient.IsGzh)) return;
|
||
|
||
if (!WechatClient.IsAuxiliaryInput(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, raw_msg))
|
||
{
|
||
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
|
||
return;
|
||
}
|
||
|
||
ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
|
||
if (ass.type == WechatClient.AssistanceType.终止) return;
|
||
|
||
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 (Wxid_1.Contains("@chatroom"))
|
||
wmsg.FromGroupid = Wxid_1;
|
||
wmsg.FromUsername = ass.fromName;
|
||
wmsg.FromUsernick = ass.fromNick;
|
||
wmsg.FromMessage = raw_msg;
|
||
|
||
socketClient.Send(wmsg);
|
||
|
||
//return;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{ }
|
||
|
||
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);
|
||
}
|
||
|
||
if (wx_type == 37)//接收到好友申请请求
|
||
{
|
||
WechatApplyFriend wXApply = new WechatApplyFriend();
|
||
wXApply.Cmd = PCRobotCMD.applyFriend;
|
||
wXApply.RobotUsername = recv_wxid;
|
||
wXApply.RobotUsernick = WechatClient.GetUser(recv_wxid)?.Nickname;
|
||
wXApply.RobotType = RobotType.客户端微信;
|
||
//<msg fromusername="wxid_jhr9qilcujjn22" encryptusername="v1_8d1c84eda8b2f59471903e42413492ce5d24eb1c899db7523181cf7f1d84925f7e6374d8ab583c811e2c7890e588c15c@stranger" fromnickname="不到120不改昵称" content="退款软件购买" fullpy="budao120bugainichen" shortpy="BD120BGNC" imagestatus="3" scene="30" country="" province="" city="" sign="" percard="0" sex="0" alias="" weibo="" albumflag="0" albumstyle="0" albumbgimgid="" snsflag="1" snsbgimgid="http://szmmsns.qpic.cn/mmsns/z7ibQ8kx808bEXu8aMDJ5XibJspBpicbS0fFuAicZ5yxdCe9LDNdIhI8eGvFGibgx6mNYDVlfZYTTk84/0" snsbgobjectid="13323742204566581420" mhash="44d9a45239162b8f88bcc48369a08952" mfullhash="44d9a45239162b8f88bcc48369a08952" bigheadimgurl="http://wx.qlogo.cn/mmhead/ver_1/neKmZQe8jBEJAA1wxPOzqn9QsWnVARLmlj6iadV0NS0CpEaJjkDCyg2gfapJLp2EpnQqichVKibS3SY2bUNnJB7IKGUAUDaibNqPHTG6DOn32bw/0" smallheadimgurl="http://wx.qlogo.cn/mmhead/ver_1/neKmZQe8jBEJAA1wxPOzqn9QsWnVARLmlj6iadV0NS0CpEaJjkDCyg2gfapJLp2EpnQqichVKibS3SY2bUNnJB7IKGUAUDaibNqPHTG6DOn32bw/96" ticket="v4_000b708f0b04000001000000000034f757467feea167b94ecfb0be5e1000000050ded0b020927e3c97896a09d47e6e9e3feee786cf33d6902158bd2a4ac95c3a5e99e5dfe7a018433a610b54e312cccc2802085478422bddc7299b6f864fd5445489d18c59c8fa5ccf30317ed33e0d1f7fbd2c35172d0c6105fd5b4d3e155bb56e1dfee1fc43a332c926c47f386e9806b34b49f4c34877868f@stranger" opcode="2" googlecontact="" qrticket="" chatroomusername="" sourceusername="" sourcenickname="" sharecardusername="" sharecardnickname="" cardversion=""><brandlist count="0" ver="705242047"></brandlist></msg>
|
||
|
||
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;//这里好像要获取raw_msg 中 v1的值
|
||
|
||
socketClient.Send(wXApply);
|
||
}
|
||
|
||
if (wx_type == 10000)
|
||
{
|
||
//新人入群
|
||
if (!string.IsNullOrWhiteSpace(Wxid_1) && Wxid_1.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.Dazong);
|
||
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 (Wxid_1.Contains("@chatroom"))
|
||
{
|
||
newMember.GroupId = Wxid_1;
|
||
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.Dazong);
|
||
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 = Wxid_1;
|
||
msg.FromUserNick = reg1.Success ? reg1.Groups[1].Value : reg2.Groups[1].Value;
|
||
socketClient.Send(msg);
|
||
}
|
||
#endregion
|
||
}
|
||
}
|
||
|
||
//自动填充消息内容,用于撤回消息
|
||
//if (chk_RevokeFill.Checked == true && MsgInfo.IsSend == 1 && ConnID == (int)User.DwClientId)
|
||
//{
|
||
// text_Recvke_Wxid.Text = MsgInfo.Wxid_1;
|
||
// text_Recvke_Sid.Text = MsgInfo.ServerMsgID;
|
||
// text_Recvke_Message.Text = MsgInfo.Msg;
|
||
//}
|
||
////转账自动收款
|
||
//if (chk_GetMoney.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
|
||
//{
|
||
// if (MsgInfo.Msg.IndexOf("微信转账") != -1 && MsgInfo.Msg.IndexOf("收到转账") != -1)
|
||
// {
|
||
// string State = nmHeler.StringMid(MsgInfo.Msg, "<paysubtype>", "</paysubtype>");
|
||
// string Transid = nmHeler.StringMid(MsgInfo.Msg, "transferid><![CDATA[", "]]></transferid>");
|
||
// int dwTime = 0;
|
||
// int.TryParse(nmHeler.StringMid(MsgInfo.Msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
|
||
// if (State == "1" && Transid != string.Empty)
|
||
// {
|
||
// nmCore.NM_GetMoney(ConnID, MsgInfo.Wxid_1, Transid, dwTime);
|
||
// }
|
||
// }
|
||
//}
|
||
////名片消息自动填充数据
|
||
//if (chk_CardFill.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 42 && ConnID == (int)User.DwClientId)
|
||
//{
|
||
// string v1 = nmHeler.StringMid(MsgInfo.Msg, "username=\"", "\" nickname=");
|
||
// string v2 = nmHeler.StringMid(MsgInfo.Msg, "antispamticket=\"", "\" /");
|
||
// text_Friend_v1.Text = v1;
|
||
// text_Friend_v2.Text = v2;
|
||
//}
|
||
////自动接受群聊邀请
|
||
//if (chk_PassInvite.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
|
||
//{
|
||
// if (MsgInfo.Msg.IndexOf("邀请你加入群聊") != -1 && MsgInfo.Msg.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
|
||
// {
|
||
// string InviteURL = nmHeler.StringMid(MsgInfo.Msg, "<url><![CDATA[", "]]></url>");
|
||
// if (InviteURL != string.Empty)
|
||
// {
|
||
// nmCore.NM_GetA8Key(ConnID, MsgInfo.Wxid_1, InviteURL);
|
||
// }
|
||
// }
|
||
//}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static void Event_Logout(int ConnID, JObject recvJson)
|
||
{
|
||
try
|
||
{
|
||
|
||
var user = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == ConnID).Value;
|
||
if (user != null)
|
||
WechatClient.RemoveUser(user);
|
||
if (WechatClient.IsDebug)
|
||
{
|
||
LogHelper.GetSingleObj().Info("系统", $"LogOut_DaZong事件退出,Uin:{user.Uin},微信:{user.Nickname}({user.Wxid})");
|
||
LogHelper.GetSingleObj().Debug("调试注销", $"{user.Wxid}");
|
||
}
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
private static HandleResult OnAccept(IServer sender, IntPtr connId, IntPtr pClient)
|
||
{
|
||
nmCore.NM_Init((int)connId, "C#-864631110");
|
||
return HandleResult.Ok;
|
||
}
|
||
|
||
private static string DllPath;
|
||
|
||
public override string GetVersion()
|
||
{
|
||
return Version;
|
||
}
|
||
|
||
public static uint StartWechat()
|
||
{
|
||
try
|
||
{
|
||
var path = string.Empty;
|
||
|
||
var WechatWinFile = CsharpHttpHelper.HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
|
||
var md5 = Common.GetMD5Hash(WechatWinFile);
|
||
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
|
||
{
|
||
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 = CsharpHttpHelper.HttpExtend.MapFile("WeChat.exe", $"PCWechat\\" + Version);
|
||
path = HttpExtend.MapPath($"PCWechat\\" + Version);
|
||
|
||
string szDllPath = System.IO.Directory.GetCurrentDirectory() + "\\Bin\\" + NanMuCore;
|
||
var dwPid = NMHelper.NM_CreateWeChatProcess(path, "WeChat.exe", szDllPath, nmHeler.Socket_Port);
|
||
return (uint)dwPid;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
public override void GetGroupAndFriendInfo(string groupId, string wxid)
|
||
{
|
||
try
|
||
{
|
||
GroupInfo group = null;
|
||
if (groupId.Contains("@chatroom"))
|
||
{
|
||
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
||
if (g != null)
|
||
{
|
||
var 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)
|
||
{
|
||
nmCore.NM_GetWxidInfo((int)User.DwClientId, groupId, wxid);
|
||
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
|
||
{
|
||
DateTime end_time = DateTime.Now.AddSeconds(5);
|
||
do
|
||
{
|
||
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
||
if (g != null)
|
||
{
|
||
var 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;
|
||
}
|
||
}
|
||
|
||
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="circleId"></param>
|
||
public override void FindCircles(string circleId, string username)
|
||
{
|
||
try
|
||
{
|
||
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 = string.Empty;
|
||
|
||
socketClient.Send(msg);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void CreateRoom(string wxidData)
|
||
{
|
||
try
|
||
{
|
||
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 = string.Empty;
|
||
msg.MemberTotal = 0;
|
||
socketClient.Send(msg);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 自动授权登录小程序
|
||
/// </summary>
|
||
/// <param name="appid"></param>
|
||
public override void AutoAuthMiniAPPLogin(string appid)
|
||
{
|
||
try
|
||
{
|
||
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 = string.Empty;
|
||
|
||
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 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 = string.Empty;
|
||
|
||
socketClient.Send(msg);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
finally
|
||
{
|
||
User.SendCircleId = string.Empty;
|
||
}
|
||
}
|
||
|
||
public override void CircleUpLoadImage(string path)
|
||
{
|
||
try
|
||
{
|
||
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 = string.Empty;
|
||
|
||
socketClient.Send(msg);
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void GetGroupAndFriendInfo(string groupId, string wxid, bool flush = false)
|
||
{
|
||
try
|
||
{
|
||
GroupInfo group = null;
|
||
if (groupId.Contains("@chatroom"))
|
||
{
|
||
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
||
if (g != null)
|
||
{
|
||
if (flush)
|
||
{
|
||
g.friends.Clear();
|
||
}
|
||
else
|
||
{
|
||
var 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)
|
||
{
|
||
nmCore.NM_GetWxidInfo((int)User.DwClientId, groupId, wxid);
|
||
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
|
||
{
|
||
DateTime end_time = DateTime.Now.AddSeconds(5);
|
||
do
|
||
{
|
||
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
|
||
if (g != null)
|
||
{
|
||
var 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;
|
||
}
|
||
}
|
||
|
||
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 AgreeAddMe(string text)
|
||
{
|
||
try
|
||
{
|
||
nmCore.NM_PassApply((int)User.DwClientId, text);
|
||
}
|
||
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.Dazong).Value;
|
||
if (v != null)
|
||
{
|
||
LogHelper.GetSingleObj().Info("系统", $"CloseWechatDaZong事件退出,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 System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void DeleteFriend(string wxid)
|
||
{
|
||
nmCore.NM_DelFriend((int)User.DwClientId, wxid);
|
||
}
|
||
|
||
public override void EditCotacts(string wxid, string remark)
|
||
{
|
||
nmCore.NM_SetFriendMark((int)User.DwClientId, wxid, remark);
|
||
}
|
||
|
||
|
||
|
||
public override void GetGroupsNotInMember()
|
||
{
|
||
GetContact();
|
||
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);
|
||
}
|
||
|
||
public override void PayTransferConfirm(string data)
|
||
{
|
||
try
|
||
{
|
||
var transferid = string.Empty;
|
||
var invalidtime = string.Empty;
|
||
var wxid = string.Empty;
|
||
var dic = HttpExtend.JsonToDictionary(data);
|
||
if (dic.ContainsKey("Transferid"))
|
||
transferid = dic["Transferid"].ToString();
|
||
if (dic.ContainsKey("Invalidtime"))
|
||
invalidtime = dic["Invalidtime"].ToString();
|
||
if (dic.ContainsKey("WxId"))
|
||
wxid = dic["WxId"].ToString();
|
||
nmCore.NM_GetMoney((int)User.DwClientId, wxid, transferid, int.Parse(invalidtime));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void SendFile(string wxid, string file)
|
||
{
|
||
try
|
||
{
|
||
nmCore.NM_SendFileMsg((int)User.DwClientId, NMHelper.NM_SendFile, wxid, file);
|
||
Common.SetCache(User.Wxid, wxid, file);
|
||
}
|
||
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
|
||
{
|
||
if (card_wxid.Contains("@chatroom"))
|
||
nmCore.NM_InviteToGroup((int)User.DwClientId, NMHelper.NM_InviteURL, card_wxid, new string[] { to_wxid });
|
||
else
|
||
nmCore.NM_SendCardMsg((int)User.DwClientId, to_wxid, card_wxid);
|
||
Common.SetCache(User.Wxid, to_wxid, card_wxid);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.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
|
||
{ }
|
||
}
|
||
}
|
||
nmCore.NM_SendFileMsg((int)User.DwClientId, file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase) ? NMHelper.NM_SendGif : NMHelper.NM_SendPic, wxid, file);
|
||
Common.SetCache(User.Wxid, wxid, file);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void CheckUrl(string url)
|
||
{
|
||
try
|
||
{
|
||
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 = 0;
|
||
|
||
socketClient.Send(msg);
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void SendMessage(string wxid, string message)
|
||
{
|
||
try
|
||
{
|
||
var json = string.Empty;
|
||
message = message.Replace("\r\n", "\n");
|
||
if (Common.isXML(message))
|
||
{
|
||
//小程序
|
||
if (Regex.IsMatch(message, @"<appid>(?<appid>[^<]+)</appid>") || Regex.IsMatch(message, @"<pagepath>(.+?)</pagepath>"))
|
||
nmCore.NM_SendWeChatApp((int)User.DwClientId, wxid, message, string.Empty);//TODO 小程序未实现
|
||
else
|
||
nmCore.NM_SendURLMsg((int)User.DwClientId, wxid, message);
|
||
}
|
||
else
|
||
nmCore.NM_SendTextMsg((int)User.DwClientId, wxid, new string[] { }, message);
|
||
Common.SetCache(User.Wxid, wxid, message);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void SendVideo(string wxid, string path)
|
||
{
|
||
try
|
||
{
|
||
SendFile(wxid, path);
|
||
Common.SetCache(User.Wxid, wxid, path);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void StateOpt(string wxid, int status)
|
||
{
|
||
try
|
||
{
|
||
nmCore.NM_StateOpt((int)User.DwClientId, 2, wxid, status == 1);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
public override void GetWxidInfo(string wxid)
|
||
{
|
||
var u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
|
||
if (u == null)
|
||
{
|
||
nmCore.NM_GetWxidInfo((int)User.DwClientId, string.Empty, wxid);
|
||
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);
|
||
}
|
||
|
||
public override void GetFriend(string wxid)
|
||
{
|
||
nmCore.NM_GetWxidInfo((int)User.DwClientId, string.Empty, wxid);
|
||
}
|
||
|
||
public override void GetGroupMemer(string groupId)
|
||
{
|
||
try
|
||
{
|
||
nmCore.NM_GetGroupMember((int)User.DwClientId, groupId);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 卸载安装
|
||
/// </summary>
|
||
public static void UnInstall()
|
||
{
|
||
try
|
||
{
|
||
HP_Server?.Destroy();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
|
||
public override void GetContact()
|
||
{
|
||
try
|
||
{
|
||
//获取好友列表(数据库读取)
|
||
nmCore.NM_GetContactList((int)User.DwClientId);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|