Exemplo n.º 1
0
        private async void button1_Click(object sender, EventArgs e)
        {
            WriteLog("=============================================================");

            this.button1.Enabled = false;
            this.textBox1.Text   = "";
            client.SetCookie(null);

            var _isNeedRefreshQRCode = true;
            var _start = DateTime.Now;

            while (true)
            {
                if (_isNeedRefreshQRCode)
                {
                    SetText("获取UUID...");
                    var request  = new Entity.GetQRCodeRequest();
                    var response = await client.ExecuteAsync(request);

                    SetText(response.QRLoginUUId);
                    uuid = response.QRLoginUUId;

                    SetText("获取二维码...");
                    var r  = new Entity.GetQRImageRequest(response.QRLoginUUId);
                    var re = await client.ExecuteAsync(r);

                    this.pictureBox1.Image = re.QRImage;

                    _isNeedRefreshQRCode = false;
                }

                var _scanStart = DateTime.Now;
                SetText("等待扫描二维码...");
                var _request  = new Entity.ScanQRRequest(1, uuid);
                var _response = await client.ExecuteAsync(_request);

                if (_response.Code == "408")
                {
                    SetText("扫描超时...{0}s", DateTime.Now.Subtract(_scanStart).TotalSeconds);
                    continue;
                }
                else if (_response.Code == "201")
                {
                    SetText("扫描成功,等待确认登录...");
                    var bytes = Convert.FromBase64String(_response.UserAvatarBase64String);
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes))
                    {
                        this.pictureBox1.Image = Image.FromStream(ms);
                    }
                    break;
                }
                else if (_response.Code == "400")
                {
                    SetText("二维码已经过期...{0}s没有扫描", DateTime.Now.Subtract(_start).TotalSeconds);
                    _isNeedRefreshQRCode = true;
                    continue;
                }
            }

            Entity.ScanQRResponse _scanResponse = null;

            while (true)
            {
                SetText("等待确认登录...");
                var _request = new Entity.ScanQRRequest(0, uuid);
                _scanResponse = await client.ExecuteAsync(_request);

                if (_scanResponse.Code == "408")
                {
                    SetText("登录超时...");
                    continue;
                }
                else if (_scanResponse.Code == "200")
                {
                    SetText("已经确认登录...");
                    break;
                }
            }

            SetText("开始登录...");
            var _loginRequest  = new Entity.LoginWxRequest(_scanResponse.RedirectUri);
            var _loginResponse = await client.ExecuteAsync(_loginRequest);

            _loginWxResponse = _loginResponse;
            _passTicket      = _loginWxResponse.PassTicket;

            SetText(_loginResponse.SKey);

            SetText("初始化...");
            var _initRequest  = new Entity.WxInitRequest(new Entity.WxRequest(_loginResponse));
            var _initResponse = await client.ExecuteAsync(_initRequest);

            if (_initResponse.BaseResponse.Ret != 0)
            {
                SetText("初始化失败!");
                return;
            }
            SetText("联系人数量:{0}", _initResponse.Count);
            foreach (var c in _initResponse.ContactList)
            {
                SetText("初始化联系人信息\tUserName:{0}\tAlias:{1}\tDisplayName:{2}\tNickName:{3}\tRemarkName:{4}", c.UserName, c.Alias, c.DisplayName, c.NickName, c.RemarkName);
            }

            _syncKey      = _initResponse.SyncKey;
            _syncCheckKey = _initResponse.SyncKey;
            _myUserName   = _initResponse.User.UserName;

            SetText("开通微信状态通知...");
            var _openNotifyRequest  = new Entity.OpenWxStatusNotifyRequest(new Entity.WxRequest(_loginResponse), _initResponse.User.UserName);
            var _openNotifyResponse = await client.ExecuteAsync(_openNotifyRequest);

            SetText(_openNotifyResponse.MsgID);

            SetText("获取联系人...");
            var _getContactRequest  = new Entity.GetContactRequest(_loginResponse.SKey, 0);
            var _getContactResponse = await client.ExecuteAsync(_getContactRequest);

            SetText("联系人数量:{0}", _getContactResponse.MemberCount);
            foreach (var c in _getContactResponse.MemberList)
            {
                SetText("联系人信息\tUserName:{0}\tAlias:{1}\tDisplayName:{2}\tNickName:{3}\tRemarkName:{4}", c.UserName, c.Alias, c.DisplayName, c.NickName, c.RemarkName);
            }

            var f = _getContactResponse.MemberList.FirstOrDefault(p => p.NickName == "王小重");

            if (f != null)
            {
                _toUser = f.UserName;
            }

            SetText("获取群组信息...");
            var gs = _initResponse.GetChatSetArray().Where(p => p.StartsWith("@@"));

            if (gs != null && gs.Count() > 0)
            {
                var gss = from n in gs select new Entity.BatchGetContactRequest._BatchGetContactRequestItem {
                    EncryChatRoomId = "", UserName = n
                };
                var _batchGetContactRequest  = new Entity.BatchGetContactRequest(new Entity.WxRequest(_loginResponse), gss.ToArray(), _loginResponse.PassTicket);
                var _batchGetContactResponse = await client.ExecuteAsync(_batchGetContactRequest);

                SetText("{0}", _batchGetContactResponse.Count);
                foreach (var c in _batchGetContactResponse.ContactList)
                {
                    SetText("群组信息\tUserName:{0}\tAlias:{1}\tDisplayName:{2}\tNickName:{3}\tRemarkName:{4}", c.UserName, c.Alias, c.DisplayName, c.NickName, c.RemarkName);
                }
            }

            SetText("获取其它群组信息...");
            gs = _getContactResponse.MemberList.Where(p => p.UserName.StartsWith("@@")).Select(p => p.UserName).ToArray();
            if (gs != null && gs.Count() > 0)
            {
                var gss = from n in gs select new Entity.BatchGetContactRequest._BatchGetContactRequestItem {
                    EncryChatRoomId = "", UserName = n
                };
                var _batchGetContactRequest  = new Entity.BatchGetContactRequest(new Entity.WxRequest(_loginResponse), gss.ToArray(), _loginResponse.PassTicket);
                var _batchGetContactResponse = await client.ExecuteAsync(_batchGetContactRequest);

                SetText("{0}", _batchGetContactResponse.Count);
                foreach (var c in _batchGetContactResponse.ContactList)
                {
                    SetText("群组信息\tUserName:{0}\tAlias:{1}\tDisplayName:{2}\tNickName:{3}\tRemarkName:{4}", c.UserName, c.Alias, c.DisplayName, c.NickName, c.RemarkName);
                }
            }

            this.button2.Enabled = true;
            this.button3.Enabled = true;
        }
