Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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");
            }
        }