Browse Source

增加C#版微信核心

Zhangtaotao 6 years ago
parent
commit
7693837e01
60 changed files with 12653 additions and 0 deletions
  1. 18 0
      .gitignore
  2. 12 0
      WeChatCore/Class1.cs
  3. 81 0
      WeChatCore/Common/CommonMethodCallBackHandlers.cs
  4. 84 0
      WeChatCore/Common/MethodsHelper.cs
  5. 79 0
      WeChatCore/Common/NotifyPropertyChanged.cs
  6. 62 0
      WeChatCore/Control/ImgeDefine.cs
  7. 58 0
      WeChatCore/DefineClass/CommonDefine.cs
  8. 37 0
      WeChatCore/DefineClass/ConfigDefine.cs
  9. 43 0
      WeChatCore/DefineClass/DirectoryDefine.cs
  10. 74 0
      WeChatCore/DefineClass/LogPathDefine.cs
  11. 116 0
      WeChatCore/DefineClass/UrlDefine.cs
  12. 120 0
      WeChatCore/Entity/AddMsgListItemEntity.cs
  13. 20 0
      WeChatCore/Entity/AppInfoEntity.cs
  14. 28 0
      WeChatCore/Entity/AutoRepateEntity.cs
  15. 68 0
      WeChatCore/Entity/BaseContactEntity.cs
  16. 36 0
      WeChatCore/Entity/BaseRequestEntity.cs
  17. 20 0
      WeChatCore/Entity/BaseResponseEntity.cs
  18. 16 0
      WeChatCore/Entity/BindEmailEntity.cs
  19. 16 0
      WeChatCore/Entity/BindMobileEntity.cs
  20. 136 0
      WeChatCore/Entity/ContactListItemEntity.cs
  21. 28 0
      WeChatCore/Entity/ContactsListEntity.cs
  22. 74 0
      WeChatCore/Entity/FileEntity.cs
  23. 24 0
      WeChatCore/Entity/GetMsgEntiy.cs
  24. 47 0
      WeChatCore/Entity/GroupContacts.cs
  25. 56 0
      WeChatCore/Entity/GroupMemberEntity.cs
  26. 27 0
      WeChatCore/Entity/GroupMemberListEntity.cs
  27. 21 0
      WeChatCore/Entity/ListItemEntity.cs
  28. 45 0
      WeChatCore/Entity/LoginResultEntity.cs
  29. 28 0
      WeChatCore/Entity/MPArticleListItemEntity.cs
  30. 32 0
      WeChatCore/Entity/MPSubscribeMsgListItemEntity.cs
  31. 237 0
      WeChatCore/Entity/MemberListItemEntity.cs
  32. 69 0
      WeChatCore/Entity/MsgEntity.cs
  33. 16 0
      WeChatCore/Entity/NickNameEntity.cs
  34. 35 0
      WeChatCore/Entity/NotifyPhoneEntity.cs
  35. 65 0
      WeChatCore/Entity/ProfileEntity.cs
  36. 71 0
      WeChatCore/Entity/ReceiveMsgEntity.cs
  37. 68 0
      WeChatCore/Entity/RecommendInfoEntity.cs
  38. 36 0
      WeChatCore/Entity/SendFileResultEntity.cs
  39. 23 0
      WeChatCore/Entity/SendMsgBodyEntity.cs
  40. 37 0
      WeChatCore/Entity/SendMsgEntity.cs
  41. 27 0
      WeChatCore/Entity/SendMsgResultEntity.cs
  42. 20 0
      WeChatCore/Entity/SyncKeyEntity.cs
  43. 88 0
      WeChatCore/Entity/UserEntity.cs
  44. 16 0
      WeChatCore/Entity/UserNameEntity.cs
  45. 23 0
      WeChatCore/Enum/AutoRepateEnum.cs
  46. 27 0
      WeChatCore/Enum/ContactType.cs
  47. 13 0
      WeChatCore/Enum/FileTypeEumn.cs
  48. 13 0
      WeChatCore/Enum/MediaTypeEnum.cs
  49. 20 0
      WeChatCore/Enum/MsgOwerTypeEnum.cs
  50. 61 0
      WeChatCore/Enum/MsgTypeEnum.cs
  51. 36 0
      WeChatCore/Properties/AssemblyInfo.cs
  52. BIN
      WeChatCore/Referce/Newtonsoft.Json.dll
  53. 9229 0
      WeChatCore/Referce/Newtonsoft.Json.xml
  54. BIN
      WeChatCore/Referce/x86/CommonTools.dll
  55. BIN
      WeChatCore/Referce/x86/HttpHelper.dll
  56. BIN
      WeChatCore/Referce/x86/ICSharpCode.SharpZipLib.dll
  57. BIN
      WeChatCore/Resource/DefultHeader.png
  58. 125 0
      WeChatCore/WeChatCore.csproj
  59. 6 0
      WeChatCore/WeChatCore.csproj.user
  60. 786 0
      WeChatCore/WeiChat.cs

+ 18 - 0
.gitignore

@@ -0,0 +1,18 @@
+WeChatCore/.vs/WeChatCore/v14/.suo
+WeChatCore/bin/Debug/CommonTools.dll
+WeChatCore/bin/Debug/CommonTools.pdb
+WeChatCore/bin/Debug/HttpHelper.dll
+WeChatCore/bin/Debug/HttpHelper.pdb
+WeChatCore/bin/Debug/ICSharpCode.SharpZipLib.dll
+WeChatCore/bin/Debug/Newtonsoft.Json.dll
+WeChatCore/bin/Debug/Newtonsoft.Json.xml
+WeChatCore/bin/Debug/WeChatCore.dll
+WeChatCore/bin/Debug/WeChatCore.pdb
+WeChatCore/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
+WeChatCore/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
+WeChatCore/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
+WeChatCore/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
+WeChatCore/obj/Debug/WeChatCore.csproj.FileListAbsolute.txt
+WeChatCore/obj/Debug/WeChatCore.dll
+WeChatCore/obj/Debug/WeChatCore.g.resources
+WeChatCore/obj/Debug/WeChatCore.pdb

+ 12 - 0
WeChatCore/Class1.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore
+{
+    public class Class1
+    {
+    }
+}

+ 81 - 0
WeChatCore/Common/CommonMethodCallBackHandlers.cs

@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WeChatCore.Entity;
+
+namespace WeChatCore.Common
+{
+    public static class CommonMethodCallBackHandlers
+    {
+        /// <summary>
+        /// 下载二维码完成
+        /// </summary>
+        public static event Action DownLoadQRCodeCompleted;
+        /// <summary>
+        /// 下载二维码完成
+        /// </summary>
+        public static void OnDownLoadQRCodeCompleted()
+        {
+            if (DownLoadQRCodeCompleted != null)
+                DownLoadQRCodeCompleted.Invoke();
+            else
+                throw new Exception("未实现方法CommonMethodCallBackHandlers.DownLoadQRCodeCompleted");
+        }
+        public static event Action<string> LoginScranQRCodeCompleted;
+        /// <summary>
+        /// s扫描二维码等待登录
+        /// </summary>
+        /// <param name="e"></param>
+        public static void OnLoginScranQRCodeCompleted(string Path)
+        {
+            if (LoginScranQRCodeCompleted != null)
+                LoginScranQRCodeCompleted.Invoke(Path);
+            else
+                throw new Exception("未实现方法CommonMethodCallBackHandlers.LoginScranQRCodeCompleted");
+        }
+        /// <summary>
+        /// 登录完成
+        /// </summary>
+        public static event Action<bool> LoginCompleted;
+        /// <summary>
+        /// 登录成功
+        /// </summary>
+        public static void OnLoginCompleted(bool e = false)
+        {
+
+            if (LoginCompleted != null)
+                LoginCompleted.Invoke(e);
+            else
+                throw new Exception("未实现方法CommonMethodCallBackHandlers.LoginCompleted");
+        }
+        public static event Action<MsgEntity> ReceivedMsgAnalyseMsgCompleted;
+        /// <summary>
+        /// 接受并分析消息
+        /// </summary>
+        /// <param name="Me">重新封装组合的消息列表</param>
+        public static void OnReceivedMsgAnalyseMsgCompleted(MsgEntity Me)
+        {
+            if (ReceivedMsgAnalyseMsgCompleted != null)
+                ReceivedMsgAnalyseMsgCompleted.Invoke(Me);
+            else
+                throw new Exception("未实现方法CommonMethodCallBackHandlers.ReceivedMsgAnalyseMsgCompleted");
+        }
+        /// <summary>
+        /// 发送消息完成
+        /// </summary>
+        public static event Action<bool> SendMsgCompleted;
+        /// <summary>
+        /// 发送消息完成
+        /// </summary>
+        /// <param name="e"></param>
+        public static void OnSendMsgCompleted(bool e)
+        {
+            if (SendMsgCompleted != null)
+                SendMsgCompleted.Invoke(e);
+            else
+                throw new Exception("未实现方法CommonMethodCallBackHandlers.SendMsgCompleted");
+        }
+    }
+}

+ 84 - 0
WeChatCore/Common/MethodsHelper.cs

@@ -0,0 +1,84 @@
+using CommonTools;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Common
+{
+    /// <summary>
+    /// 方法合集
+    /// </summary>
+    public static class MethodsHelper
+    {
+        /// <summary>
+        /// 返回ClientMsgId
+        /// </summary>
+        /// <returns></returns>
+        public static string GetClientMsgId()
+        {
+            string UnixTimeSpan = DateTimeToosHelper.GetUnixTimeSpan().ToString();
+            // UnixTimeSpan = UnixTimeSpan.Substring(0, 4) + GetThreeNumber() + new Random().Next(0, 9);
+            return UnixTimeSpan + GetThreeNumber() + GetThreeNumber() + new Random().Next(0, 9);
+        }
+        /// <summary>
+        /// 返回三位随机数
+        /// </summary>
+        /// <returns></returns>
+        public static string GetThreeNumber()
+        {
+            Random r = new Random();
+            StringBuilder sb = new StringBuilder();
+            int i = r.Next(0, 9);
+            sb.Append(i);
+            int j = r.Next(i, 9);
+            sb.Append(j);
+            int k = r.Next(j, 9);
+            sb.Append(k);
+            return sb.ToString();
+        }
+        public static string GetDeviceId()
+        {//DeviceID=e3244 3631 0531 059
+            Random r = new Random();
+            StringBuilder sb = new StringBuilder();
+            int i = r.Next(0, 9);
+            sb.Append(i);
+            int j = r.Next(i, 9);
+            sb.Append(j);
+            int k = r.Next(j, 9);
+            sb.Append(k);
+
+            i = r.Next(k, 9);
+            sb.Append(i);
+            j = r.Next(i, 9);
+            sb.Append(j);
+            k = r.Next(j, 9);
+            sb.Append(k);
+
+            i = r.Next(k, 9);
+            sb.Append(i);
+            j = r.Next(i, 9);
+            sb.Append(j);
+            k = r.Next(j, 9);
+            sb.Append(k);
+            sb.Append(GetThreeNumber());
+            return "e" + sb.ToString();
+        }
+        /// <summary>
+        /// 生成本地MP3文件
+        /// </summary>
+        /// <param name="UserName">当前用户名</param>
+        /// <returns>返回文件是UUID</returns>
+        public static string MsgSaveFile(string FilePath)
+        {
+            if (!Directory.Exists(Environment.CurrentDirectory + "\\" + FilePath))
+                Directory.CreateDirectory(Environment.CurrentDirectory + "\\" + FilePath);
+            //    byte[] message = Convert.FromBase64String(Base64Code);
+            string Guids = Guid.NewGuid().ToString().ToUpper().Replace("-", "");
+            //string FilePath = Environment.CurrentDirectory + "\\" + UserName + "\\" + Guids + ".mp3";
+            return Guids;
+        }
+    }
+}

