示例#1
0
        /// <summary>
        /// 微信初始化
        /// </summary>
        /// <returns></returns>
        public JObject WeChatInit()
        {
            string init_json = "{{\"BaseRequest\":{{\"Uin\":\"{0}\",\"Sid\":\"{1}\",\"Skey\":\"\",\"DeviceID\":\"e" + RandomHelper.RandomNum(15) + "\"}}}}";
            Cookie sid       = BaseService.GetCookie("wxsid");
            Cookie uin       = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                init_json = string.Format(init_json, uin.Value, sid.Value);
                byte[] bytes    = BaseService.Request(StaticUrl.stringWx + StaticUrl.Url_Init + DateTime.Now.ToTimeStamp() + "&pass_ticket=" + LoginService.Pass_Ticket, MethodEnum.POST, init_json);
                string init_str = Encoding.UTF8.GetString(bytes);

                JObject init_result = JsonConvert.DeserializeObject(init_str) as JObject;

                foreach (JObject synckey in init_result["SyncKey"]["List"])//同步键值
                {
                    _syncKey.Add(synckey["Key"].ToString(), synckey["Val"].ToString());
                }
                return(init_result);
            }
            else
            {
                throw new Exception("sid或uin为null");
            }
        }
示例#2
0
        /// <summary>
        /// 开启微信状态通知
        /// </summary>
        /// <param name="meUserName"></param>
        /// <returns></returns>
        public JObject WxStatusNotify(string meUserName)
        {
            Cookie sid = BaseService.GetCookie("wxsid");
            Cookie uin = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                var body = new
                {
                    BaseRequest = new BaseRequest
                    {
                        DeviceID = "e" + RandomHelper.RandomNum(15),
                        Sid      = sid.Value,
                        Uin      = int.Parse(uin.Value),
                        Skey     = LoginService.SKey
                    },
                    ClientMsgId  = DateTime.Now.ToTimeStamp(),
                    FromUserName = meUserName,
                    ToUserName   = meUserName,
                    Code         = 3
                };
                string json    = JsonConvert.SerializeObject(body);
                byte[] bytes   = BaseService.Request(StaticUrl.Url_StatusNotify + LoginService.Pass_Ticket, MethodEnum.POST, json);
                string res_str = Encoding.UTF8.GetString(bytes);

                return(JsonConvert.DeserializeObject(res_str) as JObject);
            }
            else
            {
                throw new Exception("sid或uin为null");
            }
        }
示例#3
0
        /// <summary>
        /// 微信同步检测
        /// </summary>
        /// <returns></returns>
        public string WeChatSyncCheck()
        {
            string sync_key = "";

            foreach (KeyValuePair <string, string> p in _syncKey)
            {
                sync_key += p.Key + "_" + p.Value + "%7C";
            }
            sync_key = sync_key.TrimEnd('%', '7', 'C');

            Cookie sid = BaseService.GetCookie("wxsid");
            Cookie uin = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                StaticUrl.Url_SyncCheck_ext = string.Format(StaticUrl.Url_SyncCheck_ext, sid.Value, uin.Value, sync_key, DateTime.Now.ToTimeStamp(), LoginService.SKey.Replace("@", "%40"), "e" + RandomHelper.RandomNum(15));
                byte[] bytes = BaseService.Request(StaticUrl.stringWebPush + StaticUrl.Url_SyncCheck + StaticUrl.Url_SyncCheck_ext + DateTime.Now.Ticks, MethodEnum.GET);
                if (bytes != null)
                {
                    return(Encoding.UTF8.GetString(bytes));
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                throw new Exception("sid或uin为null");
            }
        }