Exemplo n.º 2
0
        private async void button2_Click(object sender, EventArgs e)
        {
            this.button2.Enabled = false;

            DoTask();

            while (true)
            {
                var syncRequest  = new Entity.SyncCheckRequest(new Entity.WxRequest(_loginWxResponse), _syncCheckKey.List);
                var syncResponse = await client.ExecuteAsync(syncRequest);

                if (syncResponse.RetCode == 0 && syncResponse.Selector > 0)
                {
                    var syncMsgRequest  = new Entity.WxSyncRequest(new Entity.WxRequest(_loginWxResponse), _passTicket, _syncKey, _loginWxResponse.WxSid, _loginWxResponse.SKey);
                    var syncMsgResponse = await client.ExecuteAsync(syncMsgRequest);

                    WriteLog(System.Web.HttpUtility.HtmlDecode(Helper.SerializationHelper.SerializeObjectToJson(syncMsgResponse)));

                    if (syncMsgResponse.BaseResponse.Ret == 0)
                    {
                        _syncKey      = syncMsgResponse.SyncKey;
                        _syncCheckKey = syncMsgResponse.SyncCheckKey;

                        foreach (var msg in syncMsgResponse.AddMsgList)
                        {
                            if (msg.MsgType == 1)
                            {
                                #region text msg
                                SetText("收到来自{0}的消息:{1}", msg.FromUserName, msg.Content);

                                if (_userMsgMapping.Keys.Contains(msg.FromUserName))
                                {
                                    _userMsgMapping[msg.FromUserName] = msg.Content;
                                }
                                else
                                {
                                    _userMsgMapping.Add(msg.FromUserName, msg.Content);
                                }
                                #endregion
                            }
                            else if (msg.MsgType == 3)
                            {
                                #region img msg
                                SetText("收到来自{0}的图片:{1}", msg.FromUserName, Helper.SerializationHelper.SerializeObjectToJson(Helper.SerializationHelper.DeserializeXML <Entity.WxImgMsgContent>(msg.Content, true, "<br/>")));

                                SetText("给对方发送确认信息...");
                                var _sendTextRequest = new Entity.WxSendMsgRequest
                                {
                                    BaseRequest = new Entity.WxBaseRequest(new Entity.WxRequest(_loginWxResponse)),
                                    PassTicket  = _passTicket,
                                    Message     = new Entity.WxMsg
                                    {
                                        FromUserName = _myUserName,
                                        ToUserName   = msg.FromUserName,
                                        Content      = "您的图片已经收到,本地保存后会回复给您。"
                                    }
                                };

                                var _sendTextResponse = await client.ExecuteAsync(_sendTextRequest);

                                if (_sendTextResponse.BaseResponse.Ret == 0)
                                {
                                    SetText("成功发送确认信息!");
                                }

                                SetText("下载图片...");
                                var _downloadPicRequest  = new Entity.GetMsgImgRequest(msg.MsgId, _loginWxResponse.SKey, "_");
                                var _downloadPicResponse = await client.ExecuteAsync(_downloadPicRequest);

                                var _img = _downloadPicResponse.HeadImage;
                                var _ext = ".png";
                                if (_img.RawFormat == System.Drawing.Imaging.ImageFormat.Bmp)
                                {
                                    _ext = ".bmp";
                                }
                                else if (_img.RawFormat == System.Drawing.Imaging.ImageFormat.Png)
                                {
                                    _ext = ".png";
                                }
                                else if (_img.RawFormat == System.Drawing.Imaging.ImageFormat.Jpeg)
                                {
                                    _ext = ".jpg";
                                }
                                else if (_img.RawFormat == System.Drawing.Imaging.ImageFormat.Gif)
                                {
                                    _ext = ".gif";
                                }

                                SetText("保存图片...");
                                var _file = System.IO.Path.Combine(Application.StartupPath, "images", Guid.NewGuid().ToString() + _ext);
                                //_downloadPicResponse.HeadImage.Save(_file);
                                var _finfo = new System.IO.FileInfo(_file);
                                if (!_finfo.Directory.Exists)
                                {
                                    _finfo.Directory.Create();
                                }

                                System.IO.File.WriteAllBytes(_file, Convert.FromBase64String(_downloadPicResponse.ResponseBase64String));

                                SetText("返回图片给对方...");
                                SetText("上传图片...");
                                var _uploadImgRequest = new Entity.UploadMediaRequest(
                                    new System.IO.FileInfo(_file),
                                    new Entity.WxRequest(_loginWxResponse),
                                    _myUserName, msg.FromUserName, client.GetWxDataTicket(), _passTicket);
                                var _uploadImgResponse = await client.ExecuteAsync(_uploadImgRequest);

                                if (_uploadImgResponse.BaseResponse.Ret == 0)
                                {
                                    SetText("上传成功!");
                                }

                                SetText("发送图片...");
                                var _sendImgRequest = new Entity.WxSendImgMsgRequest
                                {
                                    BaseRequest = new Entity.WxBaseRequest(new Entity.WxRequest(_loginWxResponse)),
                                    PassTicket  = _passTicket,
                                    Message     = new Entity.WxImgMsg
                                    {
                                        FromUserName = _myUserName,
                                        ToUserName   = msg.FromUserName,
                                        MediaId      = _uploadImgResponse.MediaId
                                    }
                                };
                                var _sendImgResponse = await client.ExecuteAsync(_sendImgRequest);

                                SetText("成功...{0}", _sendImgResponse.MsgID);
                                #endregion
                            }
                            else if (msg.MsgType == 37)
                            {
                                #region add friend
                                SetText("收到好友添加信息...");
                                if (syncMsgResponse.AddMsgList[0].RecommendInfo.Content == "12345678")
                                {
                                    var _verifyUserRequest  = new Entity.VerifyUserRequest(new Entity.WxRequest(_loginWxResponse), syncMsgResponse.AddMsgList[0].RecommendInfo, _passTicket);
                                    var _verifyUserResponse = await client.ExecuteAsync(_verifyUserRequest);

                                    if (_verifyUserResponse.BaseResponse.Ret == 0)
                                    {
                                        SetText("已经自动通过!");
                                        SetText("发送打招呼内容");
                                        var _sayHello = await client.ExecuteAsync(new Entity.WxSendMsgRequest(new Entity.WxMsg()
                                        {
                                            Content = "Hi, I'm Jarvis", FromUserName = _myUserName, ToUserName = syncMsgResponse.AddMsgList[0].RecommendInfo.UserName
                                        }, _passTicket));

                                        if (_sayHello.BaseResponse.Ret == 0)
                                        {
                                            SetText("打招呼成功");
                                        }
                                    }
                                }
                                #endregion
                            }
                            else if (msg.MsgType == 49)
                            {
                                #region app msg

                                try
                                {
                                    var _appMsg = Helper.SerializationHelper.DeserializeXML <Entity.WxAppMsgContent>(msg.Content, true, "<br/>");
                                    if (_appMsg != null && _appMsg.AppInformation.AppName == "优酷视频")
                                    {
                                        SetText("收到一条分享的优酷视频:\r\n\t标题:{0}\r\n\tUrl:{1}",
                                                _appMsg.AppMsg.Title, _appMsg.AppMsg.Url);

                                        SetText("给对方发送确认信息...");
                                        var _sendTextRequest = new Entity.WxSendMsgRequest
                                        {
                                            BaseRequest = new Entity.WxBaseRequest(new Entity.WxRequest(_loginWxResponse)),
                                            PassTicket  = _passTicket,
                                            Message     = new Entity.WxMsg
                                            {
                                                FromUserName = _myUserName,
                                                ToUserName   = msg.FromUserName,
                                                Content      = "收到您分享的视频。\n\n标题:\n" + _appMsg.AppMsg.Title + "\n\nUrl:\n" + _appMsg.AppMsg.Url + "\n\n后台会自动转存到共享账号,转存成功后会微信通知您。"
                                            }
                                        };
                                        await client.ExecuteAsync(_sendTextRequest);

                                        var s = new VideoTask
                                        {
                                            LoginResponse = _loginWxResponse,
                                            MyUserName    = _myUserName,
                                            ToUserName    = msg.FromUserName,
                                            Client        = client,
                                            PassTicket    = _passTicket,
                                            VideoTitle    = _appMsg.AppMsg.Title,
                                            VideoUrl      = _appMsg.AppMsg.Url
                                        };

                                        _queue.Enqueue(s);
                                    }
                                }
                                catch
                                {
                                }

                                #endregion
                            }
                        }
                    }
                }
                else if (syncResponse.RetCode != 0)
                {
                    SetText("已经退出.");
                    break;
                }
            }

            client.SetCookie(null);
            this.button1.Enabled = true;
            this.button2.Enabled = true;
        }