+ 79 - 0
WeChatCore/Common/NotifyPropertyChanged.cs

@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Common
+{
+
+    public class NotifyPropertyChanged : INotifyPropertyChanged
+    {
+
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        /// <summary>
+
+        /// 一般实现通知办法
+
+        /// </summary>
+
+        /// <param name="PropertyName"></param>
+
+        public void RaisePropertyChanged(string PropertyName)
+        {
+            if (PropertyChanged != null)
+            {
+                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
+            }
+        }
+
+        /// <summary>
+
+        /// 监听属性改变并发出通知
+
+        /// </summary>
+
+        /// <typeparam name="T">类型</typeparam>
+
+        /// <param name="proertyExpression">属性表达式</param>
+
+        public void RaisePropertyChanged<T>(Expression<Func<T>> proertyExpression)
+        {
+            if (PropertyChanged != null)
+            {
+                string propertyName = GetPropertyName<T>(proertyExpression);
+                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+            }
+        }
+        /// </summary>
+
+        /// <typeparam name="T">属性</typeparam>
+
+        /// <param name="proertyExpression">Linq表达式</param>
+
+        /// <returns></returns>
+
+        private string GetPropertyName<T>(Expression<Func<T>> proertyExpression)
+        {
+            if (proertyExpression == null)
+            {
+                throw new ArgumentNullException("proertyExpression");
+            }
+            MemberExpression mp = proertyExpression.Body as MemberExpression;
+            if (mp == null)
+            {
+                throw new ArgumentException("Invalid Argument", "proertyExpression");
+            }
+            PropertyInfo proInfo = mp.Member as PropertyInfo;
+            if (proInfo == null)
+            {
+                throw new ArgumentException("Argument is not a property", "proertyExpression");
+            }
+            return proInfo.Name;
+        }
+    }
+}

+ 62 - 0
WeChatCore/Control/ImgeDefine.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media.Imaging;
+using WeChatCore.DefineClass;
+
+namespace WeChatCore.Control
+{
+    public class ImgeDefine : Image
+    {
+        private static readonly DependencyProperty ImageSourceDefineProperty = DependencyProperty.Register("ImageSourceDefine", typeof(string), typeof(ImgeDefine), new PropertyMetadata(new PropertyChangedCallback(ImageSourceCallBack)));
+
+        private static void ImageSourceCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
+        {
+            ImgeDefine id = d as ImgeDefine;
+            //ToDo
+            new Task(() =>
+            {
+                List<byte> b = (List<byte>)HttpHelper.HttpMethods.GetFile(UrlDefine.RootUrl + id.ImageSourceDefine, "", CommonDefine.Cookies).ContentData;
+                Application.Current.Dispatcher.Invoke(new Action(() =>
+                {
+                    MemoryStream ms = new MemoryStream(b.ToArray());
+                    BitmapImage bi = new BitmapImage();
+                    bi.BeginInit();
+                    bi.StreamSource = ms;// new FileStream();
+                    bi.EndInit();
+                    id.Source = bi;
+                }));
+            }).Start();
+            //if (string.IsNullOrWhiteSpace(HeadUrlDef))
+            //{
+            //    // string uuid = MethodsHelper.MsgSaveFile(DirectoryDefine.HeaderImagePath);
+            //    HttpHelper.HttpMethods.GetFile(UrlDefine.RootUrl + HeadImgUrl, Environment.CurrentDirectory + "\\" + DirectoryDefine.HeaderImagePath + "\\" + uuid + ".jpg", CommonDefine.Cookies);
+            //    Application.Current.Dispatcher.Invoke(new Action(() =>
+            //    {
+            //        id.Source = Environment.CurrentDirectory + "\\" + DirectoryDefine.HeaderImagePath + "\\" + uuid + ".jpg";
+            //    }));
+            //}
+            //else
+            //{
+            //    LogWriter.Write(string.Format("当前人员{0}已有头像", DisplayNameDef), LogPathDefine.WeChatLogPath);
+            //}
+        }
+
+        public string ImageSourceDefine
+        {
+            get
+            {
+                return (string)GetValue(ImageSourceDefineProperty);
+            }
+            set
+            {
+                SetValue(ImageSourceDefineProperty, value);
+            }
+        }
+    }
+}

+ 58 - 0
WeChatCore/DefineClass/CommonDefine.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media.Imaging;
+using WeChatCore.Entity;
+
+namespace WeChatCore.DefineClass
+{
+    public static class CommonDefine
+    {
+        /// <summary>
+        /// Cookie
+        /// </summary>
+        public static System.Net.CookieContainer Cookies { get; set; }
+        /// <summary>
+        /// 个人头像
+        /// </summary>
+        public static BitmapImage UserImage { get; set; }
+        /// <summary>
+        /// 个人头像
+        /// </summary>
+        public static string Base64 { get; set; }
+        /// <summary>
+        /// 登录结果
+        /// </summary>
+        public static LoginResultEntity LoginResult { get; set; }
+        /// <summary>
+        /// 最近联系人包含自己个人信息
+        /// </summary>
+        public static BaseContactEntity BaseContact { get; set; }
+        /// <summary>
+        /// 同步Key
+        /// </summary>
+        public static SyncKeyEntity SyncKey { get; set; }
+        /// <summary>
+        /// 联系人列表
+        /// </summary>
+        public static ContactsListEntity ContactsList { get; set; }
+        /// <summary>
+        /// 群成员列表
+        /// </summary>
+        public static GroupMemberListEntity GroupMemberList { get; set; }
+        /// <summary>
+        /// 同步Key获取消息用
+        /// </summary>
+        public static string GetMsgSyncKey { get; set; }
+        /// <summary>
+        /// 获取set-cookie
+        /// </summary>
+        public static Dictionary<string, string> GetCookieDictionary = new Dictionary<string, string>();
+        /// <summary>
+        /// 白名单
+        /// </summary>
+        public static List<MemberListItemEntity> WhiteUserList { get; set; }
+    }
+}

+ 37 - 0
WeChatCore/DefineClass/ConfigDefine.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.DefineClass
+{
+    /// <summary>
+    /// 配置路径
+    /// </summary>
+    public class ConfigDefine
+    {
+        /// <summary>
+        /// 获取根路径
+        /// </summary>
+        /// <returns></returns>
+        public static string GetLogDirectory()
+        {
+            string DirectoryPath = Environment.CurrentDirectory + "\\Config";
+            if (!Directory.Exists(DirectoryPath))
+                Directory.CreateDirectory(DirectoryPath);
+            return DirectoryPath;
+        }
+        /// <summary>
+        /// 微信群日志
+        /// </summary>
+        public static string WeChatAutoReplyPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\AutoReply.conf";
+            }
+        }
+    }
+}

+ 43 - 0
WeChatCore/DefineClass/DirectoryDefine.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.DefineClass
+{
+    /// <summary>
+    /// 路径文件
+    /// </summary>
+    public class DirectoryDefine
+    {
+        /// <summary>
+        /// 语音消息储存路径
+        /// </summary>
+        public static string VoiceMsgPath = "Data\\Voice";
+        /// <summary>
+        /// 视频路径
+        /// </summary>
+        public static string VideoMsgPath = "Data\\Video";
+        /// <summary>
+        /// 图片路径
+        /// </summary>
+        public static string ImageMsgPath = "Data\\Image";
+        /// <summary>
+        /// 小图片路径
+        /// </summary>
+        public static string ImageMsgTempPath = "Data\\Image\\Temp";
+        /// <summary>
+        /// 头像路径
+        /// </summary>
+        public static string HeaderImagePath = "Data\\HeaderImage";
+        /// <summary>
+        /// 动画路径
+        /// </summary>
+        public static string ImageMsgGifPath = "Data\\Gif";
+        /// <summary>
+        /// 地图消息
+        /// </summary>
+        public static string MapImageMsgPath = "Data\\MapImage";
+    }
+}

+ 74 - 0
WeChatCore/DefineClass/LogPathDefine.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.DefineClass
+{
+    public class LogPathDefine
+    {
+        /// <summary>
+        /// 获取根路径
+        /// </summary>
+        /// <returns></returns>
+        public static string GetLogDirectory()
+        {
+            string DirectoryPath = Environment.CurrentDirectory + "\\Log";
+            if (!Directory.Exists(DirectoryPath))
+                Directory.CreateDirectory(DirectoryPath);
+            return DirectoryPath;
+        }
+        /// <summary>
+        /// 系统日志
+        /// </summary>
+        public static string SystemLogPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\System.log";
+            }
+        }
+        /// <summary>
+        /// 微信正常日志
+        /// </summary>
+        public static string WeChatLogPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\WeChat.log";
+            }
+        }
+        /// <summary>
+        /// 微信正常日志
+        /// </summary>
+        public static string WeChatErrorLogPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\WeChatError.log";
+            }
+        }
+        /// <summary>
+        /// 系统异常日志
+        /// </summary>
+        public static string ExceptionLogPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\Exception.log";
+            }
+        }
+        /// <summary>
+        /// 微信群日志
+        /// </summary>
+        public static string WeChatGrouplogPath
+        {
+            get
+            {
+                return GetLogDirectory() + "\\WeChatGroup.log";
+            }
+        }
+    }
+}

+ 116 - 0
WeChatCore/DefineClass/UrlDefine.cs

