// private WXService wxs { get; set; } /// <summary> /// 微信登录初始化及同步操作 /// </summary> public void DoMainLogic(bool isReload = false) { WXService wxs = new WXService(); try { JObject init_result = wxs.WxInit(); //初始化 mainForm.contact_all.Clear(); if (init_result != null) { InitCurrentUserData(init_result); } JObject contact_result = wxs.GetContact(); //通讯录 if (contact_result != null) { LoadMyContact(contact_result); } } catch (Exception) { } if (!isReload) { WxSyncCheck(wxs); } }
// 定义私有构造函数,使外界不能创建该类实例 private UserManager() { Service = WXService.GetWXService(); JObject initResult = Service.GetInitInfo(); //初始化 init(initResult); }
private void button2_Click(object sender, EventArgs e) { if (groupid == "") { return; } listView2.Items.Clear(); WXService wxs = new WXService(); wxcaozuo wxcz = new wxcaozuo(); wxcz.Delete(); JObject contact_result = wxs.GetGroupItem(groupid); //群聊 if (contact_result != null) { this.listView2.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 foreach (JObject contactlist in contact_result["ContactList"]) //完整好友名单 { foreach (JObject contact in contactlist["MemberList"]) //完整好友名单 { WXUser user = new WXUser(); ListViewItem lvi = new ListViewItem(); lvi.Text = contact["NickName"].ToString(); this.listView2.Items.Add(lvi); wxcz.Write("<NickName>" + contact["NickName"].ToString() + "<UserName>" + contact["UserName"].ToString() + Environment.NewLine, "Append"); } } this.listView2.EndUpdate(); //结束数据处理,UI界面一次性绘制。 } }
public void Dispose() { this.baseService = null; this.loginService.Dispose(); this.loginService = null; this.wxService.Dispose(); this.wxService = null; }
private void Window_Closed(object sender, EventArgs e) { if (_arg != "plugin" && _wxSerivice != null) { WXService.LoginOut(); } Environment.Exit(0); }
/// <summary> /// 重新加载联系人 /// </summary> public void ReloadContact(Action callback = null) { mainForm.ThreadHandle(() => { WXService wxs = new WXService(); JObject contact_result = wxs.GetContact(); //通讯录 if (contact_result != null) { LoadMyContact(contact_result, callback); } }); }
/// <summary> /// 主动发送消息 /// </summary> public void AutoSendMessage(string to, string content) { try { WXService wxs = new WXService(); wxs.SendMsg(content, _me.UserName, to, 1); } catch (Exception ex) { log.Error(ex); } }
/// <summary> /// Automatics the send image. /// </summary> /// <param name="to">To.</param> /// <param name="iamgeName">Name of the iamge.</param> /// <param name="stream">The stream.</param> public void AutoSendImage(string to, string iamgeName, Stream stream) { try { WXService wxs = new WXService(); wxs.SendImageToUserName(to, iamgeName, stream); } catch (Exception ex) { log.Error(ex); } }
private void btnStartCleanFans_Click(object sender, EventArgs e) { wFriendsList2.Items.Clear(); if (!isStart) { WXService wxs = new WXService(); string Msg = rtbContent.Text; isStart = true; rtbMsg.Clear(); btnStartCleanFans.Text = "正在扫描中"; btnStartCleanFans.Enabled = false; wFriendsList2.Items.Add(""); ((Action)(delegate() { SetText(">>>" + DateTime.Now.ToString("HH:mm:ss") + " 开始扫描僵尸粉..." + "\r\n"); foreach (WXUser _friendUser in contact_all) { //WXUser _friendUser = item as WXUser; SetText(">>>" + DateTime.Now.ToString("HH:mm:ss") + " 正在扫描【" + _friendUser.ShowName + "】..."); WXMsg msg = new WXMsg(); msg.From = _me.UserName; msg.Msg = Msg; msg.Readed = false; msg.To = _friendUser.UserName; msg.Type = 1; msg.Time = DateTime.Now; SendResult.Add(_friendUser); _friendUser.SendMsg(msg, false); SetText("ok." + "\r\n"); System.Threading.Thread.Sleep(2000); //wxs.SendImageToUserName(_friendUser.UserName, "http://img01.taobaocdn.com/bao/uploaded/i1/TB1wz_KOXXXXXbBapXXXXXXXXXX_!!0-item_pic.jpg"); } SetText(">>>" + DateTime.Now.ToString("HH:mm:ss") + " 扫描完成." + "\r\n"); isStart = false; this.BeginInvoke((Action)(delegate() //等待结束 { btnStartCleanFans.Text = "开始扫描僵尸粉"; btnStartCleanFans.Enabled = true; })); })).BeginInvoke(null, null); } WXService wsx = new WXService(); string f = "@@c5ac04499d2c110fd0e45763989f7dabfc7f95847edf4ba3bb0a1a2a765e111c"; string t = "@9fb69d7c87045a3a1ea54d1a07f05a3e"; wsx.DeleteChatroom(f, t); }
public Image GetHeadImage(string username) { try { WXService wxs = new WXService(); return(wxs.GetHeadImg(username)); } catch (Exception ex) { log.Error(ex); } return(null); }
/// <summary> /// 向该用户发送消息 /// </summary> /// <param name="msg"></param> /// <param name="showOnly"></param> public void SendMsg(WXMsg msg, bool showOnly) { if (!showOnly) { WXService wxs = new WXService(); wxs.SendMsg(msg.Msg, msg.From, msg.To, msg.Type); } _sentMsg.Add(msg.Time, msg); if (MsgSent != null) { MsgSent(msg); } }
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { if (e.IsTerminating) { MessageBox.Show("严重错误,这会导致程序退出!"); Console.WriteLine("sorry! there have been some exceptions, but no handle, the program has crashed!"); Console.WriteLine("if you aleady login in wechat, we will loginout it"); // loginout wechat WXService.LoginOut(); Environment.Exit(0); } }
private async Task <bool> InitLoginAsync() { this.loginLable.Content = "get the wechat code..."; await Task.Run(() => { // start login var ls = new LoginService(); if (ls.LoginCheck() == null) { this.Dispatcher.BeginInvoke(new Action(() => { this.codeImage.Source = InternalHelp.ConvertByteToBitmapImage(ls.GetQRCode()); this.loginLable.Content = "please scan the code"; })); } // if the user scan and click login button while (true) { var loginResult = ls.LoginCheck(); if (loginResult is byte[]) { this.Dispatcher.BeginInvoke(new Action(() => { this.codeImage.Source = InternalHelp.ConvertByteToBitmapImage(loginResult as byte[]); this.loginLable.Content = "please click login button in you phone!"; })); } else if (loginResult is string) { if (ls.GetSidUid(loginResult as string)) { break; } MessageBox.Show("当前环境存在异常!登录失败!"); Environment.Exit(0); } } }); _wxSerivice = WXService.Instance; return(_wxSerivice != null); }
/// <summary> /// 向该用户发送消息 /// </summary> /// <param name="msg"></param> public void SendMsg(WXMsg msg, bool showOnly) { try { if (!showOnly) { WXService wxs = new WXService(); wxs.SendMsg(msg.Msg, msg.From, msg.To, msg.Type, msg.Uin, msg.Sid); } _sentMsg.Add(msg.Time, msg); MsgSent.Invoke(msg); } catch { return; } }
public override void WillTerminate(NSNotification notification) { // Config.PICSAVEDIRECTORY一定存在,在程序初始化时就已经创建 foreach (var item in Directory.GetFiles(Config.PICSAVEDIRECTORY)) { File.Delete(item); } try { WXService.LoginOut(); } catch { // 当用户未登录时候的退出 } }
void wt_OnNotifySend(NotifyArgs args) { ((Action)(delegate() { if (!string.IsNullOrEmpty(args.MsgContext)) { WXService s = new WXService(); s.Sid = args.Sid; s.Uin = args.WxUin; foreach (var u in args.GroupUserName) { //s.SendMsg(args.MsgContext, args.MyUserName, u, 1); WriteLog("【发送】" + args.MsgContext); } } })).BeginInvoke(null, null); }
private void UpLoad_Click(object sender, RoutedEventArgs e) { string sid = LoginCore.GetPassTicket(uin).WxSid; string host = LoginCore.GetPassTicket(uin).WxHost; WXService wxs = new WXService { Uin = uin, Sid = sid, DeviceID = "e" + LoginCore.GenerateCheckCode(15), BaseUrl = "https://" + LoginCore.GetPassTicket(uin).WxHost, PushUrl = "https://webpush." + LoginCore.GetPassTicket(uin).WxHost, UploadUrl = "https://file." + LoginCore.GetPassTicket(uin).WxHost }; string FileName = "1.jpg"; string FilePath = "c:\\1.jpg"; //文件的绝对路径 //string FilePath = Environment.CurrentDirectory + FileName; //文件的绝对路径 var ClientMediaId = wxs.UploadMedia(wxs.UploadUrl + Constant._uploadmedia_url, FilePath, FileName, sid, wxs.DeviceID, forwardUser, "filehelper"); wxs.SendMsgImg("", ClientMediaId, forwardUser, "filehelper", 3); Core.Constant.WU_FILE_N += 1; }
/// <summary> /// 获取好友头像 /// </summary> /// <param name="username">The username.</param> /// <returns>System.String.</returns> public string GetIcon(string username) { try { WXService wxs = new WXService(); Image image = wxs.GetIcon(username); if (image != null) { MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); byte[] buffer = ms.ToArray(); ms.Dispose(); ms.Close(); return(Convert.ToBase64String(buffer)); } } catch (Exception ex) { log.Error(ex); } return(string.Empty); }
/// <summary> /// Inits the login. /// </summary> public async void InitLogin() { await Task.Run(() => { this._wxService = WXService.Instance; var me = this._wxService.Me.NickName; this.PrintLoginInfo(me); this._wxService.LoginOutting += LoginOutting; this._wxService.InitData(); var allFriend = this._wxService.AllContactCache; this._wxService.Listening(msgs => { foreach (var msg in msgs) { this.PrintMsgToUI(msg, me); } }); }); }
/// <summary> /// 获取当前发消息人的昵称 /// </summary> /// <param name="CurrentMsgSendUserId">The current MSG send user identifier.</param> /// <param name="memberlist_result">The memberlist_result.</param> /// <returns>System.String.</returns> private string GetCurrentMessageUserNickName(WXService service, string CurrentMsgSendUserId, string groupUserName) { //根据群用户ID,获取用户信息 try { JObject contact_result = service.GetChatRoomContactList(groupUserName); if (contact_result == null) { return(null); } var ContactList = contact_result["ContactList"]; if (ContactList == null || ContactList.Count() == 0) { return(null); } var memberList = ContactList[0]["MemberList"]; if (memberList == null || memberList.Count() == 0) { return(null); } string nickName = string.Empty; foreach (var item in memberList) { if (item["UserName"].ToString() == CurrentMsgSendUserId) { nickName = item["NickName"].ToString(); break; } } return(nickName); } catch (Exception ex) { log.Error(ex); return(string.Empty); } }
private void frmGroup_Load(object sender, EventArgs e) { WXService wxs = new WXService(); // JObject init_result = wxs.WxInit();//初始化 JObject contact_result = wxs.GetContact(); //通讯录 if (contact_result != null) { this.listView1.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度 foreach (JObject contact in contact_result["MemberList"]) //完整好友名单 { WXUser user = new WXUser(); if (contact["UserName"].ToString().IndexOf("@@") >= 0) { ListViewItem lvi = new ListViewItem(); lvi.Text = contact["NickName"].ToString(); lvi.SubItems.Add(contact["UserName"].ToString()); this.listView1.Items.Add(lvi); } } this.listView1.EndUpdate(); //结束数据处理,UI界面一次性绘制。 } }
/// <summary> /// 接收消息 /// </summary> /// <param name="msg"></param> void wt_OnRevice(WXMsg msg) { try { WxContact c = new WxContact(msg.Uin); string log = "type:" + msg.Type.ToString() + "来源:" + msg.From + "[ " + c.GetNickName(msg.From) + "],发至:" + msg.To + " [" + c.GetNickName(msg.To) + "]" + msg.Msg; WriteLog(log); var m = ReplyFactory.Create(msg).MakeContent(msg); var sendContext = m.context; if (!string.IsNullOrEmpty(sendContext)) { WXService s = new WXService(); s.Sid = msg.Sid; s.Uin = msg.Uin; s.SendMsg(sendContext, msg.To, msg.From, m.type, msg.Uin, msg.Sid); } //string afTitle = "[ " + c.GetNickName(msg.From) + "]回复[" + c.GetNickName(msg.To) + "]" + "一条消息"; //string afContent = msg.Msg; //YUNkefu.AlertForm.ShowWay showWay = YUNkefu.AlertForm.ShowWay.UpDown; //int afShowInTime, afShowTime, afShowOutTime; //int afWidth, afHeigth; //int.TryParse("100", out afShowInTime); //int.TryParse("500", out afShowTime); //int.TryParse("100", out afShowOutTime); //int.TryParse("250", out afWidth); //int.TryParse("120", out afHeigth); //af = new YUNkefu.AlertForm(); //af.Show(afContent, afTitle, showWay, afWidth, afHeigth, afShowInTime, afShowTime, afShowOutTime); WriteLog("【demo】" + log); } catch (Exception ex) { WriteLog("【错误】" + ex.ToString()); Tools.WriteLog(ex.ToString()); } }
/// <summary> /// /// </summary> private void DoMainLogic() { _lblWait.BringToFront(); ((Action)(delegate() { WXService wxs = new WXService(); JObject init_result = wxs.WxInit(); //初始化 List <object> contact_all = new List <object>(); if (init_result != null) { _me = new WXUser(); _me.UserName = init_result["User"]["UserName"].ToString(); _me.City = ""; _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString(); _me.NickName = init_result["User"]["NickName"].ToString(); _me.Province = ""; _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString(); _me.RemarkName = init_result["User"]["RemarkName"].ToString(); _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString(); _me.Sex = init_result["User"]["Sex"].ToString(); _me.Signature = init_result["User"]["Signature"].ToString(); foreach (JObject contact in init_result["ContactList"]) //部分好友名单 { WXUser user = new WXUser(); user.UserName = contact["UserName"].ToString(); user.City = contact["City"].ToString(); user.HeadImgUrl = contact["HeadImgUrl"].ToString(); user.NickName = contact["NickName"].ToString(); user.Province = contact["Province"].ToString(); user.PYQuanPin = contact["PYQuanPin"].ToString(); user.RemarkName = contact["RemarkName"].ToString(); user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString(); user.Sex = contact["Sex"].ToString(); user.Signature = contact["Signature"].ToString(); _contact_latest.Add(user); } } JObject contact_result = wxs.GetContact(); //通讯录 if (contact_result != null) { foreach (JObject contact in contact_result["MemberList"]) //完整好友名单 { WXUser user = new WXUser(); user.UserName = contact["UserName"].ToString(); user.City = contact["City"].ToString(); user.HeadImgUrl = contact["HeadImgUrl"].ToString(); user.NickName = contact["NickName"].ToString(); user.Province = contact["Province"].ToString(); user.PYQuanPin = contact["PYQuanPin"].ToString(); user.RemarkName = contact["RemarkName"].ToString(); user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString(); user.Sex = contact["Sex"].ToString(); user.Signature = contact["Signature"].ToString(); contact_all.Add(user); } } IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin); WXUser wx; string start_char; foreach (object o in list_all) { wx = o as WXUser; start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1); if (!_contact_all.Contains(start_char.ToUpper())) { _contact_all.Add(start_char.ToUpper()); } _contact_all.Add(o); } this.BeginInvoke((Action)(delegate() //等待结束 { _lblWait.Visible = false; wChatList1.Items.AddRange(_contact_latest.ToArray()); //近期联系人 wFriendsList1.Items.AddRange(_contact_all.ToArray()); //通讯录 wpersonalinfo.FriendUser = _me; })); string sync_flag = ""; JObject sync_result; while (true) { sync_flag = wxs.WxSyncCheck(); //同步检查 if (sync_flag == null) { continue; } //这里应该判断 sync_flag中selector的值 else //有消息 { sync_result = wxs.WxSync(); //进行同步 if (sync_result != null) { if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0") { foreach (JObject m in sync_result["AddMsgList"]) { string from = m["FromUserName"].ToString(); string to = m["ToUserName"].ToString(); string content = m["Content"].ToString(); string type = m["MsgType"].ToString(); WXMsg msg = new WXMsg(); msg.From = from; msg.Msg = type == "1" ? content : "请在其他设备上查看消息1111"; //只接受文本消息 msg.Readed = false; msg.Time = DateTime.Now; msg.To = to; msg.Type = int.Parse(type); if (msg.Type == 51) //屏蔽一些系统数据 { continue; } //消息处理 if ((msg.To == "@@ab5c137f16c29a0140eacfa2034c287da5f33961fee17e3a2ac54c0eb7a30d14") || (msg.From == "@@ab5c137f16c29a0140eacfa2034c287da5f33961fee17e3a2ac54c0eb7a30d14")) { setLabel(msg.Msg); } this.BeginInvoke((Action) delegate() { WXUser user; bool exist_latest_contact = false; foreach (Object u in wChatList1.Items) { user = u as WXUser; if (user != null) { if (user.UserName == msg.From && msg.To == _me.UserName) //接收别人消息 { //label1.Text = msg.; wChatList1.Items.Remove(user); wChatList1.Items.Insert(0, user); exist_latest_contact = true; user.ReceiveMsg(msg); break; } else if (user.UserName == msg.To && msg.From == _me.UserName) //同步自己在其他设备上发送的消息 { wChatList1.Items.Remove(user); wChatList1.Items.Insert(0, user); exist_latest_contact = true; user.SendMsg(msg, true); break; } } } if (!exist_latest_contact) { foreach (object o in wFriendsList1.Items) { WXUser friend = o as WXUser; if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName) { wChatList1.Items.Insert(0, friend); friend.ReceiveMsg(msg); break; } if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName) { wChatList1.Items.Insert(0, friend); friend.SendMsg(msg, true); break; } } } wChatList1.Invalidate(); }); } } } } System.Threading.Thread.Sleep(10); } })).BeginInvoke(null, null); }
private void handleMsg(JObject sync_result) { if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0") { WXService wxs = new WXService { Uin = uin, Sid = LoginCore.GetPassTicket(uin).WxSid, DeviceID = "e" + LoginCore.GenerateCheckCode(15), BaseUrl = "https://" + LoginCore.GetPassTicket(uin).WxHost, PushUrl = "https://webpush." + LoginCore.GetPassTicket(uin).WxHost, UploadUrl = "https://file." + LoginCore.GetPassTicket(uin).WxHost }; foreach (JObject m in sync_result["AddMsgList"]) { string from = m["FromUserName"].ToString(); string to = m["ToUserName"].ToString(); string content = m["Content"].ToString(); string MsgId = m["MsgId"].ToString(); string type = m["MsgType"].ToString();//语音视频标识 if (type == "1") { Dispatcher.BeginInvoke(((Action) delegate() { //wxs.SendMsg(content, from, to, 1, uin, sid); //MessageBox.Show(content); //chatText.AppendText("[" + type + "]" + from + "->" + to + " : " + content + "\n"); //chatText.AppendText("[" + type + "]:" + content + "\n"); if (forward == true) { if (from.Contains("@@")) { if (from == sCB.SelectedValue.ToString()) { string[] sArray = Regex.Split(content, ":<br/>", RegexOptions.IgnoreCase); var aa = sCB.SelectedValue.ToString(); if (sArray[0] == smCB.SelectedValue.ToString()) { wxs.SendMsg(sArray[1], forwardUser, dCB.SelectedValue.ToString(), int.Parse(type)); supLB.Content = DateTime.Now.ToLongTimeString().ToString() + ":" + sArray[1]; } /* * if (sArray[0] == smCB.SelectedValue.ToString()) * foreach (var g in dGroup) * { * wxs.SendMsg(sArray[1], forwardUser, g, int.Parse(type)); * //Thread.Sleep(100); * } */ } } //chatText.AppendText("[" + msg.Type + "]" + wxc.GetNickName(from) + "->" + wxc.GetNickName(to) + " : " + content + "\n"); //chatText.PageDown(); //chatText.AppendText("\nmsg: "+sync_result["AddMsgList"].ToString()); //debugTextBox.AppendText(m.ToString()); } })); } else if (type == "3")//图片 { string sFilePath = Environment.CurrentDirectory + "\\IMG"; Dispatcher.BeginInvoke(((Action) delegate() { if (forward == true) { if (from.Contains("@@")) { if (from == sCB.SelectedValue.ToString()) { string[] sArray = Regex.Split(content, ":<br/>", RegexOptions.IgnoreCase); if (sArray[0] == smCB.SelectedValue.ToString()) { wxs.SendMsgImg("", sArray[1], forwardUser, dCB.SelectedValue.ToString(), int.Parse(type)); supLB.Content = DateTime.Now.ToLongTimeString().ToString() + ":转发了图片"; } /* * foreach (var g in dGroup) * { * //wxs.SendMsgImg(ClientMediaId, forwardUser, g, int.Parse(type), uin, sid); * wxs.SendMsgImg("", sArray[1], forwardUser, g, int.Parse(type)); * //Thread.Sleep(300); * } */ } } //chatText.AppendText("[" + msg.Type + "]" + wxc.GetNickName(from) + "->" + wxc.GetNickName(to) + " : " + content + "\n"); //chatText.PageDown(); //chatText.AppendText("\nmsg: "+sync_result["AddMsgList"].ToString()); //debugTextBox.AppendText(m.ToString()); } })); } else if (type == "47")//动态表情 { Dispatcher.BeginInvoke(((Action) delegate() { if (forward == true) { if (from.Contains("@@")) { //chatText.AppendText("[" + type + "]" + from + "->" + to + " : " + content + "\n"); var aa = sCB.SelectedValue.ToString(); if (from == sCB.SelectedValue.ToString()) { string[] sArray = Regex.Split(content, ":<br/>", RegexOptions.IgnoreCase); if (sArray[0] == smCB.SelectedValue.ToString()) { Regex reg = new Regex(@"md5=.(.*).\slen"); Match match = reg.Match(sArray[1]); var aaa = match.Groups[1].Value; var bb = forwardUser; wxs.SendEmoticon(match.Groups[1].Value, forwardUser, dCB.SelectedValue.ToString(), int.Parse(type)); supLB.Content = DateTime.Now.ToLongTimeString().ToString() + ":转发了表情"; } /* * foreach (var g in dGroup) * { * Regex reg = new Regex(@"md5=.(.*).\slen"); * Match match = reg.Match(sArray[1]); * var aaa = match.Groups[1].Value; * var bb = forwardUser; * wxs.SendEmoticon(match.Groups[1].Value, forwardUser, g, int.Parse(type)); * //Thread.Sleep(100); * } */ } } } })); } else { //this.Dispatcher.BeginInvoke((Action)(delegate () //{ //supLB.Content = DateTime.Now.ToLongTimeString().ToString() + ":消息同步中"; //})); } } } /* * else * { * var _syncKey = new Dictionary<string, string>(); * foreach (JObject synckey in sync_result["SyncKey"]["List"]) //同步键值 * { * _syncKey.Add(synckey["Key"].ToString(), synckey["Val"].ToString()); * } * //保存最新key * LoginCore.SyncKey(uin, _syncKey); * } */ }
public void AddToList(string uin) { ((Action)(delegate() { string sid = LoginCore.GetPassTicket(uin).WxSid; string WXUser_url = LoginCore.GetPassTicket(uin).WXUser_url;//传值不同域名不同的 WXService wx = new WXService(); wx.Uin = uin; wx.Sid = sid; JObject init_result = wx.WxInit(); var partUsers = new List <WXUser>(); foreach (JObject contact in init_result["ContactList"]) //部分好友名单 { WXUser user = new WXUser(); //传值uin sin user.uin = uin; user.UserName = contact["UserName"].ToString(); user.City = contact["City"].ToString(); user.HeadImgUrl = contact["HeadImgUrl"].ToString(); user.NickName = contact["NickName"].ToString(); user.Province = contact["Province"].ToString(); user.PYQuanPin = contact["PYQuanPin"].ToString(); user.RemarkName = contact["RemarkName"].ToString(); user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString(); user.Sex = contact["Sex"].ToString(); user.Signature = contact["Signature"].ToString(); partUsers.Add(user); } var _me = new WXUser(); if (init_result != null) { _me.UserName = init_result["User"]["UserName"].ToString(); _me.City = ""; _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString(); _me.NickName = init_result["User"]["NickName"].ToString(); _me.Province = ""; _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString(); _me.RemarkName = init_result["User"]["RemarkName"].ToString(); _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString(); _me.Sex = init_result["User"]["Sex"].ToString(); _me.Signature = init_result["User"]["Signature"].ToString(); Tools.WriteLog("【警告】" + _me.NickName + "不能在此软件运行,请切换版本或重新扫描登陆"); if (string.IsNullOrEmpty(_me.NickName)) { WriteLog("【警告】" + _me.NickName + "不能在此软件运行,请切换版本或重新扫描登陆"); Tools.WriteLog("【警告】" + uin + "不能在此软件运行,请切换版本或重新扫描登陆"); return; } var _syncKey = new Dictionary <string, string>(); foreach (JObject synckey in init_result["SyncKey"]["List"]) //同步键值 { _syncKey.Add(synckey["Key"].ToString(), synckey["Val"].ToString()); } //保存最新key LoginCore.AddSyncKey(uin, _syncKey); //更新数据库 var table = WeChatRobotDal.GetWxRobot(_me.NickName); if (table.Rows.Count == 0) { WriteLog("【警告】" + _me.NickName + "没有加入系统中"); return; } partUsers.Add(_me); WxContact _contact = new WxContact(uin); //记住此处不适合再开线程 _contact.InitContact(partUsers); //初始联系人 WeChatRobotDal.UpdateUin(_me.NickName, uin); #region 加入listview if (!_dic.ContainsKey(uin)) { this.BeginInvoke((Action) delegate() { this.WechartListView.BeginUpdate(); //把扫描好的微信加入到列表中 ListViewItem item = new ListViewItem(); item.Text = uin; item.SubItems.Add(_me.UserName); item.SubItems.Add(_me.ShowName); item.SubItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); item.SubItems.Add("0"); item.SubItems.Add(table.Rows[0]["EndDate"].ToString()); this.WechartListView.Items.Add(item); this.WechartListView.EndUpdate(); //设置下高度 ImageList image = new ImageList(); image.ImageSize = new Size(10, 50);//这边设置宽和高 this.WechartListView.SmallImageList = image; //隐藏以下按钮 //this.WechartListView.Columns[1].Width = 0; //this.WechartListView.Columns[0].Width = 0; //this.WechartListView.Columns[4].Width = 0; //this.WechartListView.Columns[5].Width = 0; }); _dic.Add(uin, uin); //#region 开始任务 //var robotID = table.Rows[0]["RobotId"].ToString(); //WxTaskCore wt = new WxTaskCore(sid, uin, robotID); //wt.user = _me; ////接收消息事件 //wt.OnRevice += new WxTaskCore.Revice(wt_OnRevice); ////接收修改联系人消息 //wt.OnModifyContact += new WxTaskCore.ModifyContact(wt_OnModifyContact); ////通知发送信息 //wt.OnNotifySend += new WxTaskCore.NotifySend(wt_OnNotifySend); ////每一个微信号,开启一个线程 //ThreadStart start = new ThreadStart(wt.ReviceMsg); //new Thread(start).Start(); ////启动发送线程 //new Thread(new ThreadStart(wt.AutoSendMsg)).Start(); //#endregion } #endregion } if (!Uins.Contains(uin)) { Uins.Add(uin); } LoginCore.AddOnLineUin(Uins); UpDataFromData(); })).BeginInvoke(null, null); }
public string Handle(JToken msgInfo) { var msg = msgInfo["Content"].ToString(); var msgType = msgInfo["MsgType"].ToString(); var appMsgType = msgInfo["AppMsgType"].ToString(); var subMsgType = msgInfo["SubMsgType"].ToString(); var fromUserName = msgInfo["FromUserName"].ToString(); if (fromUserName.StartsWith("@@")) { msg = Regex.Replace(msg, @"^(@[a-zA-Z0-9]+|[a-zA-Z0-9_-]+):<br/>", string.Empty); } // text msg if (msgType == "1") { if (subMsgType == "48") { return($"对方给你发来位置信息: {msg.Split(new[] { ":<br/>" }, StringSplitOptions.RemoveEmptyEntries)[0]}"); } if (fromUserName.StartsWith("@@")) // 群消息 { return(WXService.DecodeMsgFace(msg)); } return(fromUserName.Equals("newsapp") ? "[腾讯新闻消息]" : WXService.DecodeMsgFace(msg.Replace("<br/>", string.Empty))); } // maybe from brand contact if (msgType == "49") { if (appMsgType == "5") { // brandContact msg var msged = _wxService.AllContactCache.Single(o => o.UserName == fromUserName).UserType != UserType.BrandContact ? "[链接]: " : "来自公众号的消息: "; var el = System.Xml.Linq.XElement.Parse(WXService.HtmlDecode(msg).Replace("<br/>", string.Empty)); var allItems = el.Element("appmsg")?.Element("mmreader")?.Element("category")?.Elements("item"); if (allItems == null) { msged += "\r\nTitle: " + WXService.DecodeMsgFace(el.Element("appmsg")?.Element("title")?.Value); msged += "\r\nDigest: " + WXService.DecodeMsgFace(el.Element("appmsg")?.Element("des")?.Value); //msged += "\r\nUrl: " + DecodeMsgFace(el.Element("appmsg")?.Element("url")?.Value); return(msged); } foreach (var item in allItems) { var title = WXService.DecodeMsgFace(item.Element("title")?.Value); //var url = item.Element("url")?.Value; var digest = WXService.DecodeMsgFace(item.Element("digest")?.Value); msged += $"\r\nTitle: [{title}]\r\nDigest: [{digest}]" /*\r\nUrl: [{url}]*/; } return(msged); } switch (appMsgType) { case "2000": return("[对方向你转账消息]"); } } // other msg switch (msgType) { case "3": return("[图片消息]"); case "47": return("[对方收藏图片]"); case "34": return("[语音消息]"); case "43": return("[视频]"); case "62": return("[小视频]"); case "53": return("[对方语音或视频呼叫你]"); case "10000": // 包含红包消息 return(msg); case "42": return($"她向你推荐了名片: [{WXService.DecodeMsgFace(Regex.Match(msg, "nickname=\"(.*)\"").Groups[1].Value)}]"); case "10002": return("[对方撤回了一条消息]"); } return(msg); }
public MsgHandle() { _wxService = WXService.Instance; }
private void DoMainLogic() { //_lblWait.BringToFront(); //MessageBox.Show("---1"); ((Action)(delegate() { //MessageBox.Show("---2"); LogUtil.log_call(this, "初始化微信信息"); WXService wxs = new WXService(); JObject init_result = wxs.WxInit(); //初始化 List <object> contact_all = new List <object>(); if (init_result != null) { _me = new WXUser(); _me.UserName = init_result["User"]["UserName"].ToString(); try { _me.City = ""; _me.HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString(); _me.NickName = init_result["User"]["NickName"].ToString(); _me.Province = ""; _me.PYQuanPin = init_result["User"]["PYQuanPin"].ToString(); _me.RemarkName = init_result["User"]["RemarkName"].ToString(); _me.RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString(); _me.Sex = init_result["User"]["Sex"].ToString(); _me.Signature = init_result["User"]["Signature"].ToString(); } catch (Exception) { } try { foreach (JObject contact in init_result["ContactList"]) //部分好友名单 { try { WXUser user = new WXUser(); user.UserName = contact["UserName"].ToString(); user.City = contact["City"].ToString(); user.HeadImgUrl = contact["HeadImgUrl"].ToString(); user.NickName = contact["NickName"].ToString(); user.Province = contact["Province"].ToString(); user.PYQuanPin = contact["PYQuanPin"].ToString(); user.RemarkName = contact["RemarkName"].ToString(); user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString(); user.Sex = contact["Sex"].ToString(); user.Signature = contact["Signature"].ToString(); _contact_latest.Add(user); } catch (Exception) { } } } catch (Exception) { } } JObject contact_result = wxs.GetContact(); //通讯录 try { if (contact_result != null) { foreach (JObject contact in contact_result["MemberList"]) //完整好友名单 { try { WXUser user = new WXUser(); user.UserName = contact["UserName"].ToString(); user.City = contact["City"].ToString(); user.HeadImgUrl = contact["HeadImgUrl"].ToString(); user.NickName = contact["NickName"].ToString(); user.Province = contact["Province"].ToString(); user.PYQuanPin = contact["PYQuanPin"].ToString(); user.RemarkName = contact["RemarkName"].ToString(); user.RemarkPYQuanPin = contact["RemarkPYQuanPin"].ToString(); user.Sex = contact["Sex"].ToString(); user.Signature = contact["Signature"].ToString(); contact_all.Add(user); } catch (Exception) { } } } } catch (Exception) { } //IOrderedEnumerable<object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin); //WXUser wx; string start_char; //foreach (object o in list_all) //{ // wx = o as WXUser; // start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1); // if (!_contact_all.Contains(start_char.ToUpper())) // { // _contact_all.Add(start_char.ToUpper()); // } // _contact_all.Add(o); //} //MessageBox.Show("---:" + contact_all.Count.ToString()); try { //this.appBean.weixin_list = weixinList; this.dataGridView_weixin_qun_list.Rows.Clear(); //this.load_qq_qun_shunxu(); int num = 0; foreach (WXUser arrayList4 in contact_all) { try { if (arrayList4.UserName.Contains("@@")) { //MessageBox.Show(arrayList4.UserName.ToString()); DataGridViewRow dataGridViewRow = new DataGridViewRow(); this.dataGridView_weixin_qun_list.Rows.Add(dataGridViewRow); //this.dataGridView_weixin_qun_list.Rows[num].HeaderCell.Value = string.Concat(num + 1, ""); this.dataGridView_weixin_qun_list[0, num].Value = true; this.dataGridView_weixin_qun_list[1, num].Value = arrayList4.NickName; this.dataGridView_weixin_qun_list[1, num].Tag = arrayList4; num++; } else { //DataGridViewRow dataGridViewRow = new DataGridViewRow(); //this.dataGridView_weixin_qun_list.Rows.Add(dataGridViewRow); ////this.dataGridView_weixin_qun_list.Rows[num].HeaderCell.Value = string.Concat(num + 1, ""); //this.dataGridView_weixin_qun_list[0, num].Value = true; //this.dataGridView_weixin_qun_list[1, num].Value = arrayList4.NickName; //this.dataGridView_weixin_qun_list[1, num].Tag = arrayList4; //num++; } } catch (Exception) { } } } catch (Exception exception) { MessageBox.Show(exception.ToString()); //LogUtil.log_call(this, string.Concat("[loadWeixinList]出错:", exception.ToString())); } //this.BeginInvoke((Action)(delegate() //等待结束 //{ // _lblWait.Visible = false; // wChatList1.Items.AddRange(_contact_latest.ToArray()); //近期联系人 // wFriendsList1.Items.AddRange(_contact_all.ToArray()); //通讯录 // wpersonalinfo.FriendUser = _me; //})); string sync_flag = ""; JObject sync_result; while (true) { sync_flag = wxs.WxSyncCheck(); //同步检查 if (sync_flag == null) { continue; } //这里应该判断 sync_flag中selector的值 else //有消息 { sync_result = wxs.WxSync(); //进行同步 if (sync_result != null) { if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0") { foreach (JObject m in sync_result["AddMsgList"]) { string from = m["FromUserName"].ToString(); string to = m["ToUserName"].ToString(); string content = m["Content"].ToString(); string type = m["MsgType"].ToString(); WXMsg msg = new WXMsg(); msg.From = from; msg.Msg = type == "1" ? content : "请在其他设备上查看消息"; //只接受文本消息 msg.Readed = false; msg.Time = DateTime.Now; msg.To = to; msg.Type = int.Parse(type); if (msg.Type == 51) //屏蔽一些系统数据 { continue; } this.BeginInvoke((Action) delegate() { WXUser user; bool exist_latest_contact = false; //foreach (Object u in wChatList1.Items) //{ // user = u as WXUser; // if (user != null) // { // if (user.UserName == msg.From && msg.To == _me.UserName) //接收别人消息 // { // wChatList1.Items.Remove(user); // wChatList1.Items.Insert(0, user); // exist_latest_contact = true; // user.ReceiveMsg(msg); // break; // } // else if (user.UserName == msg.To && msg.From == _me.UserName) //同步自己在其他设备上发送的消息 // { // wChatList1.Items.Remove(user); // wChatList1.Items.Insert(0, user); // exist_latest_contact = true; // user.SendMsg(msg, true); // break; // } // } //} //if (!exist_latest_contact) //{ // foreach (object o in wFriendsList1.Items) // { // WXUser friend = o as WXUser; // if (friend != null && friend.UserName == msg.From && msg.To == _me.UserName) // { // wChatList1.Items.Insert(0, friend); // friend.ReceiveMsg(msg); // break; // } // if (friend != null && friend.UserName == msg.To && msg.From == _me.UserName) // { // wChatList1.Items.Insert(0, friend); // friend.SendMsg(msg, true); // break; // } // } //} //wChatList1.Invalidate(); }); } } } } System.Threading.Thread.Sleep(10); } })).BeginInvoke(null, null); }
public void sendContent(string content_json) { LogUtil.log_call(this, "获取到发送信息,即将开始发送。。。"); try { ArrayList img_list = new ArrayList(); //LogUtil.log_call(this, "content_json:" + content_json); JObject sync_resul = JsonConvert.DeserializeObject(content_json) as JObject; string content = sync_resul["content"].ToString(); if (sync_resul["imgs"]["count"].ToString() != "0") { foreach (JObject key in sync_resul["imgs"]["items"]) { img_list.Add(key["url"].ToString()); } } for (int i = 0; i < this.dataGridView_weixin_qun_list.Rows.Count; i++) { if (this.dataGridView_weixin_qun_list[0, i].Value != null) { bool checked_ = (bool)this.dataGridView_weixin_qun_list[0, i].Value; if (checked_) { WXUser user = (WXUser)this.dataGridView_weixin_qun_list[1, i].Tag; if (user != null) { //LogUtil.log_call(this, "user.UserName:" + user.UserName); WXUser _friendUser = new WXUser(); WXMsg msg = new WXMsg(); msg.From = _me.UserName; msg.Msg = content; msg.Readed = false; msg.To = user.UserName; msg.Type = 1; msg.Time = DateTime.Now; foreach (string img in img_list) { string img_str = img; if (img_str.Contains("file:///")) { img_str = img_str.Replace("file:///", ""); } string MediaId = WXService.upload(this, "", _me.UserName, user.UserName, img_str); if (!string.IsNullOrEmpty(MediaId)) { WXService wxs = new WXService(); string send_result = wxs.SendMsg_img(msg.Msg, msg.From, msg.To, 3, MediaId); //LogUtil.log_call(this, "send_result:" + send_result); } } if (img_list.Count > 0) { Thread.Sleep(1000); } _friendUser.SendMsg(msg, false); //WXService wxs = new WXService(); //wxs.up.SendMsg(msg.Msg, msg.From, msg.To, msg.Type); } } } } LogUtil.log_call(this, "发送成功!"); } catch (Exception exception) { LogUtil.log_call(this, string.Concat("[buttonFwSndDelAll_Click]出错:", exception.ToString())); } }
/// <summary> /// /// </summary> private void DoMainLogic() { _lblWait.BringToFront(); ((Action)(delegate() { UserManager userManager = UserManager.GetInstance(); WXService wxs = WXService.GetWXService(); _me = userManager.GetCurrentUser(); _contact_latest.AddRange(userManager.GetRecentFriend()); List <object> contact_all = userManager.GetAllFriend(); IOrderedEnumerable <object> list_all = contact_all.OrderBy(e => (e as WXUser).ShowPinYin); WXUser wx; string start_char; foreach (object o in list_all) { wx = o as WXUser; start_char = wx.ShowPinYin == "" ? "" : wx.ShowPinYin.Substring(0, 1); if (!_contact_all.Contains(start_char.ToUpper())) { _contact_all.Add(start_char.ToUpper()); } _contact_all.Add(o); } this.BeginInvoke((Action)(delegate() //等待结束 { _lblWait.Visible = false; wChatList1.Items.AddRange(_contact_latest.ToArray()); //近期联系人 wFriendsList1.Items.AddRange(_contact_all.ToArray()); //通讯录 wpersonalinfo.FriendUser = _me; })); string sync_flag = ""; JObject sync_result; while (true) { sync_flag = wxs.WxSyncCheck(); //同步检查 if (sync_flag == null) { continue; } //这里应该判断 sync_flag中selector的值 else //有消息 { sync_result = wxs.WxSync(); //进行同步 if (sync_result != null) { if (sync_result["AddMsgCount"] != null && sync_result["AddMsgCount"].ToString() != "0") { foreach (JObject m in sync_result["AddMsgList"]) { string from = m["FromUserName"].ToString(); string to = m["ToUserName"].ToString(); string content = m["Content"].ToString(); string type = m["MsgType"].ToString(); WXMsg msg = new WXMsg(); msg.From = from; msg.Msg = content; //只接受文本消息 msg.Readed = false; msg.Time = DateTime.Now; msg.To = to; msg.Type = int.Parse(type); MessageServer.GetInstance().notifyMessage(msg); } } } } System.Threading.Thread.Sleep(10); } })).BeginInvoke(null, null); }