Пример #1
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            /*
             *  {
             *      "result": [
             *          {
             *              "client_type": 1,
             *              "status": "online",
             *              "uin": 3017767504
             *          }
             *      ],
             *      "retcode": 0
             *  }
             */
            var json = response.ResponseString.ToJToken();

            if (json["retcode"].ToString() == "0")
            {
                var result = json["result"].ToObject <FriendOnlineInfo[]>();
                foreach (var info in result)
                {
                    Store.FriendDic.GetAndDo(info.Uin, friend => Mapper.Map(info, friend));
                }
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #2
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            /*
             *  {
             *      "BaseResponse": {
             *          "Ret": 0,
             *          "ErrMsg": ""
             *      },
             *      "MsgID": "5895072760632094896"
             *  }
             */
            var str = responseItem.ResponseString;

            if (!str.IsNullOrEmpty())
            {
                var json = JObject.Parse(str);
                if (json["BaseResponse"]["Ret"].ToString() == "0")
                {
                    return(NotifyActionEventAsync(ActionEventType.EvtOK));
                }
                else
                {
                    throw new WeChatException(WeChatErrorCode.ResponseError, json["BaseResponse"]["ErrMsg"].ToString());
                }
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #3
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            var str   = responseItem.ResponseString;
            var match = _regCode.Match(str);

            if (match.Success)
            {
                var code   = match.Groups[1].Value;
                var result = EnumHelper.ParseFromStrNum <WatiForLoginResult>(code);
                switch (result)
                {
                case WatiForLoginResult.Success:
                {
                    var m = _regUrl.Match(str);
                    if (m.Success)
                    {
                        Session.LoginUrl = $"{m.Groups[1].Value}&fun=new&version=v2";
                        Session.BaseUrl  = Session.LoginUrl.Substring(0, Session.LoginUrl.LastIndexOf("/", StringComparison.OrdinalIgnoreCase));
                    }
                    break;
                }

                case WatiForLoginResult.ScanCode:
                    _tip = 0;
                    break;

                case WatiForLoginResult.QRCodeInvalid:
                    break;
                }
                return(NotifyActionEventAsync(ActionEventType.EvtOK, result));
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #4
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            /*
             *  {
             *      "retcode": 0,
             *      "result": {
             *          "dnamelist": [
             *              {
             *                  "name": "月光双刀、Test、月光借口、月光双",
             *                  "did": 522140442
             *              }
             *          ]
             *      }
             *  }
             */
            var json = response.ResponseString.ToJToken();

            if (json["retcode"].ToString() == "0")
            {
                var result = json["result"];
                var list   = result["dnamelist"].ToObject <List <QQDiscussion> >();
                list.ForEach(Store.AddDiscussion);
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #5
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            /*
             *  <error>
             *    <ret>0</ret>
             *    <message/>
             *    <skey>@crypt_c498484a_beffad67aa727e24f7c669c51d5c895f</skey>
             *    <wxsid>Lr2AUrW1+FSCmtHZ</wxsid>
             *    <wxuin>463678295</wxuin>
             *    <pass_ticket>SSR%2BWEx6yJf8MTN2G2XjsWtRpXWQ0J6wBHc5BeHGL3gATmsW%2FMiFX0GBqWrmm7dN</pass_ticket>
             *    <isgrayscale>1</isgrayscale>
             *  </error>
             */
            var str  = responseItem.ResponseString;
            var root = XDocument.Parse(str).Root;

            Session.Skey       = root.Element("skey").Value;
            Session.Sid        = root.Element("wxsid").Value;
            Session.Uin        = root.Element("wxuin").Value;
            Session.PassTicket = root.Element("pass_ticket").Value;

            Session.State = SessionState.Online;

            return(NotifyActionEventAsync(ActionEventType.EvtOK));
        }
Пример #6
0
 private static void ReadHeader(HttpResponseMessage response, HttpResponseItem responseItem)
 {
     foreach (var header in response.Headers)
     {
         responseItem.Headers[header.Key] = header.Value.ToList();
     }
 }
Пример #7
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var ptwebqq = HttpService.GetCookie("ptwebqq", Session.CheckSigUrl).Value;

            Session.Ptwebqq = ptwebqq;
            return(NotifyActionEventAsync(ActionEventType.EvtOK));
        }
Пример #8
0
        public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request)
        {
            bool   flag  = false;
            string uid   = request.QueryString.Get("uid");
            string token = request.QueryString.Get("token");

            if (string.IsNullOrWhiteSpace(uid))
            {
                return(flag);
            }
            //token 验证
            if (!string.IsNullOrWhiteSpace(token) && Tool.MD5Check(uid, token))
            {
                flag = true;
            }
            else
            {
                //接口验证
                HttpRequestItem req = new HttpRequestItem()
                {
                    URL      = Constant.AuthenUrl,
                    Postdata = string.Format("uid={0}", uid)
                };
                string resData = HttpHelp.SendHttpRequest(req);
                if (!string.IsNullOrWhiteSpace(resData))
                {
                    HttpResponseItem res = JsonUtil <HttpResponseItem> .Deserialize(resData);

                    flag = res.AckCode == ResultAckCodeEnum.Success && res.ResultCode == 1;
                }
            }

            return(flag ? base.AuthorizeHubConnection(hubDescriptor, request) : false);
        }
Пример #9
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var rex = new Regex(QQConstants.REGXP_LOGIN);
            var str = response.ResponseString;
            var m   = rex.Match(str);

            if (m.Success)
            {
                var ret = m.Groups[1].Value;
                switch (ret)
                {
                //case "0": NotifyActionEvent(QQActionEventType.EVT_OK, m.Groups[3].Value); break;
                //case "66": throw new QQException(QQErrorCode.QRCODE_OK, m.Groups[5].Value);
                //case "67": throw new QQException(QQErrorCode.QRCODE_AUTH, m.Groups[5].Value);
                case "0": return(NotifyActionEventAsync(ActionEventType.EvtOK, new CheckQRCodeArgs(QRCodeStatus.OK, m.Groups[3].Value)));

                case "66": return(NotifyActionEventAsync(ActionEventType.EvtOK, new CheckQRCodeArgs(QRCodeStatus.Valid, m.Groups[5].Value)));

                case "67": return(NotifyActionEventAsync(ActionEventType.EvtOK, new CheckQRCodeArgs(QRCodeStatus.Auth, m.Groups[5].Value)));

                case "65": return(NotifyActionEventAsync(ActionEventType.EvtOK, new CheckQRCodeArgs(QRCodeStatus.Invalid, m.Groups[5].Value)));
                }
            }
            return(NotifyErrorEventAsync(QQErrorCode.ResponseError));
        }