@@ -0,0 +1,116 @@
+using CommonTools;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WeChatCore.Common;
+
+namespace WeChatCore.DefineClass
+{
+    /// <summary>
+    /// Url定义
+    /// </summary>
+    public static class UrlDefine
+    {
+        /// <summary>
+        /// Loginurl
+        /// </summary>
+        public static string LoginUrls { get; set; }
+        /// <summary>
+        /// 唯一对应UUID
+        /// </summary>
+        public static string Tickets { get; set; }
+        /// <summary>
+        /// 网站主目录
+        /// </summary>
+        public static string RootUrl = "https://wx.qq.com";
+        /// <summary>
+        /// 登录url 返回值:window.QRLogin.code = 200; window.QRLogin.uuid = "Yc4SuTCdqw==";
+        /// </summary>
+        public static string LoginUrl = "https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Flogin.weixin.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1455781223306";
+        /// <summary>
+        /// 获得Token的url(验证码图片)
+        /// </summary>
+        public static string LoginUrlWithToken = "https://login.weixin.qq.com/qrcode/";
+        /// <summary>
+        /// 等待Url
+        /// </summary>
+        public static string HoldOnUrl = "https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=";// + Tickets + "&tip=0&r=1499867820&_=1497443441656";
+        /// <summary>
+        /// 获取登录地址
+        /// </summary>
+        /// <param name="uuid"></param>
+        /// <returns></returns>
+        public static string WaitingUrl(string uuid)
+        {
+            return HoldOnUrl + uuid + "&tip=0&r=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + "& _=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + MethodsHelper.GetThreeNumber();
+        }
+        /// <summary>
+        /// 获取个人信息
+        /// </summary>
+        public static string GetLoginId = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + "&lang=zh_CN&pass_ticket=";
+        /// <summary>
+        /// 获取联系人
+        /// </summary>
+        public static string ContactUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?pass_ticket=";
+        /// <summary>
+        /// 聊天url
+        /// </summary>
+        public static string ChatUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=";
+        /// <summary>
+        /// 获取联系人信息
+        /// </summary>
+        /// <param name="tickets"></param>
+        /// <param name="skey"></param>
+        /// <returns></returns>
+        public static string GetContactUrl(string tickets, string skey)
+        {
+            return ContactUrl + tickets + "&r=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + "& seq=0&skey=" + skey;
+        }
+        /// <summary>
+        /// 获取SyncKey后加参数Pass_ticket
+        /// </summary>
+        public static string GetSyncKey = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + "&pass_ticket=";
+        /// <summary>
+        /// 心跳url
+        /// </summary>
+        public static string HeartUrl = "https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck?";
+        /// <summary>
+        /// 获取信息url
+        /// </summary>
+        public static string GetChatUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?";
+        /// <summary>
+        /// 获取语音消息
+        /// </summary>
+        public static string VoiceUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvoice?msgid={0}&skey={1}";
+        /// <summary>
+        /// 获取图片信息
+        /// </summary>
+        public static string ImgUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID={0}&skey={1}&type=slave";
+        /// <summary>
+        /// 大图
+        /// </summary>
+        public static string ImgUrlBig = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID={0}&skey={1}";
+        /// <summary>
+        /// 视频地址
+        /// </summary>
+        public static string VideoUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetvideo?msgid={0}&skey={1}";
+        /// <summary>
+        /// 获取地图图片
+        /// </summary>
+        public static string MapUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetpubliclinkimg?url=xxx&msgid={0}&pictype=location";
+        /// <summary>
+        /// 获取群成员信息
+        /// </summary>
+        public static string GetQunContactUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?type=ex&r=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + MethodsHelper.GetThreeNumber() + "&pass_ticket={0}";
+        /// <summary>
+        /// 与手机的心跳keep
+        /// </summary>
+        public static string WexNotifyUrl = "https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify?pass_ticket=";
+        /// <summary>
+        /// 发送文件
+        /// </summary>
+        public static string SendFileUrl = "https://file.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json";
+    }
+}

+ 120 - 0
WeChatCore/Entity/AddMsgListItemEntity.cs

