/// <summary> /// 第五步:微信初始化 /// </summary> /// <param name="cookie"></param> /// <returns></returns> public InitSyncResult Init(WechatCookie wechatCookie, string cookieStr) { if (wechatCookie == null) { throw new Exception("cookie值为空"); } string url = string.Format(WechatUrl.InitUrl, wechatCookie.Pass_Ticket, wechatCookie.Skey, WechatCommon.GetTicks()); BaseRequest baseRequest = new BaseRequest(); baseRequest.DeviceID = DeviceID; baseRequest.Sid = wechatCookie.Wxsid; baseRequest.Uin = wechatCookie.Wxuin; baseRequest.Skey = wechatCookie.Skey; InitParamter init = new InitParamter(); init.BaseRequest = baseRequest; string postData = JsonConvert.SerializeObject(init); // string html =await HttpCommon.instance.PostHttp(url, postData, ContentType.json, cookieStr); HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = url, //URL 必需项 Method = "POST", //URL 可选项 默认为Get Encoding = Encoding.UTF8, UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", //用户的浏览器类型,版本,操作系统 可选项有默认值 Accept = "text/html, application/xhtml+xml, */*", // 可选项有默认值 ContentType = "application/json; charset=UTF-8", //返回类型 可选项有默认值 Cookie = cookieStr, //字符串Cookie 可选项 Postdata = postData, //Post数据 可选项GET时不需要写 }; HttpResult result = http.GetHtml(item); string html = result.Html; AppLog.WriteInfo(string.Format("协议:{0},结果:{1}", "Init", html)); InitSyncResult syncKey = new InitSyncResult(); try { if (!string.IsNullOrEmpty(html) && html != "操作超时") { InitResult obj = JsonConvert.DeserializeObject <InitResult>(html); syncKey.SynckeyStr = WechatCommon.SyncKeyFormat(obj.SyncKey); syncKey.SyncKey = obj.SyncKey; syncKey.UserName = obj.User.UserName; syncKey.Uin = obj.User.Uin; syncKey.Nickname = obj.User.NickName; } } catch (Exception ex) { AppLog.WriteError(ex.Message); } return(syncKey); }
public void Sync(BackgroundWorker work, string host) { if (work.CancellationPending) { return; } var robot = Global.robot; if (robot.State == 1) { var result = protocol.SyncCheck(host, robot.Cookie, robot.CookieStr, robot.SynckeyStr); /* * retcode: * 0 正常 * 1100 失败/登出微信 * selector: * 0 正常 * 2 新的消息 * 7 进入/离开聊天界面 */ if (result.retcode == "0") { //switch (result.selector) //{ // case "0": // work.ReportProgress(1, "正常"); // break; // default: SyncResult syncResult = protocol.Sync(robot.Cookie, robot.CookieStr, robot.SyncKey); robot.SyncKey = syncResult.SyncKey; robot.SynckeyStr = WechatCommon.SyncKeyFormat(syncResult.SyncKey); List <AddMsgList> msgList = syncResult.AddMsgList; if (syncResult.ModContactCount > 0) { //群人员变化了 //判断是否已经存在的群,不存在的重新初始化 bool change = false; foreach (var contact in syncResult.ModContactList) { if (contact.UserName.StartsWith("@@")) { WxUser user = Global.robot.WxUserList.Where(n => n.UserName == contact.UserName).FirstOrDefault(); if (user == null) { change = true; break; } } } if (change) { protocol.StatusNotify(Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } //欢迎通知逻辑;对比两个群人员列表 foreach (var contact in syncResult.ModContactList) { string fromAlias = WechatCommon.GetTrueId(contact.UserName); bool isBind = buyService.IsBind(fromAlias); if (isBind) { var newMember = contact.MemberList; var haveMember = Global.robot.GroupInfo.Where(n => n.UserName == contact.UserName).FirstOrDefault(); if (haveMember != null) { MemberListComparer compar = new MemberListComparer(); var welcomeUser = newMember.Except(haveMember.MemberList, compar); //差集新增 Task.Run(() => { foreach (var u in welcomeUser) { protocol.SendMsg("欢迎" + u.NickName + "加入群!", contact.UserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); Thread.Sleep(2000); } }); haveMember.MemberList = newMember; haveMember.MemberCount = newMember.Count; } } } } foreach (var msg in msgList) { work.ReportProgress(1, msg); } // break; // } } else { work.ReportProgress(1, result.retcode); } } else { //还未登录 work.ReportProgress(1, "0"); } }