示例#4
0
        /// <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 msg_json = "{{" +
                              "\"BaseRequest\":{{" +
                              "\"DeviceID\" : \"e" + RandomHelper.RandomNum(15) + "\"," +
                              "\"Sid\" : \"{0}\"," +
                              "\"Skey\" : \"{6}\"," +
                              "\"Uin\" : \"{1}\"" +
                              "}}," +
                              "\"Msg\" : {{" +
                              "\"ClientMsgId\" : {8}," +
                              "\"Content\" : \"{2}\"," +
                              "\"FromUserName\" : \"{3}\"," +
                              "\"LocalID\" : {9}," +
                              "\"ToUserName\" : \"{4}\"," +
                              "\"Type\" : {5}" +
                              "}}," +
                              "\"rr\" : {7}" +
                              "}}";

            Cookie sid = BaseService.GetCookie("wxsid");
            Cookie uin = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                msg_json = string.Format(msg_json, sid.Value, uin.Value, msg, from, to, type, LoginService.SKey, DateTime.Now.Millisecond, DateTime.Now.Millisecond, DateTime.Now.Millisecond);
                byte[] bytes       = BaseService.Request(StaticUrl.stringWx + StaticUrl.Url_SendMsg + sid.Value + "&pass_ticket=" + LoginService.Pass_Ticket, MethodEnum.POST, msg_json);
                string send_result = Encoding.UTF8.GetString(bytes);
            }
        }
示例#5
0
        /// <summary>
        /// 获取好友列表
        /// </summary>
        /// <returns></returns>
        public JObject GetContact()
        {
            byte[] bytes       = BaseService.Request(StaticUrl.stringWx + StaticUrl.Url_GetContact, MethodEnum.GET);
            string contact_str = Encoding.UTF8.GetString(bytes);

            return(JsonConvert.DeserializeObject(contact_str) as JObject);
        }
示例#6
0
        /// <summary>
        /// 获取sid uid 结果放在cookie中
        /// </summary>
        /// <param name="login_redirect"></param>
        public void GetSidUid(string login_redirect)
        {
            byte[] bytes       = BaseService.Request(login_redirect + StaticUrl.Url_redirect_ext, MethodEnum.GET);
            string pass_ticket = Encoding.UTF8.GetString(bytes);

            Pass_Ticket = pass_ticket.Split(new string[] { "pass_ticket" }, StringSplitOptions.None)[1].TrimStart('>').TrimEnd('<', '/');
            SKey        = pass_ticket.Split(new string[] { "skey" }, StringSplitOptions.None)[1].TrimStart('>').TrimEnd('<', '/');
        }
示例#7
0
 /// <summary>
 /// 获取登录的二维码
 /// </summary>
 /// <returns></returns>
 public ImageSource GetQRCode()
 {
     //请求UUID
     byte[] bytes = BaseService.Request(StaticUrl.Url_GetUUID + DateTime.Now.ToTimeStamp(), MethodEnum.GET);
     //得到session
     session_id = Encoding.UTF8.GetString(bytes).Split(new string[] { "\"" }, StringSplitOptions.None)[1];
     //请求二维码
     bytes = BaseService.Request(StaticUrl.Url_GetQrCode + session_id, MethodEnum.GET);
     //转换成图片
     return(ImageHelper.MemoryToImageSource_Transparent(new MemoryStream(bytes)));
 }
        public void Loginout()
        {
            Cookie sid = BaseService.GetCookie("wxsid");
            Cookie uin = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                string formData = $"sid={sid}&uin={uin}";
                BaseService.Request($"{StaticUrl.Uri_logout}{HttpUtility.UrlEncode(LoginService.SKey)}&type=0", MethodEnum.POST, formData, "application/x-www-form-urlencoded");
                BaseService.Request($"{StaticUrl.Uri_logout}{HttpUtility.UrlEncode(LoginService.SKey)}&type=1", MethodEnum.POST, formData, "application/x-www-form-urlencoded");
            }
        }
        /// <summary>
        /// 开启下载图片后台任务
        /// </summary>
        private void StartDownloadTask()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    if (_modelQueue.Count > 0)
                    {
                        INeedDownloadImageModel model = null;
                        lock (_sync)
                        {
                            model = _modelQueue.Dequeue();
                        }
                        try
                        {
                            if (model.Image != null)
                            {
                                continue;
                            }

                            if (ImageCacheService.TryGetValue(model.Uri, out ImageSource image))
                            {
                                model.Image = image;
                                continue;
                            }
                            byte[] bytes = BaseService.Request(model.Uri, MethodEnum.GET);
                            //这里赋值ImageSource时,需要在UI线程上执行,才能绑定到界面
                            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                            {
                                try
                                {
                                    model.Image = bytes.Length == 0 ? _default : ImageHelper.MemoryToImageSourceOther(new MemoryStream(bytes));
                                    ImageCacheService.Add(model.Uri, model.Image);
                                }
                                catch (Exception)
                                {
                                }
                            }));
                        }
                        catch (Exception)
                        {
                        }
                    }
                    else
                    {
                        Thread.Sleep(100);
                    }
                }
            });
        }