Пример #10
0
        public virtual async Task <HttpResponseItem> ExecuteHttpRequestAsync(HttpRequestItem requestItem, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var responseItem = new HttpResponseItem {
                RequestItem = requestItem
            };
            var httpRequest = GetHttpRequest(requestItem);
            HttpResponseMessage response = null;

            try
            {
                response = await _httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, token).ConfigureAwait(false);

                while (response.StatusCode == HttpStatusCode.Redirect && response.Headers.Location != null)
                {
                    response = await _httpClient.GetAsync(response.Headers.Location, token).ConfigureAwait(false);
                }
                response.EnsureSuccessStatusCode();
                ReadHeader(response, responseItem);
                await ReadContentAsync(response, responseItem).ConfigureAwait(false);

                return(responseItem);
            }
            finally
            {
                response?.Dispose();
            }
        }
Пример #11
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var ptwebqq = HttpService.GetCookie("ptwebqq", Session.CheckSigUrl);

            ptwebqq.Expired = true;
            //Session.Ptwebqq = ptwebqq;
            return(NotifyOkEventAsync());
        }
Пример #12
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json    = response.ResponseString.ToJToken();
            var retcode = json["retcode"]?.ToString();

            return(retcode.IsNull() ?
                   NotifyOkEventAsync() :
                   NotifyErrorAsync(response.ResponseString));
        }
