/// <summary> /// 发送消息 /// </summary> /// <param name="msg"></param> /// <param name="from"></param> /// <param name="to"></param> /// <param name="type"></param> public void SendMsg(string msg, string from, string to, int type, string Uin, string Sid) { string msg_json = "{{" + "\"BaseRequest\":{{" + "\"DeviceID\" : \"e441551176\"," + "\"Sid\" : \"{0}\"," + "\"Skey\" : \"{6}\"," + "\"Uin\" : \"{1}\"" + "}}," + "\"Msg\" : {{" + "\"ClientMsgId\" : {8}," + "\"Content\" : \"{2}\"," + "\"FromUserName\" : \"{3}\"," + "\"LocalID\" : {9}," + "\"ToUserName\" : \"{4}\"," + "\"Type\" : {5}" + "}}," + "\"rr\" : {7}" + "}}"; var entity = LoginCore.GetPassTicket(Uin); if (Sid != null && Uin != null) { msg_json = string.Format(msg_json, Sid, Uin, msg, from, to, type, entity.SKey, DateTime.Now.Millisecond, DateTime.Now.Millisecond, DateTime.Now.Millisecond); byte[] bytes = HttpService.SendPostRequest(Constant._sendmsg_url + Sid + "&lang=zh_CN&pass_ticket=" + entity.PassTicket, msg_json, Uin); string send_result = Encoding.UTF8.GetString(bytes); } //((Action)delegate() //{ // //存储发送消息 // var b = WxOperateLogDal.AddWxsendmsglog(Uin, from, msg,to,from); //}).BeginInvoke(null, null); }
/// <summary> /// 点击发送 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private void SendContent_Click(object sender, EventArgs e) { try //if (rSendContent.Text != null && _friendUser != null && _meUser != null) { if (rSendContent.Text.Trim() == "") //Trim()是去除空格 { MessageBox.Show("(*^__^*) 嘻嘻……\n不能发空消息", "提 示"); } else { WXMsg msg = new WXMsg(); msg.Uin = _meUser.uin; msg.Sid = LoginCore.GetPassTicket(_meUser.uin).WxSid; msg.From = _meUser.UserName; msg.Msg = rSendContent.Text; msg.Readed = false; msg.To = _friendUser.UserName; msg.Type = 1; msg.Time = DateTime.Now; _friendUser.SendMsg(msg, false); rSendContent.Clear(); rSendContent.Focus(); } } catch { return; } }
/// <summary> /// 发送表情 /// </summary> /// <param name="msg"></param> /// <param name="from"></param> /// <param name="to"></param> /// <param name="type"></param> public void SendEmoticon(string EMoticonMd5, string from, string to, int type) { string msg_json = "{{" + "\"BaseRequest\":{{" + "\"DeviceID\" : \"{0}\"," + "\"Sid\" : \"{1}\"," + "\"Skey\" : \"{2}\"," + "\"Uin\" : \"{3}\"" + "}}," + "\"Msg\" : {{" + "\"ClientMsgId\" : {4}," + "\"EMoticonMd5\" : \"{5}\"," + "\"FromUserName\" : \"{6}\"," + "\"LocalID\" : {7}," + "\"ToUserName\" : \"{8}\"," + "\"Type\" : {9}" + "}}," + "\"rr\" : {10}" + "}}"; var entity = LoginCore.GetPassTicket(Uin); if (Sid != null && Uin != null) { //((long)(DateTime.Now.ToUniversalTime() - new System.DateTime(1970, 1, 1)).TotalMilliseconds) * 10000 msg_json = string.Format(msg_json, DeviceID, Sid, entity.SKey, Uin, DateTime.Now.Millisecond, EMoticonMd5, from, DateTime.Now.Millisecond, to, type, DateTime.Now.Millisecond); byte[] bytes = HttpService.SendPostRequest(BaseUrl + Constant._webwxsendemoticon_url + "&pass_ticket=" + entity.PassTicket, msg_json, Uin); string send_result = Encoding.UTF8.GetString(bytes); var aa = send_result; } //((Action)delegate() //{ // //存储发送消息 // var b = WxOperateLogDal.AddWxsendmsglog(Uin, from, msg,to,from); //}).BeginInvoke(null, null); }
public WxContact(string uin) { _uin = uin; var entity = LoginCore.GetPassTicket(this._uin); if (entity != null) { wx.Sid = entity.WxSid; wx.Uin = this._uin; } }
public WxContact(string uin) { _uin = uin; var entity = LoginCore.GetPassTicket(_uin); if (entity != null) { wxs.Sid = entity.WxSid; wxs.Uin = this._uin; // wx.DeviceID= "e" + GenerateCheckCode(15); wxs.BaseUrl = "https://" + LoginCore.GetPassTicket(wxs.Uin).WxHost; } }
public string WxSyncCheck() { string sync_key = ""; try { var _syncKey = LoginCore.GetSyncKey(Uin); foreach (KeyValuePair <string, string> p in _syncKey) { sync_key += p.Key + "_" + p.Value + "%7C"; } sync_key = sync_key.TrimEnd('%', '7', 'C'); var entity = LoginCore.GetPassTicket(Uin); if (Sid != null && Uin != null) { var _synccheck_url = string.Format(PushUrl + Constant._synccheck_url, Sid, Uin, sync_key, (long)(DateTime.Now.ToUniversalTime() - new System.DateTime(1970, 1, 1)).TotalMilliseconds, entity.SKey.Replace("@", "%40"), DeviceID); byte[] bytes = HttpService.SendGetRequest(_synccheck_url + "&_=" + DateTime.Now.Ticks, Uin); if (bytes != null) { //string contact_str = Encoding.UTF8.GetString(bytes); return(Encoding.UTF8.GetString(bytes)); //string retcode = contact_str.ToString().Split(new string[] { "\"" }, StringSplitOptions.None)[1]; //string selector = contact_str.ToString().Split(new string[] { "\"" }, StringSplitOptions.None)[3]; //string[]rs= { retcode, selector }; //return contact_str; //return new string[]{ retcode, selector }; } else { return(null); } } else { return(null); } } catch (Exception ex) { //MessageBox.Show("WxSyncCheck" + ex.Message); Tools.Tools.WriteLog(ex.ToString()); return(""); //return null; } }
void shisan13ListView1_MouseDoubleClick(object sender, MouseEventArgs e) { TabPage tab = new TabPage(); tab.Name = WechartListView.SelectedItems[0].SubItems[0].Text; tab.Text = WechartListView.SelectedItems[0].SubItems[2].Text + "--云客服";//获取登录列表为微信 Wx_wechart form = new Wx_wechart(); form.Uin = WechartListView.SelectedItems[0].SubItems[0].Text; form.Sid = LoginCore.GetPassTicket(WechartListView.SelectedItems[0].SubItems[0].Text).WxSid; form.robotID = "013"; form.TopLevel = false; //设置为非顶级控件 tab.Controls.Add(form); WXMaintab.Controls.Add(tab); form.Show(); }
/// <summary> /// 微信初始化 /// </summary> /// <returns></returns> public JObject WxInit() { string init_json = "{{\"BaseRequest\":{{\"Uin\":\"{0}\",\"Sid\":\"{1}\",\"Skey\":\"{2}\",\"DeviceID\":\"e1615250492\"}}}}"; if (Uin != null && Sid != null) { string pass_ticket = LoginCore.GetPassTicket(Uin).PassTicket;//这个位置过来了 string skey = LoginCore.GetPassTicket(Uin).SKey; init_json = string.Format(init_json, Uin, Sid, skey); byte[] bytes = HttpService.SendPostRequest(Constant._init_url + "&pass_ticket=" + pass_ticket, init_json, Uin); string init_str = Encoding.UTF8.GetString(bytes); JObject init_result = JsonConvert.DeserializeObject(init_str) as JObject; return(init_result); } else { return(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> /// <returns></returns> public JObject WxSync() { var entity = LoginCore.GetPassTicket(Uin); string sync_json = "{{\"BaseRequest\" : {{\"DeviceID\":\"{6}\",\"Sid\":\"{1}\", \"Skey\":\"{5}\", \"Uin\":\"{0}\"}},\"SyncKey\" : {{\"Count\":{2},\"List\": [{3}]}},\"rr\" :{4}}}"; string sync_keys = ""; var _syncKey = LoginCore.GetSyncKey(Uin); foreach (KeyValuePair <string, string> p in _syncKey) { sync_keys += "{\"Key\":" + p.Key + ",\"Val\":" + p.Value + "},"; } sync_keys = sync_keys.TrimEnd(','); sync_json = string.Format(sync_json, this.Uin, this.Sid, _syncKey.Count, sync_keys, (long)(DateTime.Now.ToUniversalTime() - new System.DateTime(1970, 1, 1)).TotalMilliseconds, entity.SKey, DeviceID); if (this.Sid != null && this.Uin != null) { byte[] bytes = HttpService.SendPostRequest(BaseUrl + Constant._sync_url + this.Sid + "&lang=zh_CN&skey=" + entity.SKey + "&pass_ticket=" + entity.PassTicket, sync_json, this.Uin); string sync_str = Encoding.UTF8.GetString(bytes); if (sync_str == null) { return(null); } JObject sync_resul = JsonConvert.DeserializeObject(sync_str) as JObject; // Dictionary<string, string> ss = new Dictionary<string, string>(); if (sync_resul["SyncKey"]["Count"].ToString() != "1") { _syncKey.Clear(); foreach (JObject key in sync_resul["SyncKey"]["List"]) { _syncKey.Add(key["Key"].ToString(), key["Val"].ToString()); } } return(sync_resul); } else { return(null); } }
public JObject BatGetContact(List <string> groupUserName) { var entity = LoginCore.GetPassTicket(Uin); var _jstr = string.Empty; foreach (var username in groupUserName) { _jstr += string.Format("{{{{\"UserName\":\"{0}\",\"ChatRoomId\":\"\"}}}},", username, ""); } string json = "{{" + "\"BaseRequest\":{{\"Uin\":{0}," + "\"Sid\":\"{1}\"," + "\"Skey\":\"{2}\"," + "\"DeviceID\":\"{4}\"}}," + "\"Count\":{3}," + "\"List\":[" + _jstr.TrimEnd(',') + "]" + "}}"; try { json = string.Format(json, Uin, Sid, entity.SKey, groupUserName.Count, DeviceID); } catch (Exception ex) { //MessageBox.Show("BatGetContact" + ex.Message); Tools.Tools.WriteLog(ex.ToString()); //写日志 } string url = string.Format(BaseUrl + Constant._getbatcontact_url, HttpService.GetTimeStamp(), entity.PassTicket); byte[] bytes = HttpService.SendPostRequest(url, json, Uin); string contact_str = Encoding.UTF8.GetString(bytes); return(JsonConvert.DeserializeObject(contact_str) as JObject); }
/// <summary> /// 微信同步检测 /// </summary> /// <returns></returns> public string WxSyncCheck() { string sync_key = ""; try { var _syncKey = LoginCore.GetSyncKey(Uin); foreach (KeyValuePair <string, string> p in _syncKey) { sync_key += p.Key + "_" + p.Value + "%7C"; } sync_key = sync_key.TrimEnd('%', '7', 'C'); var entity = LoginCore.GetPassTicket(Uin); if (Sid != null && Uin != null) { var _synccheck_url = string.Format(Constant._synccheck_url, Sid, Uin, sync_key, (long)(DateTime.Now.ToUniversalTime() - new System.DateTime(1970, 1, 1)).TotalMilliseconds, entity.SKey.Replace("@", "%40"), "e1615250492"); byte[] bytes = HttpService.SendGetRequest(_synccheck_url + "&_=" + DateTime.Now.Ticks, Uin); if (bytes != null) { return(Encoding.UTF8.GetString(bytes)); } else { return(null); } } else { return(null); } } catch (Exception) { return(""); } }
public void DoLogic() { sCB.IsEnabled = false; smCB.IsEnabled = false; overTimeTB.Text = "授权时间截止至 [ " + Core.Constant.overtime + " ]"; //dLV.IsEnabled = false; uin = Core.Constant.Uin; List <Object> _contact_all = new List <object>(); ((Action)(delegate() { LoginCore.InitCookie(uin); 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 }; JObject init_result = wxs.WxInit(); //初始化 var partUsers = new List <WXUser>(); if (init_result != null) { this.Dispatcher.BeginInvoke(((Action) delegate() //等待结束 { supLB.Content = "加载个人信息..."; })); var _me = new WXUser { uin = wxs.Uin, UserName = init_result["User"]["UserName"].ToString(), City = "", HeadImgUrl = init_result["User"]["HeadImgUrl"].ToString(), NickName = init_result["User"]["NickName"].ToString(), Province = "", PYQuanPin = init_result["User"]["PYQuanPin"].ToString(), RemarkName = init_result["User"]["RemarkName"].ToString(), RemarkPYQuanPin = init_result["User"]["RemarkPYQuanPin"].ToString(), Sex = init_result["User"]["Sex"].ToString(), Signature = init_result["User"]["Signature"].ToString(), }; forwardUser = _me.UserName; partUsers.Add(_me); this.Dispatcher.BeginInvoke((Action)(delegate() //等待结束 { //var aa = wxs.BaseUrl + _me.HeadImgUrl; //headImage.Source = new BitmapImage(new Uri(aa)); headImage.Source = BitmapFrame.Create(wxs.GetIcon(_me.UserName, uin), BitmapCreateOptions.None, BitmapCacheOption.Default); })); this.Dispatcher.BeginInvoke(((Action) delegate() //等待结束 { supLB.Content = "加载最近联系人..."; })); foreach (JObject contact in init_result["ContactList"]) //部分好友名单 { WXUser user = new WXUser(); user.uin = wxs.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 _syncKey = new Dictionary <string, string>(); foreach (JObject synckey in init_result["SyncKey"]["List"]) //同步键值 { _syncKey.Add(synckey["Key"].ToString(), synckey["Val"].ToString()); } //保存最新key LoginCore.SyncKey(uin, _syncKey); this.Dispatcher.BeginInvoke(((Action) delegate() //等待结束 { supLB.Content = "初始化联系人..."; })); WxContact _contact = new WxContact(uin); //记住此处不适合再开线程 _contact.InitContact(partUsers); //初始联系人 Dictionary <string, string> Groups = new Dictionary <string, string>(); foreach (var g in _contact.GetGroupUserNames()) { Groups.Add(g, _contact.GetGroupMemberNames(g).NickName); } this.Dispatcher.BeginInvoke((Action)(delegate() //等待结束 { sCB.ItemsSource = Groups; sCB.DisplayMemberPath = "Value"; sCB.SelectedValuePath = "Key"; smCB.DisplayMemberPath = "Value"; smCB.SelectedValuePath = "Key"; supLB.Content = "进入监听模式..."; sCB.IsEnabled = true; smCB.IsEnabled = true; //dLV.IsEnabled = true; })); string sync_flag = null; JObject sync_result; sync_flag = wxs.WxSyncCheck(); //同步检查 DateTime lastCheckTs = DateTime.Now; while (true) { if (sync_flag != null) { var retcode = sync_flag.ToString().Split(new string[] { "\"" }, StringSplitOptions.None)[1]; var selector = sync_flag.ToString().Split(new string[] { "\"" }, StringSplitOptions.None)[3]; //this.Dispatcher.BeginInvoke((Action)(delegate () //{ //supLB.Content = "{retcode:" + retcode + " selector:" + selector + "}"; //})); if (retcode == "1100") { this.Dispatcher.BeginInvoke((Action)(delegate() { headBorder.BorderBrush = Brushes.Red; })); MessageBox.Show("你在手机上登出了微信,债见"); break; } if (retcode == "1101") { this.Dispatcher.BeginInvoke((Action)(delegate() { headBorder.BorderBrush = Brushes.Red; })); MessageBox.Show("你在其他地方登录了 WEB 版微信,债见"); break; } else if (retcode == "0") { this.Dispatcher.BeginInvoke((Action)(delegate() { headBorder.BorderBrush = Brushes.GreenYellow; })); if (selector == "2") { sync_result = wxs.WxSync(); //进行同步 lastCheckTs = DateTime.Now; if (sync_result != null) { handleMsg(sync_result); } //this.Dispatcher.BeginInvoke((Action)(delegate () //{ //supLB.Content = ""; //})); } else if (selector == "0") { //this.Dispatcher.BeginInvoke((Action)(delegate () //{ //supLB.Content = ""; //})); Thread.Sleep(500); } else { sync_result = wxs.WxSync(); //进行同步 this.Dispatcher.BeginInvoke((Action)(delegate() { supLB.Content = "最后同步:{retcode:" + retcode + " selector:" + selector + "}"; })); //this.Dispatcher.BeginInvoke((Action)(delegate () //{ //chatText.AppendText("\n" + selector + "\n-------" + sync_result.ToString() + "-------\n"); //})); } } sync_flag = null; this.Dispatcher.BeginInvoke((Action)(delegate() { headBorder.BorderBrush = Brushes.Blue; })); } if ((DateTime.Now - lastCheckTs).Seconds < 23) { var sleep = (DateTime.Now - lastCheckTs).Seconds; Thread.Sleep(1000); sync_flag = wxs.WxSyncCheck(); //同步检查 } else { sync_flag = wxs.WxSyncCheck(); lastCheckTs = DateTime.Now; } this.Dispatcher.BeginInvoke((Action)(delegate() { sleepTB.Text = ((DateTime.Now - lastCheckTs).Seconds).ToString(); supLB.Content = "最后同步:" + DateTime.Now.ToLongTimeString().ToString(); })); } } })).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); }
/// <summary> /// /// </summary> private void DoMainLogic() { _lblWait.BringToFront(); ((Action)(delegate() { Dictionary <string, string> ss = new Dictionary <string, string>(); //先判断下键值是否存在要不卡死头像只能显示一个用户的 //if (!ss.ContainsKey("1")) //{ // ss.Add("1", "1"); //} string sid = LoginCore.GetPassTicket(Uin).WxSid; WXService wxs = new WXService(); wxs.Uin = Uin; wxs.Sid = sid; wxs.robotID = robotID; JObject init_result = wxs.WxInit(); //初始化 List <object> contact_all = new List <object>(); if (init_result != null) { _me = new WXUser(); _me.uin = wxs.Uin; _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.uin = wxs.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(); _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.uin = wxs.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(); contact_all.Add(user); //((Action)delegate() //{ // //写入所有好友信息 // var b = WxOperateLogDal.AddchartLog(wxs.Uin, contact["UserName"].ToString(), contact["City"].ToString(), contact["HeadImgUrl"].ToString(), contact["NickName"].ToString(), contact["Province"].ToString(), contact["PYQuanPin"].ToString(), contact["RemarkName"].ToString(), contact["RemarkPYQuanPin"].ToString(), contact["Sex"].ToString(), contact["Signature"].ToString()); //}).BeginInvoke(null, null); wChatList1.Invalidate(); } } 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 MsgId = m["MsgId"].ToString(); string type = m["MsgType"].ToString();//语音视频标识 WXMsg msg = new WXMsg(); msg.From = from; wxs.Uin = Uin; wxs.Sid = sid; msg.Sid = wxs.Sid; msg.Uin = wxs.Uin; msg.Msg = type == "1" ? content : "收到一个系统数据"; //只接受文本消息 if (msg.Type == 1) //屏蔽一些系统数据 { msg.Msg = content; } msg.Readed = false; msg.Time = DateTime.Now; msg.To = to; msg.Type = int.Parse(type); //if (msg.Type == 51) //屏蔽一些系统数据 //{ // msg.Msg = "收到一个系统数据"; //} if (msg.Type == 10000)//进群退群消息 { string s = sync_result.ToString(); } if (msg.Type == 3)//图片 { msg.Msg = content + "收到一个图片"; string sFilePath = Environment.CurrentDirectory + "\\IMG"; string sFileName = MsgId + ".jpg"; sFileName = sFilePath + "\\" + sFileName; //文件的绝对路径 HttpService.HttpDownloadFile(Constant._getmsgimg_url + MsgId, msg.Uin, sFileName); } if (msg.Type == 34)//语音 { msg.Msg = "收到语音点击查看"; //Button newButton = new Button();//创建一个名为newButton的新按钮 //newButton.Width = 150; //newButton.Text = "NewButton"; //newButton.BackColor = Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); //newButton.Click += new EventHandler(textBox1_Click); string sFilePath = Environment.CurrentDirectory + "\\MP3"; string sFileName = MsgId + ".wav"; sFileName = sFilePath + "\\" + sFileName; //文件的绝对路径 HttpService.HttpDownloadFile(Constant._getmsgmp3_url + MsgId, msg.Uin, sFileName); } if (msg.Type == 43)//小视频 { msg.Msg = "收到小视频" + "点击查看"; string sFilePath = Environment.CurrentDirectory + "\\MP4"; string sFileName = MsgId + ".MP4"; sFileName = sFilePath + "\\" + sFileName; HttpService.HttpDownloadFile(Constant._getmsgvideo_url + MsgId, msg.Uin, sFileName); } if (msg.Type == 62)//视频 { msg.Msg = content + "收到一个视频"; } if (msg.Type == 10002)//消息撤回 { msg.Msg = content + "对方撤回了消息"; } if (msg.Type == 42)//好友名片 { msg.Msg = content + "收到一个好友名片"; } if (msg.Type == 47)//动态表情 { msg.Msg = content + "收到一个动态表情"; } if (msg.Type == 48)//位置消息 { msg.Msg = content + "收到一个位置消息"; } if (msg.Type == 49)//分享链接 { msg.Msg = content + "收到一个分享链接"; } 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; } } } Wx_AlertForm.ShowWay showWay = Wx_AlertForm.ShowWay.UpDown; string aftitle = _me.NickName + "收到来自" + _me.ShowName + "一条消息"; string afContent = msg.Msg; int afShowInTime, afShowTime, afShowOutTime; int afWidth, afHeigth; int.TryParse("100", out afShowInTime); int.TryParse("8000", out afShowTime); int.TryParse("800", out afShowOutTime); int.TryParse("250", out afWidth); int.TryParse("120", out afHeigth); af = new Wx_AlertForm(); af.Show(afContent, aftitle, showWay, afWidth, afHeigth, afShowInTime, afShowTime, afShowOutTime); }); } } } } //System.Threading.Thread.Sleep(800); //#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 } })).BeginInvoke(null, null); }
public string UploadMedia(string url, string picpath, string mediaName, string sid, string DeviceID, string fromUser, string toUser) { string result = string.Empty; var entity = LoginCore.GetPassTicket(Uin); var webwx_data_ticket = ""; var lastModified = new FileInfo(picpath).LastWriteTime; var dt = lastModified.ToString("r").Replace(",", "") + lastModified.ToString("zzz").Replace(":", ""); var lastModifiedDate = dt.Split(' ')[0].ToString() + " " + dt.Split(' ')[2].ToString() + " " + dt.Split(' ')[1].ToString() + " " + dt.Split(' ')[3].ToString() + " " + dt.Split(' ')[4].ToString() + " " + dt.Split(' ')[5].ToString() + " (中国标准时间)"; var fileSize = Tools.Tools.FileSize(picpath); var chunkSize = 512 * 1024; var chunks = Math.Ceiling((double)fileSize / (double)chunkSize); var clientMediaID = DateTime.Now.Millisecond; var fileMd5 = HttpService.GetMD5(picpath); var fs = new FileStream(picpath, FileMode.Open, FileAccess.Read); var length = fs.Length; var current = 0; var bReader = new BinaryReader(fs); byte[] data; var byteCount = 512 * 1024; int i = 0; for (; current <= length; current = current + byteCount) //for (int i = 0; i < chunks; i++) { CookieContainer _cookiesContainer = HttpService.CookiesContainerDic[Uin]; var request = (HttpWebRequest)WebRequest.Create(url); request.Accept = "*/*"; request.Headers.Add("Accept-Encoding", "gzip, deflate, br"); request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundarya4gGLw" + i + "MjIJx7nyC"; request.KeepAlive = true; //request.ProtocolVersion = HttpVersion.Version11; request.Timeout = 25000; request.AllowAutoRedirect = true; request.Host = "file." + LoginCore.GetPassTicket(Uin).WxHost; request.Headers.Add("Origin", "https://" + LoginCore.GetPassTicket(Uin).WxHost); request.Referer = "https://" + LoginCore.GetPassTicket(Uin).WxHost + "/?&lang=zh_CN"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36"; request.Method = "POST"; //ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); if (!string.IsNullOrEmpty(Uin)) { request.CookieContainer = _cookiesContainer; //启用cookie foreach (var c in HttpService.GetAllCookies(_cookiesContainer)) { Tools.Tools.WriteLog(c.ToString()); if (c.ToString().Contains("webwx_data_ticket")) { webwx_data_ticket = c.ToString().Split(new string[] { "=" }, StringSplitOptions.None)[1]; } } } //ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate; using (var ms = new MemoryStream()) { StringBuilder sb = new StringBuilder(); string uploadmediarequest = "{\"UploadType\":2," + "\"BaseRequest\":{" + "\"Uin\":" + Uin + "," + "\"Sid\":\"" + sid + "\"," + "\"Skey\":\"" + entity.SKey + "\"," + "\"DeviceID\":\"" + DeviceID + "\"}," + "\"ClientMediaId\":" + clientMediaID + "," + "\"TotalLen\":" + length + "," + "\"StartPos\":0," + "\"DataLen\":" + length + "," + "\"FileMd5\":\"" + fileMd5 + "\"," + "\"FromUserName\":\"" + fromUser + "\"," + "\"ToUserName\":\"" + toUser + "\"," + "\"MediaType\":4}"; var boundary = "------WebKitFormBoundarya4gGLw" + i + "MjIJx7nyC\r\n"; var lastBoundary = "------WebKitFormBoundarya4gGLw" + i + "MjIJx7nyC--\r\n"; var enterStr = "\r\n"; sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"id\"\r\n\r\n"); sb.Append("WU_FILE_" + Core.Constant.WU_FILE_N + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"name\"" + enterStr + enterStr); sb.Append(mediaName.Substring(mediaName.LastIndexOf("\\") + 1) + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"type\"" + enterStr + enterStr); sb.Append("image/jpeg\r\n"); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"lastModifiedDate\"" + enterStr + enterStr); //sb.Append("Wed Dec 30 2015 15:24:14 GMT+0800 (中国标准时间)" + enterStr); sb.Append(lastModifiedDate + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"mediatype\"" + enterStr + enterStr); sb.Append("pic" + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"size\"\r\n\r\n"); sb.Append(fileSize + enterStr); if (chunks > 1) { sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"chunks\"\r\n\r\n"); sb.Append(chunks + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"chunk\"\r\n\r\n"); sb.Append(i + enterStr); } sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"uploadmediarequest\"\r\n\r\n"); sb.Append(uploadmediarequest + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"webwx_data_ticket\"\r\n\r\n"); sb.Append(webwx_data_ticket + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"pass_ticket\"\r\n\r\n"); sb.Append(entity.PassTicket + enterStr); sb.Append(boundary); sb.Append("Content-Disposition: form-data; name=\"filename\"; filename=\"" + picpath.Substring(picpath.LastIndexOf("\\") + 1) + "\"\r\n"); sb.Append("Content-Type: application/octet-stream\r\n\r\n"); var bytes1 = Encoding.UTF8.GetBytes(sb.ToString()); ms.Write(bytes1, 0, bytes1.Length); sb.Clear(); sb = null; fs.Seek(current, SeekOrigin.Current); if (current + byteCount > length) { data = new byte[Convert.ToInt64((length - current))]; bReader.Read(data, 0, Convert.ToInt32((length - current))); } else { data = new byte[byteCount]; bReader.Read(data, 0, byteCount); } ms.Write(data, 0, data.Length); var bytes2 = Encoding.UTF8.GetBytes(lastBoundary); ms.Write(bytes2, 0, bytes2.Length); using (var dataStream = request.GetRequestStream()) { var bytes3 = ms.ToArray(); dataStream.Write(bytes3, 0, bytes3.Length); } using (var response = (HttpWebResponse)request.GetResponse()) { using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { result = reader.ReadToEnd(); } } } i++; } fs.Close(); JObject _resul = JsonConvert.DeserializeObject(result) as JObject; var result1 = _resul["MediaId"].ToString(); return(result1); }