示例#10
0
        /// <summary>
        /// 获取sid uid 结果放在cookie中
        /// </summary>
        /// <param name="login_redirect"></param>
        public bool GetSidUid(string login_redirect, out string errorMsg)
        {
            errorMsg = null;
            byte[] bytes       = BaseService.Request(login_redirect + StaticUrl.Url_redirect_ext, MethodEnum.GET);
            string pass_ticket = Encoding.UTF8.GetString(bytes);

            if (pass_ticket.Contains("pass_ticket"))
            {
                Pass_Ticket = pass_ticket.Split(new string[] { "pass_ticket" }, StringSplitOptions.None)[1].TrimStart('>').TrimEnd('<', '/');
                SKey        = pass_ticket.Split(new string[] { "skey" }, StringSplitOptions.None)[1].TrimStart('>').TrimEnd('<', '/');
                return(true);
            }
            else
            {
                errorMsg = pass_ticket;
                return(false);
            }
        }
示例#11
0
        /// <summary>
        /// 获取指定用户或群组列表(每次最多查询50条数据)
        /// </summary>
        /// <param name="userNames"></param>
        /// <returns></returns>
        public JObject WxBatchGetContact(string[] userNames)
        {
            if (userNames == null || userNames.Length == 0)
            {
                throw new Exception("没有传入userNames");
            }

            Cookie sid = BaseService.GetCookie("wxsid");
            Cookie uin = BaseService.GetCookie("wxuin");

            if (sid != null && uin != null)
            {
                var body = new
                {
                    BaseRequest = new BaseRequest
                    {
                        DeviceID = "e" + RandomHelper.RandomNum(15),
                        Sid      = sid.Value,
                        Uin      = int.Parse(uin.Value),
                        Skey     = LoginService.SKey
                    },
                    Count = userNames.Length,
                    List  = userNames.Select(p => new
                    {
                        EncryChatRoomId = "",
                        UserName        = p
                    })
                };
                string json    = JsonConvert.SerializeObject(body);
                byte[] bytes   = BaseService.Request(StaticUrl.Url_wxbatchgetcontact + DateTime.Now.ToTimeStamp() + "&pass_ticket=" + LoginService.Pass_Ticket, MethodEnum.POST, json);
                string res_str = Encoding.UTF8.GetString(bytes);

                return(JsonConvert.DeserializeObject(res_str) as JObject);
            }
            else
            {
                throw new Exception("sid或uin为null");
            }
        }
示例#12
0
        /// <summary>
        /// 微信同步
        /// </summary>
        /// <returns></returns>
        public JObject WeChatSync()
        {
            string sync_json = "{{\"BaseRequest\" : {{\"DeviceID\":\"e" + RandomHelper.RandomNum(15) + "\",\"Sid\":\"{1}\", \"Skey\":\"{5}\", \"Uin\":\"{0}\"}},\"SyncKey\" : {{\"Count\":{2},\"List\":[{3}]}},\"rr\" :{4}}}";
            Cookie sid       = BaseService.GetCookie("wxsid");
            Cookie uin       = BaseService.GetCookie("wxuin");

            string sync_keys = "";

            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, uin.Value, sid.Value, _syncKey.Count, sync_keys, DateTime.Now.ToTimeStamp(), LoginService.SKey);

            if (sid != null && uin != null)
            {
                StaticUrl.Url_Sync_ext = string.Format(StaticUrl.Url_Sync_ext, sid.Value, LoginService.SKey, LoginService.Pass_Ticket);
                byte[] bytes    = BaseService.Request(StaticUrl.stringWx + StaticUrl.Url_Sync + StaticUrl.Url_Sync_ext, MethodEnum.POST, sync_json);
                string sync_str = Encoding.UTF8.GetString(bytes);

                JObject sync_result = JsonConvert.DeserializeObject(sync_str) as JObject;
                if (sync_result["SyncKey"]["Count"].ToString() != "0")
                {
                    _syncKey.Clear();
                    foreach (JObject key in sync_result["SyncKey"]["List"])
                    {
                        _syncKey.Add(key["Key"].ToString(), key["Val"].ToString());
                    }
                }
                return(sync_result);
            }
            else
            {
                throw new Exception("sid或uin为null");
            }
        }