Пример #13
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json    = response.ResponseString.ToJToken();
            var retcode = json["retcode"].ToInt();

            switch (retcode)
            {
            case 0: return(HandlePollMsg(json["result"]));
            }
            throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
        }
Пример #14
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            var str   = responseItem.ResponseString;
            var match = _reg.Match(str);

            if (match.Success && match.Groups.Count > 2 && match.Groups[1].Value == "200")
            {
                Session.Uuid = match.Groups[2].Value;
                return(NotifyOkEventAsync());
            }
            return(NotifyErrorEventAsync(WeChatErrorCode.ResponseError));
        }
Пример #15
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json = response.ResponseString.ToJsonObj();

            if (json["retcode"].ToString() == "0")
            {
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #16
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json = response.ResponseString.ToJToken();

            if (json["BaseResponse"]["Ret"].ToString() == "0")
            {
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new WeChatException(WeChatErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #17
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json = response.ResponseString.ToJToken();

            if (json["retcode"].ToString() == "0")
            {
                HandleResult(json);
                return(NotifyOkEventAsync());
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #18
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            /*
             *  {
             *      retcode: 0,
             *      result: {
             *          birthday: {
             *              month: 11,
             *              year: 1990,
             *              day: 14
             *          },
             *          face: 252,
             *          phone: "83544376",
             *          occupation: "计算机/互联网/IT",
             *          allow: 1,
             *          college: "北京师大附中",
             *          uin: 89009143,
             *          blood: 2,
             *          constel: 12,
             *          lnick: "努力去香港",
             *          vfwebqq: "7454728c49b49db8eba34dad1df1704bffab25ce52f037516fed029e05a681473d01af3d85172a96",
             *          homepage: "http://tieba.baidu.com/f?kw=%C0%EE%BE%AD",
             *          vip_info: 7,
             *          city: "西城",
             *          country: "中国",
             *          personal: "",
             *          shengxiao: 7,
             *          nick: "月光双刀",
             *          email: "*****@*****.**",
             *          province: "北京",
             *          account: 89009143,
             *          gender: "male",
             *          mobile: "152********"
             *      }
             *  }
             */
            var json = response.ResponseString.ToJToken();

            if (json["retcode"].ToString() == "0")
            {
                var info = json["result"].ToObject <SelfInfo>();
                info.MapTo(Session.User);
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #19
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json = response.ResponseString.ToJToken();

            if (json["retcode"].ToString() == "0")
            {
                var ret = json["result"];
                Session.Vfwebqq = ret["vfwebqq"].ToString();
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #20
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json    = response.ResponseString.ToJToken();
            var retcode = json["retcode"].ToInt();

            switch (retcode)
            {
            case 0: return(HandlePollMsg(json["result"]));

            case 102:
                // 接连正常,没有消息到达 {"retcode":102,"errmsg":""}
                // 继续进行下一个消息请求
                return(NotifyOkEventAsync());

            case 110:
            case 109:
            {
                // 客户端主动退出
                var msg = $"**** 客户端主动退出 retcode: {retcode} ****";
                Logger.LogWarning(msg);
                Session.State = SessionState.Offline;
                return(NotifyOkEventAsync(QQNotifyEvent.CreateEvent(QQNotifyEventType.NetError, msg)));
            }


            case 121:
            case 120:
            case 100:
            {
                // 客户端主动退出
                var msg = $"**** 服务器需求重新认证 retcode: {retcode} ****";
                Logger.LogWarning(msg);
                Session.State = SessionState.Offline;
                return(NotifyOkEventAsync(QQNotifyEvent.CreateEvent(QQNotifyEventType.NetError, msg)));
            }

            case 103:     // 此时需要登录Smart QQ,确认能收到消息后点击设置-退出登录,就会恢复正常了
            {
                // 客户端主动退出
                var msg = $"**** 需要登录Smart QQ retcode: {retcode} ****";
                Logger.LogWarning(msg);
                // Session.State = SessionState.Offline;
                // return NotifyOkEventAsync(QQNotifyEvent.CreateEvent(QQNotifyEventType.NetError, msg));
                return(NotifyOkEventAsync());
            }
            }
            throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
        }
Пример #21
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            var str   = responseItem.ResponseString;
            var match = _reg.Match(str);

            if (match.Success)
            {
                var retcode = match.Groups[1].Value;

                if (Session.SyncUrl == null)
                {
                    // retcode
                    // 1100-
                    // 1101-参数错误
                    // 1102-cookie错误
                    if (retcode != "0")
                    {
                        return(TestNextHost());
                    }
                    else
                    {
                        Session.SyncUrl = responseItem.RequestItem.RawUrl;
                        return(this.ExecuteAsync());
                    }
                }

                switch (retcode)
                {
                case "1100":
                case "1101":     // 在手机上登出了微信
                    Session.State = SessionState.Offline;
                    return(NotifyOkEventAsync(EnumHelper.ParseFromStrNum <SyncCheckResult>(retcode)));

                case "0":
                    var selector = match.Groups[2].Value;
                    return(NotifyOkEventAsync(EnumHelper.ParseFromStrNum <SyncCheckResult>(selector,
                                                                                           s =>
                    {
                        Logger.LogWarning($"cannot convert {s} to enum type : {nameof(SyncCheckResult)}");
                        return SyncCheckResult.Nothing;
                    })));
                }
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #22
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var str  = response.ResponseString;
            var json = JObject.Parse(str);

            if (json["BaseResponse"]["Ret"].ToString() == "0")
            {
                Session.SyncKey = json["SyncCheckKey"];
                var list    = json["AddMsgList"].ToObject <List <Message> >();
                var newMsgs = list.Where(m => m.MsgType != MessageType.GetContact).ToList();
                newMsgs.ForEach(m =>
                {
                    m.FromUser = Store.ContactMemberDic.GetOrDefault(m.FromUserName);
                });
                return(NotifyActionEventAsync(ActionEventType.EvtOK, newMsgs));
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #23
0
        public virtual async Task <HttpResponseItem> ExecuteHttpRequestAsync(HttpRequestItem requestItem, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var responseItem = new HttpResponseItem {
                RequestItem = requestItem
            };
            var httpRequest = GetHttpRequest(requestItem);

            using (var response = await _httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, token).ConfigureAwait(false))
            {
                response.EnsureSuccessStatusCode();
                responseItem.StatusCode = response.StatusCode;
                ReadHeader(response, responseItem);
                await ReadContentAsync(response, responseItem).ConfigureAwait(false);

                return(responseItem);
            }
        }
Пример #24
0
        public HttpResponseItem AuthenUser()
        {
            string           uid = HttpContext.Current.Request["uid"];
            HttpResponseItem ret = new HttpResponseItem()
            {
                AckCode = ResultAckCodeEnum.Success
            };

            if (ConvertUtil.ConvertStringToInt32(uid, 0) % 2 == 0)
            {
                ret.ResultCode = 1;
            }
            else
            {
                ret.ResultCode = 0;
                ret.ResultMsg  = "user offline-status";
            }

            return(ret);
        }
Пример #25
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var json = response.ResponseString.ToJsonObj();

            if (json["retcode"].ToString() == "0")
            {
                var ret = json["result"].ToJsonObj();
                Account.User.Uin    = ret["uin"].ToObject <long>();
                Account.User.QQ     = ret["uin"].ToObject <long>();
                Session.SessionId   = ret["psessionid"].ToString();
                Account.User.Status = ret["status"].ToString().ToEnum(QQStatusType.Online);
                Session.State       = SessionState.Online;
                Session.Index       = ret["index"].ToInt();
                Session.Port        = ret["port"].ToInt();
                return(NotifyActionEventAsync(ActionEventType.EvtOK));
            }
            else
            {
                throw new QQException(QQErrorCode.ResponseError, response.ResponseString);
            }
        }
Пример #26
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem response)
        {
            var str = response.ResponseString;
            var m   = _reg.Match(str);

            if (m.Success)
            {
                var ret = m.Groups[1].Value;
                switch (ret)
                {
                case "0": return(NotifyOkEventAsync(new CheckQRCodeArgs(QRCodeStatus.Ok, m.Groups[3].Value)));

                case "66": return(NotifyOkEventAsync(new CheckQRCodeArgs(QRCodeStatus.Valid, m.Groups[5].Value)));

                case "67": return(NotifyOkEventAsync(new CheckQRCodeArgs(QRCodeStatus.Auth, m.Groups[5].Value)));

                case "65": return(NotifyOkEventAsync(new CheckQRCodeArgs(QRCodeStatus.Invalid, m.Groups[5].Value)));
                }
            }
            return(NotifyErrorEventAsync(QQErrorCode.ResponseError));
        }
Пример #27
0
        public override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            var str   = responseItem.ResponseString;
            var match = _reg.Match(str);

            if (match.Success)
            {
                var retcode = match.Groups[1].Value;

                if (Session.SyncUrl == null)
                {
                    // retcode
                    // 1100-
                    // 1101-参数错误
                    // 1102-cookie错误
                    if (retcode != "0")
                    {
                        return(TestNextHost());
                    }
                    else
                    {
                        Session.SyncUrl = responseItem.RequestItem.RawUrl;
                        return(this.ExecuteAsync());
                    }
                }

                switch (retcode)
                {
                case "1100":
                case "1101":     // 在手机上登出了微信
                    Session.State = SessionState.Offline;
                    return(NotifyActionEventAsync(ActionEventType.EvtOK, EnumHelper.ParseFromStrNum <SyncCheckResult>(retcode)));

                case "0":
                    var selector = match.Groups[2].Value;
                    return(NotifyActionEventAsync(ActionEventType.EvtOK, EnumHelper.ParseFromStrNum <SyncCheckResult>(selector)));
                }
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #28
0
        private static async Task ReadContentAsync(HttpResponseMessage response, HttpResponseItem responseItem)
        {
            switch (responseItem.RequestItem.ResultType)
            {
            case HttpResultType.String:
                responseItem.ResponseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                break;

            case HttpResultType.Byte:
                responseItem.ResponseBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

                break;

            case HttpResultType.Stream:
                responseItem.ResponseStream = new MemoryStream(await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false));
                break;
            }
            foreach (var header in response.Content.Headers)
            {
                responseItem.Headers[header.Key] = header.Value.ToList();
            }
        }
Пример #29
0
        protected override Task <ActionEvent> HandleResponse(HttpResponseItem responseItem)
        {
            var str = responseItem.ResponseString;

            if (!str.IsNullOrEmpty())
            {
                var json = JObject.Parse(str);
                if (json["BaseResponse"]["Ret"].ToString() == "0")
                {
                    var list = json["ContactList"].ToObject <List <ContactMember> >();
                    foreach (var item in list)
                    {
                        Store.ContactMemberDic[item.UserName] = item;
                    }
                    return(NotifyOkEventAsync());
                }
                else
                {
                    throw new WeChatException(WeChatErrorCode.ResponseError, json["BaseResponse"]["ErrMsg"].ToString());
                }
            }
            throw WeChatException.CreateException(WeChatErrorCode.ResponseError);
        }
Пример #30
0
        private void ResponseProcess(string result)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(result))
                {
                    HttpResponseItem response = Newtonsoft.Json.JsonConvert.DeserializeObject <HttpResponseItem>(result);
                    if (response != null)
                    {
                        switch (response.AckCode)
                        {
                        case ResultAckCodeEnum.Success:
                            LogUtility.Info("job执行结果: 成功");
                            break;

                        case ResultAckCodeEnum.Waring:
                            LogUtility.Warn("job执行结果: 警告; 警告信息:" + response.ResultMsg);
                            break;

                        case ResultAckCodeEnum.Exception:
                        case ResultAckCodeEnum.Error:
                            LogUtility.Error("job执行结果: 失败; 失败信息:" + response.ResultMsg);
                            break;
                        }
                    }
                }
                else
                {
                    LogUtility.Warn("返回结果为空");
                }
            }
            catch (System.Exception ex)
            {
                LogUtility.Error(string.Format("job执行异常, 异常信息: {0}", ex.Message));
            }
        }