@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class AddMsgListItemEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MsgId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FromUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ToUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MsgType { get; set; }
+        /// <summary>
+        /// 来来来
+        /// </summary>
+        public string Content { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Status { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ImgStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int CreateTime { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int VoiceLength { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int PlayLength { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FileName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FileSize { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MediaId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Url { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AppMsgType { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int StatusNotifyCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string StatusNotifyUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public RecommendInfoEntity RecommendInfo { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ForwardFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public AppInfoEntity AppInfo { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HasProductId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Ticket { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ImgHeight { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ImgWidth { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int SubMsgType { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long NewMsgId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string OriContent { get; set; }
+    }
+}

+ 20 - 0
WeChatCore/Entity/AppInfoEntity.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class AppInfoEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string AppID { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Type { get; set; }
+    }
+}

+ 28 - 0
WeChatCore/Entity/AutoRepateEntity.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WeChatCore.Enum;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 自动回复实体
+    /// </summary>
+    public class AutoRepateEntity
+    {
+        /// <summary>
+        /// 自动回复类型
+        /// </summary>
+        public AutoRepateEnum AutoRepateType { get; set; }
+        /// <summary>
+        /// 自动回复开关
+        /// </summary>
+        public string AutoReplySwitch { get; set; }
+        /// <summary>
+        /// 自动回复内容
+        /// </summary>
+        public string ReplyContent { get; set; }
+    }
+}

+ 68 - 0
WeChatCore/Entity/BaseContactEntity.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class BaseContactEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Count { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<ContactListItemEntity> ContactList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public SyncKeyEntity SyncKey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public UserEntity User { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ChatSet { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string SKey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ClientVersion { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int SystemTime { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int GrayScale { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int InviteStartCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MPSubscribeMsgCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MPSubscribeMsgListItemEntity> MPSubscribeMsgList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ClickReportInterval { get; set; }
+    }
+}

+ 36 - 0
WeChatCore/Entity/BaseRequestEntity.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class BaseRequestEntity
+    {
+      
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Uin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Sid { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Skey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string DeviceID { get; set; }
+    }
+    public class BaseRequestSubmitEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseRequestEntity BaseRequest { get; set; }
+    }
+}

+ 20 - 0
WeChatCore/Entity/BaseResponseEntity.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class BaseResponseEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Ret { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ErrMsg { get; set; }
+    }
+}

+ 16 - 0
WeChatCore/Entity/BindEmailEntity.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class BindEmailEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Buff { get; set; }
+    }
+}

+ 16 - 0
WeChatCore/Entity/BindMobileEntity.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class BindMobileEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Buff { get; set; }
+    }
+}

+ 136 - 0
WeChatCore/Entity/ContactListItemEntity.cs

@@ -0,0 +1,136 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class ContactListItemEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Uin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 文件传输助手
+        /// </summary>
+        public string NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HeadImgUrl { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ContactFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MemberCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MemberListItemEntity> MemberList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HideInputBarFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Sex { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Signature { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int VerifyFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int OwnerUin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int StarFriend { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AppAccountFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Statues { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long AttrStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Province { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string City { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Alias { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int SnsFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int UniFriend { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string DisplayName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ChatRoomId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string KeyWord { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string EncryChatRoomId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int IsOwner { get; set; }
+    }
+}

+ 28 - 0
WeChatCore/Entity/ContactsListEntity.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class ContactsListEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MemberCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MemberListItemEntity> MemberList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Seq { get; set; }
+    }
+}

+ 74 - 0
WeChatCore/Entity/FileEntity.cs

@@ -0,0 +1,74 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WeChatCore.Enum;
+
+namespace WeChatCore.Entity
+{
+    public class FileEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int UploadType { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseRequestEntity BaseRequest { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ClientMediaId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long TotalLen { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long StartPos { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long DataLen { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public MediaTypeEnum MediaType { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FromUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ToUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FileMd5 { get; set; }
+        /// <summary>
+        /// 文件名称
+        /// </summary>
+        [JsonIgnore]
+        public string FileName { get; set; }
+        /// <summary>
+        /// 文件修改时间
+        /// </summary>
+        [JsonIgnore]
+        public string FileModiftTime { get; set; }
+        /// <summary>
+        /// 传输的文件类型(image/jpeg)
+        /// </summary>
+        [JsonIgnore]
+        public string FileType { get; set; }
+        /// <summary>
+        /// 媒体类型(pic)
+        /// </summary>
+        [JsonIgnore]
+        public string Mediatype { get; set; }
+    }
+}

+ 24 - 0
WeChatCore/Entity/GetMsgEntiy.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class GetMsgEntiy
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseRequestEntity BaseRequest { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public SyncKeyEntity SyncKey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int rr { get; set; }
+    }
+}

+ 47 - 0
WeChatCore/Entity/GroupContacts.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class GroupListItem
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        private string _EncryChatRoomId = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string EncryChatRoomId
+        {
+            get
+            {
+                return _EncryChatRoomId;
+            }
+            set
+            {
+                _EncryChatRoomId = value;
+            }
+        }
+    }
+    public class GroupContacts
+    {
+      
+            /// <summary>
+            /// 
+            /// </summary>
+            public BaseRequestEntity BaseRequest { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public int Count { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public List<GroupListItem> List { get; set; }
+    }
+}

+ 56 - 0
WeChatCore/Entity/GroupMemberEntity.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class GroupMemberEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Uin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long AttrStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MemberStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string DisplayName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string KeyWord { get; set; }
+    }
+}

+ 27 - 0
WeChatCore/Entity/GroupMemberListEntity.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 群成员列表
+    /// </summary>
+    public class GroupMemberListEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Count { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MemberListItemEntity> ContactList { get; set; }
+    }
+}

+ 21 - 0
WeChatCore/Entity/ListItemEntity.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+
+    public class ListItemEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Key { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Val { get; set; }
+    }
+}

+ 45 - 0
WeChatCore/Entity/LoginResultEntity.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 登录结果实体
+    /// </summary>
+    [XmlRoot("error")]
+    public class LoginResultEntity
+    {
+        /// <summary>
+        /// code
+        /// </summary>
+        public string ret { get; set; }
+        /// <summary>
+        /// 信息
+        /// </summary>
+        public string message { get; set; }
+        /// <summary>
+        /// sky值
+        /// </summary>
+        public string skey { get; set; }
+        /// <summary>
+        /// 微信ID
+        /// </summary>
+        public string wxsid { get; set; }
+        /// <summary>
+        /// 微信UIN
+        /// </summary>
+        public string wxuin { get; set; }
+        /// <summary>
+        /// 微信凭证
+        /// </summary>
+        public string pass_ticket { get; set; }
+        /// <summary>
+        /// unknown
+        /// </summary>
+        public string isgrayscale { get; set; }
+    }
+}

+ 28 - 0
WeChatCore/Entity/MPArticleListItemEntity.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class MPArticleListItemEntity
+    {
+        /// <summary>
+        /// 我偷看了老板的微信分组,惊呆了……
+        /// </summary>
+        public string Title { get; set; }
+        /// <summary>
+        /// 人生在世都是戏。
+        /// </summary>
+        public string Digest { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Cover { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Url { get; set; }
+    }
+}

+ 32 - 0
WeChatCore/Entity/MPSubscribeMsgListItemEntity.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class MPSubscribeMsgListItemEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MPArticleCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MPArticleListItemEntity> MPArticleList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Time { get; set; }
+        /// <summary>
+        /// 算法与数据结构
+        /// </summary>
+        public string NickName { get; set; }
+    }
+}

+ 237 - 0
WeChatCore/Entity/MemberListItemEntity.cs

@@ -0,0 +1,237 @@
+using CommonTools;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using WeChatCore.Common;
+using WeChatCore.DefineClass;
+
+namespace WeChatCore.Entity
+{
+    public class MemberListItemEntity : NotifyPropertyChanged
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Uin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public long AttrStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MemberStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string DisplayName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string KeyWord { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HeadImgUrl { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ContactFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int MemberCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<GroupMemberEntity> MemberList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HideInputBarFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Sex { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Signature { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int VerifyFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int OwnerUin { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int StarFriend { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AppAccountFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Statues { get; set; }
+        /// <summary>
+        /// 河北
+        /// </summary>
+        public string Province { get; set; }
+        /// <summary>
+        /// 唐山
+        /// </summary>
+        public string City { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Alias { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int SnsFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int UniFriend { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ChatRoomId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string EncryChatRoomId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int IsOwner { get; set; }
+        private string _DisplayNameDef = string.Empty;
+        [JsonIgnore]
+        public string DisplayNameDef
+        {
+            get
+            {
+                if (string.IsNullOrWhiteSpace(RemarkName))
+                    return NickName;
+                else
+                    return RemarkName + "(" + NickName + ")";
+            }
+            set
+            {
+                _DisplayNameDef = value;
+            }
+        }
+        private string _HeadUrlDef = string.Empty;
+        [JsonIgnore]
+        public string HeadUrlDef
+        {
+            get
+            {
+                return _HeadUrlDef;
+            }
+            set
+            {
+                _HeadUrlDef = value;
+                RaisePropertyChanged(() => HeadUrlDef);
+                RaisePropertyChanged(() => ImageSource);
+            }
+        }
+        private int _MsgCount = 0;
+        /// <summary>
+        /// 消息数量
+        /// </summary>
+        [JsonIgnore]
+        public int MsgCount
+        {
+            get
+            {
+                return _MsgCount;
+            }
+            set
+            {
+                _MsgCount = value;
+            }
+        }
+        public ImageSource ImageSource
+        {
+            get
+            {
+                try
+                {
+                    if (string.IsNullOrWhiteSpace(HeadUrlDef))
+                    {
+                        return new BitmapImage(new Uri("pack://application:,,,/WeChatCore;component/Resource/DefultHeader.png"));
+                    }
+                    return new BitmapImage(new Uri(HeadUrlDef));
+                }
+                catch (Exception ex)
+                {
+                    LogWriter.Write("设置头像发生异常" + DisplayNameDef, LogPathDefine.ExceptionLogPath);
+                    return new BitmapImage(new Uri("pack://application:,,,/WeChatCore;component/Resource/DefultHeader.png"));
+                }
+            }
+        }
+        public void DownloadImage()
+        {
+            if (string.IsNullOrWhiteSpace(HeadUrlDef))
+            {
+                string uuid = MethodsHelper.MsgSaveFile(DirectoryDefine.HeaderImagePath);
+                HttpHelper.HttpMethods.GetFile(UrlDefine.RootUrl + HeadImgUrl, Environment.CurrentDirectory + "\\" + DirectoryDefine.HeaderImagePath + "\\" + uuid + ".jpg", CommonDefine.Cookies);
+                Application.Current.Dispatcher.Invoke(new Action(() =>
+                {
+                    FileInfo fileInfo = new FileInfo(Environment.CurrentDirectory + "\\" + DirectoryDefine.HeaderImagePath + "\\" + uuid + ".jpg");
+                    if (fileInfo.Length == 0)
+                        HeadUrlDef = "pack://application:,,,/WeChatCore;component/Resource/DefultHeader.png";
+                    else
+                        HeadUrlDef = Environment.CurrentDirectory + "\\" + DirectoryDefine.HeaderImagePath + "\\" + uuid + ".jpg";
+                }));
+            }
+            else
+            {
+                LogWriter.Write(string.Format("当前人员{0}已有头像", DisplayNameDef), LogPathDefine.WeChatLogPath);
+            }
+        }
+
+    }
+}

+ 69 - 0
WeChatCore/Entity/MsgEntity.cs

@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Documents;
+using WeChatCore.Enum;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 消息实体
+    /// </summary>
+    public class MsgEntity
+    {
+        /// <summary>
+        /// 消息来源
+        /// </summary>
+        public MsgOwerTypeEnum MsgOwerType { get; set; }
+        /// <summary>
+        /// 消息类型
+        /// </summary>
+        public MsgTypeEnum MsgType { get; set; }
+        /// <summary>
+        /// 消息时间
+        /// </summary>
+        public DateTime MsgTime { get; set; }
+        /// <summary>
+        /// 消息内容
+        /// </summary>
+        public object MsgContent { get; set; }
+        /// <summary>
+        /// 消息所属人员
+        /// </summary>
+        public MemberListItemEntity MsgOwer { get; set; }
+        /// <summary>
+        /// (非文本消息的文件名称)
+        /// </summary>
+        public string FileId { get; set; }
+        /// <summary>
+        /// 文件路径(非文本消息)
+        /// </summary>
+        public string FilePath { get; set; }
+        /// <summary>
+        /// 文件缓存路径
+        /// </summary>
+        public string FileTempPath { get; set; }
+        /// <summary>
+        /// 消息链接(比如地图消息之类的链接)
+        /// </summary>
+        public string MsgUrl { get; set; }
+        /// <summary>
+        /// 如果是群成员这个是群成员的具体谁
+        /// </summary>
+        public GroupMemberEntity GroupMember { get; set; }
+        /// <summary>
+        /// 消息是否已读
+        /// </summary>
+        public bool HasRead { get; set; }
+        /// <summary>
+        /// 流文档显示
+        /// </summary>
+        public FlowDocument Document { get; set; }
+        /// <summary>
+        /// 是否设置自动回复
+        /// </summary>
+        public bool IsCanAutoReply { get; set; }
+    }
+}

+ 16 - 0
WeChatCore/Entity/NickNameEntity.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class NickNameEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Buff { get; set; }
+    }
+}

+ 35 - 0
WeChatCore/Entity/NotifyPhoneEntity.cs

@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 同步消息实体
+    /// </summary>
+    public class NotifyPhoneEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseRequestEntity BaseRequest { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Code { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string FromUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ToUserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ClientMsgId { get; set; }
+    }
+}

+ 65 - 0
WeChatCore/Entity/ProfileEntity.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class ProfileEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int BitFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public UserNameEntity UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public NickNameEntity NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int BindUin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public BindEmailEntity BindEmail { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public BindMobileEntity BindMobile { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Status { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Sex { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int PersonalCard { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Alias { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HeadImgUpdateFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HeadImgUrl { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Signature { get; set; }
+    }
+
+}

+ 71 - 0
WeChatCore/Entity/ReceiveMsgEntity.cs

@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 收到的消息实体
+    /// </summary>
+    public class ReceiveMsgEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AddMsgCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<AddMsgListItemEntity> AddMsgList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ModContactCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<string> ModContactList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int DelContactCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<string> DelContactList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ModChatRoomMemberCount { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<string> ModChatRoomMemberList { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public ProfileEntity Profile { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ContinueFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public SyncKeyEntity SyncKey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string SKey { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public SyncKeyEntity SyncCheckKey { get; set; }
+    }
+}

+ 68 - 0
WeChatCore/Entity/RecommendInfoEntity.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class RecommendInfoEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int QQNum { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Province { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string City { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Content { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Signature { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Alias { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Scene { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int VerifyFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AttrStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Sex { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Ticket { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int OpCode { get; set; }
+    }
+}

+ 36 - 0
WeChatCore/Entity/SendFileResultEntity.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class SendFileResultEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MediaId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int StartPos { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int CDNThumbImgHeight { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int CDNThumbImgWidth { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string EncryFileName { get; set; }
+    }
+}

+ 23 - 0
WeChatCore/Entity/SendMsgBodyEntity.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 发送消息实体
+    /// </summary>
+    public class SendMsgBodyEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseRequestEntity BaseRequest { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public SendMsgEntity Msg { get; set; }
+    }
+}

+ 37 - 0
WeChatCore/Entity/SendMsgEntity.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WeChatCore.Enum;
+
+namespace WeChatCore.Entity
+{
+    public class SendMsgEntity
+    {
+            /// <summary>
+            /// 
+            /// </summary>
+            public MsgTypeEnum Type { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public string Content { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public string FromUserName { get; set; }
+            /// <summary>
+            /// (string.IsNullOrWhiteSpace(ToName) ? ContactsThis.UserName : ToName) //接受人名称
+            /// </summary>
+            public string ToUserName { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public string LocalID { get; set; }
+            /// <summary>
+            /// 
+            /// </summary>
+            public string ClientMsgId { get; set; }
+        }
+}

+ 27 - 0
WeChatCore/Entity/SendMsgResultEntity.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    /// <summary>
+    /// 发送消息返回结果
+    /// </summary>
+    public class SendMsgResultEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public BaseResponseEntity BaseResponse { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string MsgID { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string LocalID { get; set; }
+    }
+}

+ 20 - 0
WeChatCore/Entity/SyncKeyEntity.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class SyncKeyEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Count { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<ListItemEntity> List { get; set; }
+    }
+}

+ 88 - 0
WeChatCore/Entity/UserEntity.cs

@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class UserEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Uin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UserName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string NickName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string HeadImgUrl { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkName { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string PYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYInitial { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string RemarkPYQuanPin { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HideInputBarFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int StarFriend { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int Sex { get; set; }
+        /// <summary>
+        /// 美人鱼的眼泪,是一个连伤心都透明的世界~~
+        /// </summary>
+        public string Signature { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int AppAccountFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int VerifyFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int ContactFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int WebWxPluginSwitch { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int HeadImgFlag { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int SnsFlag { get; set; }
+    }
+}

+ 16 - 0
WeChatCore/Entity/UserNameEntity.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Entity
+{
+    public class UserNameEntity
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Buff { get; set; }
+    }
+}

+ 23 - 0
WeChatCore/Enum/AutoRepateEnum.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    /// <summary>
+    /// 回复类型
+    /// </summary>
+    public enum AutoRepateEnum
+    {
+        /// <summary>
+        /// 正常回复
+        /// </summary>
+        CommnonReply = 0,
+        /// <summary>
+        /// 敬语
+        /// </summary>
+        ThanksReply = 1
+    }
+}

+ 27 - 0
WeChatCore/Enum/ContactType.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    /// <summary>
+    /// 联系人类型
+    /// </summary>
+    public enum ContactType
+    {
+        /// <summary>
+        /// 公众号等
+        /// </summary>
+        PublicContact = 0,
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        PersonContact = 1,
+        /// <summary>
+        /// 微信群
+        /// </summary>
+        GroupContact = 2
+    }
+}

+ 13 - 0
WeChatCore/Enum/FileTypeEumn.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    public enum FileTypeEumn
+    {
+
+    }
+}

+ 13 - 0
WeChatCore/Enum/MediaTypeEnum.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    public enum MediaTypeEnum
+    {
+        Pitcure = 4
+    }
+}

+ 20 - 0
WeChatCore/Enum/MsgOwerTypeEnum.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    public enum MsgOwerTypeEnum
+    {
+        /// <summary>
+        /// 接受消息
+        /// </summary>
+        AccepterMsg = 0,
+        /// <summary>
+        /// 发送消息
+        /// </summary>
+        SenderMsg = 1,
+    }
+}

+ 61 - 0
WeChatCore/Enum/MsgTypeEnum.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WeChatCore.Enum
+{
+    //  1  文本消息
+    //3  图片消息
+    //34 语音消息
+    //37 VERIFYMSG
+    //40 POSSIBLEFRIEND_MSG
+    //42 共享名片
+    //43 视频通话消息
+    //47 动画表情
+    //48 位置消息
+    //49 分享链接
+    //50 VOIPMSG
+    //51 微信初始化消息
+    //52 VOIPNOTIFY
+    //53 VOIPINVITE
+    //62 小视频
+    //9999  SYSNOTICE
+    //10000  系统消息
+    //10002  撤回消息
+    /// <summary>
+    /// 消息类型
+    /// </summary>
+    public enum MsgTypeEnum
+    {
+        /// <summary>
+        /// 文字消息
+        /// </summary>
+        Text = 1,
+        /// <summary>
+        /// 图片消息
+        /// </summary>
+        Picture = 3,
+        /// <summary>
+        /// 语音
+        /// </summary>
+        Voice = 34,
+        /// <summary>
+        /// Gif消息
+        /// </summary>
+        Gif = 49,
+        /// <summary>
+        /// 视频消息
+        /// </summary>
+        Video = 43,
+        /// <summary>
+        /// 地图消息
+        /// </summary>
+        Map = 99999,
+        /// <summary>
+        /// 系统消息
+        /// </summary>
+        SystemMsg = 10000
+    }
+}

+ 36 - 0
WeChatCore/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("WeChatCore")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WeChatCore")]
+[assembly: AssemblyCopyright("Copyright ©  2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("a9f38352-6c10-40b2-aaad-6b4bc9464a94")]
+
+// 程序集的版本信息由下面四个值组成: 
+//
+//      主版本
+//      次版本 
+//      生成号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: 
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

BIN
WeChatCore/Referce/Newtonsoft.Json.dll


File diff suppressed because it is too large
+ 9229 - 0
WeChatCore/Referce/Newtonsoft.Json.xml


BIN
WeChatCore/Referce/x86/CommonTools.dll


BIN
WeChatCore/Referce/x86/HttpHelper.dll


BIN
WeChatCore/Referce/x86/ICSharpCode.SharpZipLib.dll


BIN
WeChatCore/Resource/DefultHeader.png


+ 125 - 0
WeChatCore/WeChatCore.csproj

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{588E8149-F7FC-4304-87E1-43426D41AAC4}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>WeChatCore</RootNamespace>
+    <AssemblyName>WeChatCore</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="CommonTools, Version=1.0.0.3, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Referce\x86\CommonTools.dll</HintPath>
+    </Reference>
+    <Reference Include="HttpHelper, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Referce\x86\HttpHelper.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>Referce\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Windows" />
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Common\CommonMethodCallBackHandlers.cs" />
+    <Compile Include="Common\MethodsHelper.cs" />
+    <Compile Include="Common\NotifyPropertyChanged.cs" />
+    <Compile Include="Control\ImgeDefine.cs" />
+    <Compile Include="DefineClass\CommonDefine.cs" />
+    <Compile Include="DefineClass\ConfigDefine.cs" />
+    <Compile Include="DefineClass\DirectoryDefine.cs" />
+    <Compile Include="DefineClass\LogPathDefine.cs" />
+    <Compile Include="DefineClass\UrlDefine.cs" />
+    <Compile Include="Entity\AddMsgListItemEntity.cs" />
+    <Compile Include="Entity\AppInfoEntity.cs" />
+    <Compile Include="Entity\AutoRepateEntity.cs" />
+    <Compile Include="Entity\BaseContactEntity.cs" />
+    <Compile Include="Entity\BaseRequestEntity.cs" />
+    <Compile Include="Entity\BaseResponseEntity.cs" />
+    <Compile Include="Entity\BindEmailEntity.cs" />
+    <Compile Include="Entity\BindMobileEntity.cs" />
+    <Compile Include="Entity\ContactListItemEntity.cs" />
+    <Compile Include="Entity\ContactsListEntity.cs" />
+    <Compile Include="Entity\FileEntity.cs" />
+    <Compile Include="Entity\GetMsgEntiy.cs" />
+    <Compile Include="Entity\GroupContacts.cs" />
+    <Compile Include="Entity\GroupMemberEntity.cs" />
+    <Compile Include="Entity\GroupMemberListEntity.cs" />
+    <Compile Include="Entity\ListItemEntity.cs" />
+    <Compile Include="Entity\LoginResultEntity.cs" />
+    <Compile Include="Entity\MemberListItemEntity.cs" />
+    <Compile Include="Entity\MPArticleListItemEntity.cs" />
+    <Compile Include="Entity\MPSubscribeMsgListItemEntity.cs" />
+    <Compile Include="Entity\MsgEntity.cs" />
+    <Compile Include="Entity\NickNameEntity.cs" />
+    <Compile Include="Entity\NotifyPhoneEntity.cs" />
+    <Compile Include="Entity\ProfileEntity.cs" />
+    <Compile Include="Entity\ReceiveMsgEntity.cs" />
+    <Compile Include="Entity\RecommendInfoEntity.cs" />
+    <Compile Include="Entity\SendFileResultEntity.cs" />
+    <Compile Include="Entity\SendMsgBodyEntity.cs" />
+    <Compile Include="Entity\SendMsgEntity.cs" />
+    <Compile Include="Entity\SendMsgResultEntity.cs" />
+    <Compile Include="Entity\SyncKeyEntity.cs" />
+    <Compile Include="Entity\UserEntity.cs" />
+    <Compile Include="Entity\UserNameEntity.cs" />
+    <Compile Include="Enum\AutoRepateEnum.cs" />
+    <Compile Include="Enum\ContactType.cs" />
+    <Compile Include="Enum\FileTypeEumn.cs" />
+    <Compile Include="Enum\MediaTypeEnum.cs" />
+    <Compile Include="Enum\MsgOwerTypeEnum.cs" />
+    <Compile Include="Enum\MsgTypeEnum.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WeiChat.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Referce\Newtonsoft.Json.dll" />
+    <Content Include="Referce\Newtonsoft.Json.xml" />
+    <Resource Include="Resource\DefultHeader.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 6 - 0
WeChatCore/WeChatCore.csproj.user

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ShowAllFiles</ProjectView>
+  </PropertyGroup>
+</Project>

+ 786 - 0
WeChatCore/WeiChat.cs

@@ -0,0 +1,786 @@
+using CommonTools;
+using HttpHelper;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Web;
+using System.Windows.Media.Imaging;
+using WeChatCore.Common;
+using WeChatCore.DefineClass;
+using WeChatCore.Entity;
+using WeChatCore.Enum;
+
+namespace WeChatCore
+{
+    public static class WeiChat
+    {
+        #region 初始化微信机器人
+
+        /// <summary>
+        /// 初始化消息机器人 注:必须用异步线程,否则会阻塞主线程
+        /// </summary>
+        public static void InitWeiChatRobot()
+        {
+            bool DownLoadImageResult = DownloadImage();
+            if (DownLoadImageResult == true)
+            {
+                CommonMethodCallBackHandlers.OnDownLoadQRCodeCompleted();
+                //下载成功
+                Login();
+                CommonDefine.GetMsgSyncKey = GetSyncKey();
+                while (true)
+                {
+                    LogWriter.Write(string.Format("获取心跳信息..."), LogPathDefine.WeChatLogPath);
+                    KeepHeart(CommonDefine.GetMsgSyncKey);
+                }
+            }
+        }
+
+        #endregion
+
+        #region 环境校验
+        public static void CheckMethod()
+        {
+
+        }
+        #endregion
+
+        #region 下载验证码
+
+        /// <summary>
+        /// 下载验证码
+        /// </summary>
+        public static bool DownloadImage()
+        {
+            HttpResponseResult ResponseResult = HttpMethods.Get(UrlDefine.LoginUrl, new System.Net.CookieContainer(), Encoding.UTF8);
+            if (ResponseResult.StatusCode == System.Net.HttpStatusCode.OK)
+            {
+                string[] str = ResponseResult.ContentData.ToString().Split(';');
+                string ImageCode = str[1].Substring(str[1].IndexOf("\"") + 1, str[1].Length - str[1].IndexOf("\"") - 2);
+                UrlDefine.Tickets = ImageCode;
+                CommonDefine.Cookies = HttpMethods.getCookie(UrlDefine.RootUrl);
+                ResponseResult = HttpMethods.GetFile(UrlDefine.LoginUrlWithToken + ImageCode, "Check.jpg", new System.Net.CookieContainer());
+                if (ResponseResult.StatusCode == System.Net.HttpStatusCode.OK)
+                {
+                    LogWriter.Write("下载微信登录二维码成功...", LogPathDefine.WeChatLogPath);
+                    return true;
+                }
+                else
+                {
+                    LogWriter.Write("获取微信登录二维码失败...", LogPathDefine.WeChatErrorLogPath);
+                    LogWriter.Write(string.Format("当前返回状态码是{0},返回信息是{1}", ResponseResult.StatusCode.ToString(), ResponseResult.ReturnMsg), LogPathDefine.WeChatErrorLogPath);
+                    return false;
+                }
+            }
+            else
+            {
+                //请求出现问题
+                LogWriter.Write("访问微信登官网失败...", LogPathDefine.WeChatErrorLogPath);
+                LogWriter.Write(string.Format("当前返回状态码是{0},返回信息是{1}", ResponseResult.StatusCode.ToString(), ResponseResult.ReturnMsg), LogPathDefine.WeChatErrorLogPath);
+                return false;
+            }
+        }
+
+        #endregion
+
+        #region 登录
+
+        /// <summary>
+        /// 登录
+        /// </summary>
+        public static void Login()
+        {
+            string str = string.Empty;
+            HttpMethods.ContentType = "application/json;charset=utf-8";
+            while (true)
+            {
+                if (!str.Contains("200"))
+                {
+                    HttpResponseResult ResponseResult = HttpMethods.Get(UrlDefine.WaitingUrl(UrlDefine.Tickets), CommonDefine.Cookies, Encoding.UTF8);
+                    str = ResponseResult.ContentData.ToString();
+                    Console.WriteLine("当前返回值是:" + str);
+                    if (str.Contains("201"))
+                    {
+                        //扫码登录中
+                        string[] base64 = str.Split(',');
+                        CommonDefine.Base64 = base64[1];
+                        byte[] arr = Convert.FromBase64String(CommonDefine.Base64.Replace("'", "").Replace(";", "").Trim());
+                        File.WriteAllBytes(Environment.CurrentDirectory + "\\User.jpg", arr);
+                        MemoryStream ms = new MemoryStream(arr);
+                        BitmapImage bi = new BitmapImage();
+                        bi.BeginInit();
+                        bi.StreamSource = ms;// new FileStream();
+                        bi.EndInit();
+                        CommonDefine.UserImage = bi;
+                        CommonMethodCallBackHandlers.OnLoginScranQRCodeCompleted(Environment.CurrentDirectory + "\\User.jpg");
+                    }
+                }
+                if (str.Contains("200"))
+                {
+                    //扫码登录完成
+                    LogWriter.Write("扫码登录成功...", LogPathDefine.WeChatLogPath);
+                    string[] strs = str.Split(';');
+                    UrlDefine.LoginUrls = strs[1].Substring(strs[1].IndexOf("=\"") + 2, strs[1].Length - strs[1].IndexOf("=\"") - 3);
+                    string XmlList = HttpMethods.Get(UrlDefine.LoginUrls, CommonDefine.Cookies, Encoding.UTF8, true).ContentData.ToString();
+                    CommonDefine.GetCookieDictionary = HttpMethods.SetCookieDictionary;
+                    CommonDefine.LoginResult = XMLHelper.DESerializer<LoginResultEntity>(XmlList);
+                    LogWriter.Write(CommonDefine.LoginResult.wxuin, Environment.CurrentDirectory + "\\Data\\data.dat");
+                    Random r = new Random();
+                    BaseRequestEntity Bre = new BaseRequestEntity() { Uin = CommonDefine.LoginResult.wxuin, Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey, DeviceID = MethodsHelper.GetDeviceId() };
+                    BaseRequestSubmitEntity le = new BaseRequestSubmitEntity() { BaseRequest = Bre };
+                    string postdata = JsonConvert.SerializeObject(le);
+                    string MySelfList = HttpMethods.PostData(UrlDefine.GetLoginId + CommonDefine.LoginResult.pass_ticket, postdata, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+                    LogWriter.Write(string.Format("获取个人信息{0}...", MySelfList), LogPathDefine.WeChatLogPath);
+                    CommonDefine.BaseContact = JsonConvert.DeserializeObject<BaseContactEntity>(MySelfList);
+                    string ContentList = HttpMethods.Get(UrlDefine.GetContactUrl(CommonDefine.LoginResult.pass_ticket, CommonDefine.LoginResult.skey), CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+                    CommonDefine.ContactsList = JsonConvert.DeserializeObject<ContactsListEntity>(ContentList);
+                    LogWriter.Write(string.Format("获取联系人信息{0}...", ContentList), LogPathDefine.WeChatLogPath);
+                    new Task(() => { GetGroupContactsMethod(CommonDefine.ContactsList.MemberList); }).Start();
+                    new Task(() =>
+                    {
+                        CommonDefine.ContactsList.MemberList.ForEach((p) =>
+                        {
+                            p.DownloadImage();
+                        });
+                    }).Start();
+                    CommonMethodCallBackHandlers.OnLoginCompleted(true);
+                    break;
+                }
+                Thread.Sleep(5000);
+            }
+
+        }
+
+        #endregion
+
+        #region 下载头像
+
+        public static void DownloadHeaderImage(MemberListItemEntity Mli)
+        {
+            Mli.DownloadImage();
+        }
+        #endregion
+
+        #region 获取联系人
+
+        /// <summary>
+        /// 刷新联系人
+        /// </summary>
+        public static void RefreshContacts()
+        {
+            string ContentList = HttpMethods.Get(UrlDefine.GetContactUrl(CommonDefine.LoginResult.pass_ticket, CommonDefine.LoginResult.skey), CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            ContactsListEntity ContactsLists = JsonConvert.DeserializeObject<ContactsListEntity>(ContentList);
+            if (ContactsLists != CommonDefine.ContactsList)//联系人有更新,关键是看数量增加还是减少的
+            {
+                CommonDefine.ContactsList = ContactsLists;
+            }
+        }
+
+        #endregion
+
+        #region 联系人分类
+        /// <summary>
+        /// 分类
+        /// </summary>
+        /// <returns></returns>
+        public static List<MemberListItemEntity> SetSplite(ContactType ct)
+        {
+            switch (ct)
+            {
+                case ContactType.PublicContact:
+                    ///公众号
+                    var PublicContact = from item in CommonDefine.ContactsList.MemberList
+                                        where item.VerifyFlag == 8 ||
+                                        item.VerifyFlag == 24 ||
+                                        item.VerifyFlag == 56
+                                        select item;
+                    if (PublicContact != null)
+                        return PublicContact.ToList();
+                    else
+                        return new List<MemberListItemEntity>();
+                case ContactType.PersonContact:
+                    //个人
+                    var PersonList = from item in CommonDefine.ContactsList.MemberList where item.VerifyFlag == 0 && item.UserName.Contains("@") select item;
+                    if (PersonList != null)
+                        return PersonList.ToList();
+                    else
+                        return new List<MemberListItemEntity>();
+                case ContactType.GroupContact:
+                    //群组
+                    var GroupList = from item in CommonDefine.ContactsList.MemberList where item.VerifyFlag == 0 && item.UserName.Contains("@@") select item;
+                    if (GroupList != null)
+                        return GroupList.ToList();
+                    else
+                        return new List<MemberListItemEntity>();
+            }
+            return new List<MemberListItemEntity>();
+        }
+        #endregion
+
+        #region 获取启动心跳参数
+
+        /// <summary>
+        /// 获取心跳key
+        /// </summary>
+        /// <returns></returns>
+        public static string GetSyncKey()
+        {
+            BaseRequestEntity Bre = new BaseRequestEntity() { Uin = CommonDefine.LoginResult.wxuin, Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey, DeviceID = MethodsHelper.GetDeviceId() };
+            BaseRequestSubmitEntity le = new BaseRequestSubmitEntity() { BaseRequest = Bre };
+            string SyncKeyData = JsonConvert.SerializeObject(le);
+            string SyncKeyUrl = UrlDefine.GetSyncKey + CommonDefine.LoginResult.pass_ticket;
+            string SyncKeyList = HttpMethods.PostData(SyncKeyUrl, SyncKeyData, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            BaseContactEntity bce = JsonConvert.DeserializeObject<BaseContactEntity>(SyncKeyList);
+            CommonDefine.SyncKey = bce.SyncKey;
+            string SyncKey = string.Empty;
+            for (int index = 0; index < bce.SyncKey.List.Count; index++)
+            {
+                if (!string.IsNullOrWhiteSpace(SyncKey))
+                {
+                    SyncKey = SyncKey + "|";
+                }
+                SyncKey = SyncKey + bce.SyncKey.List[index].Key + "_" + bce.SyncKey.List[index].Val;
+            }
+            Thread.Sleep(5000);
+            return SyncKey;
+        }
+
+        #endregion
+
+        #region 获取心跳
+
+        /// <summary>
+        /// 获取心跳
+        /// </summary>
+        /// <param name="SyncKey"></param>
+        public static void KeepHeart(string SyncKey)
+        {
+            Random ran = new Random();
+            string HeartUrl = UrlDefine.HeartUrl + "r=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + MethodsHelper.GetThreeNumber() +
+                "&skey=" + CommonDefine.LoginResult.skey
+              + "&sid=" + CommonDefine.LoginResult.wxsid
+              + "&uin=" + CommonDefine.LoginResult.wxuin
+              + "&deviceid=e9128931905052" + ((int)ran.Next(0, 9)).ToString() + ((int)(ran.Next(0, 8) + 1)).ToString() + "&synckey=" + SyncKey + "&_=" + DateTimeToosHelper.GetUnixTimeSpan().ToString() + MethodsHelper.GetThreeNumber();
+            LogWriter.Write(SyncKey, @"SyncKey.log");
+            string HeartList = string.Empty;
+            try
+            {
+                HeartList = HttpMethods.Get(HeartUrl, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            }
+            catch (Exception ex)
+            {
+                HeartList = HttpMethods.Get(HeartUrl, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            }
+            if (!string.IsNullOrWhiteSpace(HeartList))
+            {
+                LogWriter.Write(HeartList.ToString());
+                if (HeartList.ToString() != "window.synccheck={retcode:\"0\",selector:\"0\"}")
+                {
+                    //   Thread.CurrentThread.Abort();
+                    Console.WriteLine(HeartList.ToString());
+                    GetMsg(CommonDefine.SyncKey);
+                    CommonDefine.GetMsgSyncKey = GetSyncKey();// 理论上此处不需要赋值,如果收发消息出现问题,放开次注释
+                }
+                else if (HeartList.ToString() != "window.synccheck={retcode:\"0\",selector:\"7\"}")
+                {
+                    // GetMsgSyncKey = GetSyncKey();
+                }
+                Console.WriteLine(HeartList.ToString());
+                Console.WriteLine("thK's while is breaked!" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss"));
+            }
+            else
+            {
+                // GetMsgSyncKey = GetSyncKey();
+            }
+            return;
+
+        }
+
+        #endregion
+
+        #region 获取聊天信息
+
+        /// <summary>
+        /// 获取聊天信息
+        /// </summary>
+        /// <param name="SyncKeyList"></param>
+        /// <returns></returns>
+        public static string GetMsg(SyncKeyEntity SyncKey)
+        {
+            string ReturnKey = string.Empty;
+            ReceiveMsgEntity Rme = new ReceiveMsgEntity();
+            GetMsgEntiy Gme = new GetMsgEntiy() { BaseRequest = new BaseRequestEntity() { Uin = CommonDefine.LoginResult.wxuin, Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey, DeviceID = MethodsHelper.GetDeviceId() }, SyncKey = SyncKey, rr = -113317163 };
+            string PostData = JsonConvert.SerializeObject(Gme);
+            string posturl = UrlDefine.GetChatUrl
+                + "sid=" + CommonDefine.LoginResult.wxsid
+                + "&skey=" + CommonDefine.LoginResult.skey
+                + "&pass_ticket=" + CommonDefine.LoginResult.pass_ticket;
+            string Msglist = HttpMethods.PostData(posturl, PostData, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            try
+            {
+                Rme = JsonConvert.DeserializeObject<ReceiveMsgEntity>(Msglist);
+                CommonDefine.SyncKey = Rme.SyncKey;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("GetMsg" + ex.Message);
+            }
+            try
+            {
+                if (Rme.AddMsgCount != 0)
+                {
+                    //说明有消息
+                    AnalyseMsg(Rme.AddMsgList);
+                }
+                else
+                {
+                    //到这 说明没有消息
+                }
+
+            }
+            catch (Exception ex)
+            {
+                // KeepHeart(FristKey);
+                Console.WriteLine("GetMsg is out Exception" + ex.Message);
+            }
+            return ReturnKey;
+        }
+
+        #endregion
+
+        #region 获取群成员
+
+        /// <summary>
+        /// 获取群成员信息
+        /// </summary>
+        /// <param name="GroupList"></param>
+        public static void GetGroupContactsMethod(List<MemberListItemEntity> GroupList)
+        {
+            GroupContacts GC = new GroupContacts();
+            GC.BaseRequest = new BaseRequestEntity() { DeviceID = MethodsHelper.GetDeviceId(), Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey, Uin = CommonDefine.LoginResult.wxuin };
+            List<GroupListItem> GroupNumberList = new List<GroupListItem>();
+            for (int index = 0; index < GroupList.Count; index++)
+            {
+                if (GroupList[index].UserName.Contains("@@"))
+                {
+                    GroupListItem Groupitem = new GroupListItem();
+                    Groupitem.UserName = GroupList[index].UserName;
+                    GroupNumberList.Add(Groupitem);
+                }
+            }
+            GC.List = GroupNumberList;
+            GC.Count = GroupNumberList.Count;
+            string PostData = JsonConvert.SerializeObject(GC);
+            string Result = HttpMethods.PostData(string.Format(UrlDefine.GetQunContactUrl, CommonDefine.LoginResult.pass_ticket), PostData, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            if (!string.IsNullOrWhiteSpace(Result))
+            {
+                GroupMemberListEntity GroupMumberInfo = JsonConvert.DeserializeObject<GroupMemberListEntity>(Result);
+                CommonDefine.GroupMemberList = GroupMumberInfo;
+            }
+            else
+            {
+                LogWriter.Write("获取群成员失败,返回结果为空!", LogPathDefine.WeChatGrouplogPath);
+            }
+            //GGC.List=new List<Entity.ListItem>(
+        }
+
+        #endregion
+
+        #region 获取具体人信息
+
+        /// <summary>
+        /// 获取群成员昵称
+        /// </summary>
+        /// <param name="ali"></param>
+        /// <returns></returns>
+        public static GroupMemberEntity SelectGroupMumber(AddMsgListItemEntity ali)
+        {
+            try
+            {
+                string[] result = ali.Content.Split(':');
+
+                var WhichGroupList = from item in CommonDefine.GroupMemberList.ContactList
+                                     where item.UserName == ali.FromUserName
+                                     select item;
+                var WhichPersonList = from item in WhichGroupList.ToList().SingleOrDefault().MemberList
+                                      where item.UserName == result[0]
+                                      select item;
+                return WhichPersonList.ToList<GroupMemberEntity>().SingleOrDefault();
+            }
+            catch (Exception ex)
+            {
+                LogWriter.Write("获取群成员名称失败!异常信息是:" + ex.Message, LogPathDefine.WeChatGrouplogPath);
+                return null;
+            }
+        }
+
+        #endregion
+
+        #region 分析消息
+
+        /// <summary>
+        /// 分析消息结构
+        /// </summary>
+        /// <param name="MsgList"></param>
+        private static void AnalyseMsg(List<AddMsgListItemEntity> MsgList)
+        {
+            try
+            {
+                //遍历所有消息项
+                for (int index = 0; index < MsgList.Count; index++)
+                {
+                    AddMsgListItemEntity ali = MsgList[index];//消息体
+                    MsgEntity me = new MsgEntity();//二次封装
+                    me.IsCanAutoReply = true;
+                    //  WebwxStatusNotify(ali.FromUserName, ali.ToUserName);
+                    if (ali.FromUserName == CommonDefine.BaseContact.User.UserName) return;
+                    //取得消息来源联系人信息
+                    var CustomName = from item in CommonDefine.ContactsList.MemberList where item.UserName == ali.FromUserName select item;
+                    if (CustomName == null || CustomName.ToList().Count <= 0)
+                    {
+                        //当前联系人列表中找不到此用户
+                        try
+                        {
+                            //此处进行联系人刷新
+                            RefreshContacts();
+                            CustomName = from item in CommonDefine.ContactsList.MemberList where item.UserName == ali.FromUserName select item;
+                            if (CustomName == null || CustomName.ToList().Count <= 0)//未找到消息来源
+                                return;
+                        }
+                        catch (Exception ex)
+                        {
+                            LogWriter.Write("刷新联系人发生异常,异常信息是:" + ex.Message, LogPathDefine.ExceptionLogPath);
+                        }
+                    }
+                    MemberListItemEntity Mlie = CustomName.ToList().SingleOrDefault();
+                    try
+                    {
+                        if (Mlie.UserName.Contains("@@"))
+                        {
+                            //群消息处理
+                            GroupMemberEntity Gme = SelectGroupMumber(ali);
+                            if (Gme == null)
+                            {
+                                //刷新群成员
+                                GetGroupContactsMethod(CommonDefine.ContactsList.MemberList);
+                                Gme = SelectGroupMumber(ali);
+                            }
+                            if (ali.Content.Contains(":"))
+                            {
+                                string[] a = ali.Content.Split(':');
+                                ali.Content = Gme.NickName + ":" + a[1].Replace("<br/>", "");
+                            }
+                            me.GroupMember = Gme;
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        LogWriter.Write("替换群成员名称失败,异常信息为:" + ex.Message, LogPathDefine.ExceptionLogPath);
+                    }
+                    //消息列表实体
+                    me.MsgOwer = Mlie;
+                    me.MsgContent = ali.Content;
+                    me.MsgOwerType = MsgOwerTypeEnum.AccepterMsg;
+
+                    //FromMsgList Fml = new FromMsgList(Environment.CurrentDirectory + "\\HeaderImages\\" + CustomName.ToList<Contacts>()[0].FileName + ".jpg", CustomName.ToList<Contacts>()[0].RemarkName, ali.Content);
+                    //Fml.MsgId = Wcmt.MsgId;
+                    //PlayVoice pv = new PlayVoice(Environment.CurrentDirectory + "\\HeaderImages\\" + CustomName.ToList<Contacts>()[0].FileName + ".jpg");
+                    #region 储存消息
+
+                    if (ali.MsgType == 34)
+                    {
+                        me.MsgType = MsgTypeEnum.Voice;
+                        //语音消息
+                        string Url = string.Format(UrlDefine.VoiceUrl, ali.MsgId, CommonDefine.LoginResult.skey);
+                        string FileId = MethodsHelper.MsgSaveFile(DirectoryDefine.VoiceMsgPath);//获取FileId
+                        //根据FileID创建本地的语音对象
+                        List<byte> list = HttpMethods.GetFile(Url, Environment.CurrentDirectory + "\\" + DirectoryDefine.VoiceMsgPath + "\\" + FileId + ".mp3", CommonDefine.Cookies).ContentData as List<byte>;
+                        //将下载下来的MP3文件转成Base64进行储存
+                        //   string Base64Str = Convert.ToBase64String(list.ToArray());
+                        me.MsgTime = DateTime.Now;
+                        me.FileId = FileId;
+                        me.FilePath = Environment.CurrentDirectory + "\\" + DirectoryDefine.VoiceMsgPath + "\\" + me.FileId + ".mp3";
+                    }
+                    else if (ali.MsgType == 3)
+                    {
+                        me.MsgType = MsgTypeEnum.Picture;
+                        //图片消息
+                        string Url = string.Format(UrlDefine.ImgUrlBig, ali.MsgId, CommonDefine.LoginResult.skey);
+                        string FileId = MethodsHelper.MsgSaveFile(DirectoryDefine.ImageMsgPath);//获取FileId
+                        //根据FileID创建本地的语音对象
+                        List<byte> list = HttpMethods.GetFile(Url, Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgPath + "\\" + FileId + ".jpg", CommonDefine.Cookies).ContentData as List<byte>;
+                        //获取缩略图
+                        HttpMethods.GetFile(string.Format(UrlDefine.ImgUrl, ali.MsgId, CommonDefine.LoginResult.skey), Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg", CommonDefine.Cookies);
+                        //将下载下来的MP3文件转成Base64进行储存
+                        //string Base64Str = Convert.ToBase64String(list.ToArray());
+                        me.MsgTime = DateTime.Now;
+                        me.FileId = FileId;
+                        me.FilePath = Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgPath + "\\" + FileId + ".jpg";//
+                        me.FileTempPath = Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg";
+                    }
+                    else if (ali.MsgType == 49)
+                    {
+                        //TODO:GIF消息
+                        me.MsgType = MsgTypeEnum.Gif;
+                        //语音消息
+                        string Url = string.Format(UrlDefine.ImgUrlBig, ali.MsgId, CommonDefine.LoginResult.skey);
+                        string FileId = MethodsHelper.MsgSaveFile(DirectoryDefine.ImageMsgGifPath);//获取FileId
+                        HttpMethods.GetFile(Url, Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgGifPath + "\\" + FileId + ".gif", CommonDefine.Cookies);
+                        HttpMethods.GetFile(string.Format(UrlDefine.ImgUrl, ali.MsgId, CommonDefine.LoginResult.skey), Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg", CommonDefine.Cookies);
+                        //将下载下来的MP3文件转成Base64进行储存
+                        //string Base64Str = Convert.ToBase64String(list.ToArray());
+                        // Wcmt.MsgText = Base64Str;
+                        me.MsgTime = DateTime.Now;
+                        me.FileId = FileId;
+                        me.FilePath = Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgGifPath + "\\" + FileId + ".gif";//
+                        me.FileTempPath = Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg";
+                    }
+                    else if (ali.MsgType == 43)
+                    {
+                        me.MsgType = MsgTypeEnum.Video;
+                        //视频消息
+                        string Url = string.Format(UrlDefine.VideoUrl, ali.MsgId, HttpUtility.UrlEncode(CommonDefine.LoginResult.skey));
+                        string FileId = MethodsHelper.MsgSaveFile(DirectoryDefine.VideoMsgPath);//获取FileId
+                        HttpMethods.GetFile(string.Format(UrlDefine.ImgUrl, ali.MsgId, CommonDefine.LoginResult.skey), Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg", CommonDefine.Cookies);
+                        //根据FileID创建本地的语音对象
+                        List<byte> list = HttpMethods.GetVideo(Url, Environment.CurrentDirectory + "\\" + DirectoryDefine.VideoMsgPath + "\\" + FileId + ".mp4", CommonDefine.Cookies);
+                        //将下载下来的视频文件转成Base64进行储存
+                        //string Base64Str = Convert.ToBase64String(list.ToArray());
+                        //Wcmt.MsgText = Base64Str;
+                        me.MsgTime = DateTime.Now;
+                        me.FileId = FileId;
+                        me.FilePath = Environment.CurrentDirectory + "\\" + DirectoryDefine.VideoMsgPath + "\\" + FileId + ".mp4";//
+                        me.FileTempPath = Environment.CurrentDirectory + "\\" + DirectoryDefine.ImageMsgTempPath + "\\" + FileId + ".jpg";
+                    }
+                    else if (ali.MsgType == 1 && !string.IsNullOrWhiteSpace(ali.Url))
+                    {
+                        //地图消息
+                        me.MsgType = MsgTypeEnum.Map;
+                        me.MsgUrl = ali.Url;
+                        //地图消息
+                        string Url = string.Format(UrlDefine.MapUrl, ali.MsgId);
+                        //HttpHelper.ContentType = "";
+                        string FileId = MethodsHelper.MsgSaveFile(DirectoryDefine.MapImageMsgPath);//获取FileId
+                        //根据FileID创建本地的语音对象
+                        HttpMethods.GetFile(Url, Environment.CurrentDirectory + "\\" + DirectoryDefine.MapImageMsgPath + "\\" + FileId + ".jpg", CommonDefine.Cookies);
+                        me.FilePath = Environment.CurrentDirectory + "\\" + DirectoryDefine.MapImageMsgPath + "\\" + FileId + ".jpg";
+                        me.MsgTime = DateTime.Now;
+                        //Wcmt.MsgOwer = CustomName.ToList()[0].FileName;
+                        //Wcmt.MsgExt = ali.Url + "|" + FileId;
+                        //MsgTypeTableExt.InsertWeChatMsgTable(Wcmt);
+                    }
+                    else
+                    {
+                        me.MsgType = MsgTypeEnum.Text;
+                        me.MsgTime = DateTime.Now;
+                    }
+                    LogWriter.Write(me.MsgContent.ToString(), LogPathDefine.WeChatLogPath);
+                    CommonMethodCallBackHandlers.OnReceivedMsgAnalyseMsgCompleted(me);
+                    SetAutoRepate(CommonDefine.WhiteUserList, LoadAutoReplyConfig(ConfigDefine.WeChatAutoReplyPath), me.MsgOwer.UserName, me);
+                    #endregion
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+
+        }
+
+        #endregion
+
+        #region 发送消息
+
+        /// <summary>
+        /// 发送消息
+        /// </summary>
+        /// <param name="Msg">消息体</param>
+        /// <param name="IsAddChatList">是否添加到聊天列表</param>
+        /// <param name="ToName">向谁发送</param>
+        public static bool SendToOtherMsg(string Msg = "", string ToName = "")
+        {
+            string SendMsg = string.Empty;
+            string LocalMsgId = MethodsHelper.GetClientMsgId();
+            if (!string.IsNullOrWhiteSpace(Msg))
+                SendMsg = Msg;
+            string chaturl = UrlDefine.ChatUrl + CommonDefine.LoginResult.pass_ticket;
+            SendMsgBodyEntity Smbe = new SendMsgBodyEntity() { BaseRequest = new BaseRequestEntity() { DeviceID = MethodsHelper.GetDeviceId(), Uin = CommonDefine.LoginResult.wxuin, Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey }, Msg = new SendMsgEntity() { Type = MsgTypeEnum.Text, FromUserName = CommonDefine.BaseContact.User.UserName, ToUserName = ToName, Content = Msg, LocalID = LocalMsgId, ClientMsgId = LocalMsgId } };
+            string PostData = JsonConvert.SerializeObject(Smbe);
+            string Result = HttpMethods.PostData(chaturl, PostData, CommonDefine.Cookies, Encoding.UTF8, "AcceptEncoding", "gzip, deflate").ContentData.ToString();
+            SendMsgResultEntity Sre = JsonConvert.DeserializeObject<SendMsgResultEntity>(Result);
+            if (Sre.BaseResponse.Ret == 0)
+            {
+                //消息发送成功
+                CommonMethodCallBackHandlers.OnSendMsgCompleted(true);
+                return true;
+            }
+            else
+            {
+                Console.WriteLine("发送失败:" + Result);
+                CommonMethodCallBackHandlers.OnSendMsgCompleted(false);
+                return false;
+            }
+        }
+
+        #endregion
+
+        #region 同步消息
+
+        /// <summary>
+        /// 对手机端信息进行同步
+        /// </summary>
+        /// <param name="FromUserName"></param>
+        /// <param name="ToUserName"></param>
+        public static void WebwxStatusNotify(string FromUserName, string ToUserName)
+        {
+            NotifyPhoneEntity Npe = new NotifyPhoneEntity();
+            BaseRequestEntity br = new BaseRequestEntity();
+            br.DeviceID = MethodsHelper.GetDeviceId();
+            br.Sid = CommonDefine.LoginResult.wxsid;
+            br.Skey = CommonDefine.LoginResult.skey;
+            br.Uin = CommonDefine.LoginResult.wxuin;
+            Npe.BaseRequest = br;
+            Random ran = new Random();
+            Npe.ClientMsgId = MethodsHelper.GetClientMsgId();// "1497590764" + ((int)ran.Next(0, 9)).ToString() + ((int)ran.Next(0, 9)).ToString() + ((int)ran.Next(0, 9)).ToString();
+            Npe.Code = "1";
+            Npe.FromUserName = FromUserName;
+            Npe.ToUserName = ToUserName;
+            string PostData = JsonConvert.SerializeObject(Npe);
+            string list = HttpMethods.PostData(UrlDefine.WexNotifyUrl + CommonDefine.LoginResult.pass_ticket, PostData, CommonDefine.Cookies, Encoding.UTF8).ContentData.ToString();
+            if (list != null)
+            {
+                SendMsgResultEntity Sre = JsonConvert.DeserializeObject<SendMsgResultEntity>(list);
+                if (Sre.BaseResponse.Ret == 0)
+                {
+                }
+                //if (list.Count >= 1)
+                //{
+                //    Console.WriteLine(list[0].ToString());
+                //}
+            }
+
+        }
+
+        #endregion
+
+        #region 自动回复
+        /// <summary>
+        /// 设置自动回复
+        /// </summary>
+        /// <param name="UserList">白名单</param>
+        /// <param name="AutoRelyList">自动回复列表</param>
+        /// <param name="UserName">用户名</param>
+        /// <param name="MsgContent">消息内容(不用管)</param>
+        public static void SetAutoRepate(List<MemberListItemEntity> UserList, List<AutoRepateEntity> AutoRelyList, string UserName, MsgEntity MsgContent)
+        {
+            if (UserList == null) UserList = new List<MemberListItemEntity>();
+            if (AutoRelyList.Count == 0)
+            {
+                LogWriter.Write("AutoReply为空!", LogPathDefine.WeChatLogPath);
+                return;
+            }
+            try
+            {
+                string ReplyBody = "{0}{1},回复{2}关闭自动回复,回复{3}开启自动回复";
+                string[] GroupNumber = new string[2];
+                if (MsgContent.MsgContent.ToString().Contains(":"))
+                {
+                    GroupNumber = MsgContent.MsgContent.ToString().Split(':');
+                }
+                var data = from item in UserList where item.UserName == UserName select item;
+                if (data != null && data.ToList().Count > 0)
+                {
+                    //说明当前用户在白名单中,所以不能设置自动回复
+                }
+                else
+                {
+                    var CommnonReplyData = from item in AutoRelyList where item.AutoRepateType == AutoRepateEnum.CommnonReply select item;
+                    var ThanksReplyData = from item in AutoRelyList where item.AutoRepateType == AutoRepateEnum.ThanksReply select item;
+                    AutoRepateEntity CommnonReplyDataEntity = CommnonReplyData.SingleOrDefault();
+                    AutoRepateEntity ThanksReplyDataEntity = CommnonReplyData.SingleOrDefault();
+                    if (MsgContent.MsgContent.ToString() == CommnonReplyDataEntity.AutoReplySwitch)
+                    {
+                        //关闭自动回复
+                        MsgContent.IsCanAutoReply = false;
+                        SendToOtherMsg(ThanksReplyDataEntity.ReplyContent, UserName);
+                    }
+                    if (MsgContent.MsgContent.ToString() == ThanksReplyDataEntity.AutoReplySwitch)
+                    {
+                        MsgContent.IsCanAutoReply = true;
+                    }
+                    if (MsgContent.IsCanAutoReply)
+                    {
+                        string GroupName = string.Empty;
+                        if (GroupNumber != null && GroupNumber.Length > 0)
+                            GroupName = GroupNumber[0];
+                        SendToOtherMsg(string.Format(ReplyBody, UserName.Contains("@@") ? "" : GroupName, CommnonReplyDataEntity.ReplyContent, CommnonReplyDataEntity.AutoReplySwitch, ThanksReplyDataEntity.AutoReplySwitch), UserName);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogWriter.Write(ex.Message, LogPathDefine.ExceptionLogPath);
+            }
+        }
+
+        #endregion
+
+        #region 发送文件
+        /// <summary>
+        /// 发送文件
+        /// </summary>
+        /// <param name="Fe">文件类型</param>
+        /// <param name="FileData">文件byte</param>
+
+        public static void SendFile(FileEntity Fe, byte[] FileData)
+        {
+            Fe.BaseRequest = new BaseRequestEntity() { DeviceID = MethodsHelper.GetDeviceId(), Uin = CommonDefine.LoginResult.wxuin, Sid = CommonDefine.LoginResult.wxsid, Skey = CommonDefine.LoginResult.skey };
+            string Boundary = "------WebKitFormBoundaryUOlSZtOip6JP4NSr";
+            HttpMethods.AddContent("id", "WU_FILE_1", Boundary);
+            HttpMethods.AddContent("name", Fe.FileName, Boundary);
+            HttpMethods.AddContent("type", Fe.FileType, Boundary);
+            HttpMethods.AddContent("lastModifiedDate", Fe.FileModiftTime, Boundary);
+            HttpMethods.AddContent("size", Fe.DataLen.ToString(), Boundary);
+            HttpMethods.AddContent("mediatype", Fe.Mediatype, Boundary);
+            HttpMethods.AddContent("uploadmediarequest", JsonConvert.SerializeObject(Fe), Boundary);
+            HttpMethods.AddContent("webwx_data_ticket", CommonDefine.GetCookieDictionary == null ? "" : CommonDefine.GetCookieDictionary["webwx_data_ticket"], Boundary);//"gScOa2YvEEtszEvhoxdwXCeg"
+            HttpMethods.AddContent("pass_ticket", CommonDefine.LoginResult.pass_ticket, Boundary);//"ekYYf2P7xOH5iI+oYrf/GiGrZhE+fUEGMiXe3Pq71rb4MDe+7ICbD+kglD4ZE+Ey"
+            HttpMethods.AddContent("filename", Fe.FileName, Fe.FileType, FileData, Boundary);
+            HttpMethods.OptionsDataMulitData(UrlDefine.SendFileUrl, CommonDefine.Cookies, Encoding.UTF8);
+            HttpMethods.PostDataMulitData(UrlDefine.SendFileUrl, CommonDefine.Cookies, Encoding.UTF8);
+        }
+        #endregion
+
+        #region 加载自动回复配置文件
+        /// <summary>
+        /// 读取自动回复配置文件
+        /// </summary>
+        /// <param name="path"></param>
+        /// <returns></returns>
+        internal static List<AutoRepateEntity> LoadAutoReplyConfig(string path)
+        {
+            try
+            {
+                List<AutoRepateEntity> ResultList = new List<AutoRepateEntity>();
+                if (!File.Exists(path))
+                    return ResultList;
+                ResultList = JsonConvert.DeserializeObject<List<AutoRepateEntity>>(File.ReadAllText(path));
+                if (ResultList == null)
+                    return new List<AutoRepateEntity>();
+                else
+                    return ResultList;
+            }
+            catch (Exception ex)
+            {
+                LogWriter.Write(ex.Message, LogPathDefine.ExceptionLogPath);
+                return new List<AutoRepateEntity>();
+            }
+        }
+        #endregion
+    }
+}