示例#13
0
        /// <summary>
        /// 登录扫描检测
        /// </summary>
        /// <returns></returns>
        public object LoginCheck()
        {
            if (session_id == null)
            {
                return(null);
            }
            //查看是否扫码登录了
            byte[] bytes = BaseService.Request(StaticUrl.Url_WaitLogin + session_id + "&tip=0&r=" + ~DateTime.Now.ToTimeStamp() + "&_=" + DateTime.Now.ToTimeStamp(), MethodEnum.GET);

            string login_result = Encoding.UTF8.GetString(bytes);

            if (login_result.Contains("=" + StaticCode.LoginCode.code_LoginSuccess))
            {
                string login_redirect_url = login_result.Split(new string[] { "\"" }, StringSplitOptions.None)[1];
                string string_url_front   = login_redirect_url.Split(new string[] { "?" }, StringSplitOptions.None)[0];
                if (string_url_front.IndexOf("wx2.qq.com") > -1)
                {
                    StaticUrl.stringWx      = "https://wx2.qq.com";
                    StaticUrl.stringWebPush = "https://webpush2.weixin.qq.com";
                }
                if (string_url_front.IndexOf("wx.qq.com") > -1)
                {
                    StaticUrl.stringWx      = "https://wx.qq.com";
                    StaticUrl.stringWebPush = "https://webpush.weixin.qq.com";
                }
                if (string_url_front.IndexOf("web1.wechat.com") > -1)
                {
                    StaticUrl.stringWx      = "https://web.wechat.com";
                    StaticUrl.stringWebPush = "https://webpush1.wechat.com";
                }
                if (string_url_front.IndexOf("web2.wechat.com") > -1)
                {
                    StaticUrl.stringWx      = "https://web.wechat.com";
                    StaticUrl.stringWebPush = "https://webpush2.wechat.com";
                }
                if (string_url_front.IndexOf("web.wechat.com") > -1)
                {
                    StaticUrl.stringWx      = "https://web.wechat.com";
                    StaticUrl.stringWebPush = "https://webpush.wechat.com";
                }
                if (string_url_front.IndexOf("web1.wechatapp.com") > -1)
                {
                    StaticUrl.stringWx      = "https://web.wechatapp.com";
                    StaticUrl.stringWebPush = "https://webpush1.wechatapp.com";
                }
                if (string_url_front.IndexOf("web.wechatapp.com") > -1)
                {
                    StaticUrl.stringWx      = "https://web.wechatapp.com";
                    StaticUrl.stringWebPush = "https://webpush.wechatapp.com";
                }
                return(login_redirect_url);
            }
            else if (login_result.Contains("=" + StaticCode.LoginCode.code_LoginWait))
            {
                string       base64_image       = login_result.Split(new string[] { "\'" }, StringSplitOptions.None)[1].Split(',')[1];
                byte[]       base64_image_bytes = Convert.FromBase64String(base64_image);
                MemoryStream memoryStream       = new MemoryStream(base64_image_bytes, 0, base64_image_bytes.Length);
                //memoryStream.Write(base64_image_bytes, 0, base64_image_bytes.Length);
                //转成图片
                return(ImageHelper.MemoryToImageSource(memoryStream));
            }
            //注:如果用超时的话,会有问题,后期再研究
            //else if (login_result.Contains("=" + StaticCode.LoginCode.code_LoginTimeOut))
            //{
            //    session_id = null;
            //    return 408;
            //}
            else
            {
                return(null);
            }
        }