Ejemplo n.º 1
0
        public async Task SinaLogin()
        {
            try
            {
                string      loginInfoJson = AppSettings.Instance.LoginInfoJson;
                var         loginInfo     = loginInfoJson != string.Empty ? SocialShare.Weibo.JsonConvertHelper.JsonDeserialize <LoginInfo>(loginInfoJson) : new LoginInfo();
                WeiboClient client        = new WeiboClient(loginInfo);
                loginInfo = await client.LoginAsync();

                AppSettings.Instance.LoginInfoJson = SocialShare.Weibo.JsonConvertHelper.JsonSerializer(loginInfo);

                string resJson = await WebProvider.GetInstance().SendPostRequestAsync("http://news-at.zhihu.com/api/4/login", AppSettings.Instance.LoginInfoJson, WebProvider.ContentType.ContentType3);

                UserInfo userInfo = DataService.JsonConvertHelper.JsonDeserialize <UserInfo>(resJson);
                if (userInfo != null)
                {
                    var    folder      = ApplicationData.Current.LocalFolder;
                    string fileName    = System.IO.Path.GetFileName(userInfo.Avatar);
                    var    storageFile = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

                    await new NewsImageDowloader().SaveImage(userInfo.Avatar, storageFile);

                    userInfo.Avatar = $"ms-appdata:///local/{fileName}";

                    ViewModel.ViewModelLocator.AppShell.UserInfo = userInfo;

                    AppSettings.Instance.UserInfoJson = DataService.JsonConvertHelper.JsonSerializer(userInfo);
                }
            }
            catch (Exception)
            {
                //ToastPrompt.ShowToast(ex.Message);
            }
        }
Ejemplo n.º 2
0
        public void VerifyCredentials_Test()
        {
            // Arrange
            var request = new SinaVerifyCredentialsRequest();

            // Act
            var user = WeiboClient.Get(request).User;

            // Assert
            Assert.IsNotNull(user);
            Assert.AreEqual("PC遥控器", user.ScreenName);
        }
Ejemplo n.º 3
0
        public void UserShow_Test()
        {
            // Arrange
            var request = new SinaUserShowRequest("JJ叫我改名给她试新野");

            // Act
            var user = WeiboClient.Get(request).User;

            // Assert
            Assert.IsNotNull(user);
            Assert.AreEqual(request.ScreenName, user.ScreenName);
        }
Ejemplo n.º 4
0
        public void Add_A_Status_Test()
        {
            // Arrange
            var text    = "▓Р╩ниб╬б▓Е " + DateTime.Now.ToLongTimeString();
            var requets = new SinaStatusUpdateRequest(text);

            // Act
            var status = WeiboClient.Post(requets).Status;

            // Assert
            Assert.IsNotNull(status);
            Assert.AreEqual(text, status.Text);
        }
Ejemplo n.º 5
0
        public void Add_A_Status_With_Picture_Test()
        {
            // Arrange
            var text    = "▓Р╩ниб═╝кг╬б▓Е " + DateTime.Now.ToLongTimeString();
            var request = new SinaStatusUploadRequest(text, "c:\\Unnamed.jpg");

            // Act
            var status = WeiboClient.Post(request).Status;

            // Assert
            Assert.IsNotNull(status);
            Assert.AreEqual(text, status.Text);
        }
Ejemplo n.º 6
0
        public void Add_Comment_Test()
        {
            // Arrange
            var text    = "test send a comment at " + DateTime.Now.ToLongTimeString();
            var request = new SinaCommentAddRequest(13712497764, text);

            // Act
            var comment = WeiboClient.Post(request).Comment;

            // Assert
            Assert.IsNotNull(comment);
            Assert.AreEqual(text, comment.Text);
        }
Ejemplo n.º 7
0
        public void Get_Broadcast_Timeline_Test()
        {
            // Arrange
            var request = new QQBroadcastTimelineRequest {
                ReqNum = 1
            };

            // Act
            var statuses = WeiboClient.Get(request).Statuses;

            // Assert
            Assert.IsNotNull(statuses);
            Assert.AreEqual(1, statuses.Count);
        }
Ejemplo n.º 8
0
        public void Get_User_Timeline_Test()
        {
            // Arrange
            var request = new SinaUserTimelineRequest {
                Count = 1
            };

            // Act
            var statuses = WeiboClient.Get(request).Statuses;

            // Assert
            Assert.IsNotNull(statuses);
            Assert.AreEqual(1, statuses.Count);
        }
Ejemplo n.º 9
0
        public void Get_User_Info_Test()
        {
            // Arrange
            var request = new QQUserInfoRequest();

            // Act
            QQUser user = WeiboClient.Get(request).User;

            // Assert
            Assert.IsNotNull(user);

            Assert.AreEqual("suchuanyi", user.Name);
            Assert.AreEqual("кдяшцицФою", user.Nick);
        }
Ejemplo n.º 10
0
        public void Add_A_Status_With_Picture_Test()
        {
            // Arrange
            var text    = "▓Р╩ниб═╝кг╬б▓Е " + DateTime.Now.ToLongTimeString();
            var request = new QQStatusAddWithPicRequest(text, "c:\\Unnamed.jpg");

            // Act
            var response = WeiboClient.Post(request);

            // Assert
            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.Ret);

            Console.WriteLine(response.Id);
            Console.WriteLine(response.Timestamp);
        }
Ejemplo n.º 11
0
        public IHttpActionResult GetAuth(string type)
        {
            try
            {
                var request = Context.GetCurrentRequest();

                var config      = Utils.GetConfigInfo();
                var oAuthType   = OAuthType.Parse(type);
                var redirectUrl = request.GetQueryString("redirectUrl");
                if (string.IsNullOrEmpty(redirectUrl))
                {
                    redirectUrl = ApiUtils.GetHomeUrl();
                }

                var url = string.Empty;

                if (oAuthType == OAuthType.Weibo)
                {
                    var client = new WeiboClient(config.WeiboAppKey, config.WeiboAppSecret, redirectUrl);
                    url = client.GetAuthorizationUrl();
                }
                else if (oAuthType == OAuthType.Weixin)
                {
                    var client = new WeixinClient(config.WeixinAppId, config.WeixinAppSecret, redirectUrl);
                    url = client.GetAuthorizationUrl();
                }
                else if (oAuthType == OAuthType.Qq)
                {
                    var client = new QqClient(config.QqAppId, config.QqAppKey, redirectUrl);
                    url = client.GetAuthorizationUrl();
                }

                if (!string.IsNullOrEmpty(url))
                {
                    HttpContext.Current.Response.Redirect(url);
                }

                return(BadRequest("类型不正确"));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Ejemplo n.º 12
0
        public void Add_A_Status_Test()
        {
            // Arrange
            var text    = "▓Р╩ниб╦═╬б▓Е " + DateTime.Now.ToLongTimeString();
            var request = new QQStatusAddRequest(text)
            {
                ClientIp = IPUtility.GetFirstLocalIP()
            };

            // Act
            var response = WeiboClient.Post(request);

            // Assert
            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.Ret);

            Console.WriteLine(response.Id);
            Console.WriteLine(response.Timestamp);
        }
Ejemplo n.º 13
0
        private async void BtnShareImage_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                WeiboClient client = await WeiboClient.CreateAsync();

                var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/唱歌1.png"));

                var data = (await FileIO.ReadBufferAsync(file)).ToArray();

                var shareResult = await client.ShareImageAsync(data, txtShareImage.Text);

                if (shareResult.IsSuccess)
                {
                    await new MessageDialog("分享成功").ShowAsync();
                }
                else
                {
                    await new MessageDialog("分享失败,错误码" + shareResult.ErrorCode).ShowAsync();
                }
            }
            catch (ArgumentException ex)
            {
                // 空字符串或长度超过 140。
                await new MessageDialog(ex.Message).ShowAsync();
            }
            catch (AuthorizeException ex)
            {
                if (ex.Result.ResponseStatus == WebAuthenticationStatus.UserCancel)
                {
                    await new MessageDialog("你取消了授权").ShowAsync();
                }
                else if (ex.Result.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
                {
                    await new MessageDialog("网络故障").ShowAsync();
                }
            }
            catch (HttpException ex)
            {
                await new MessageDialog("网络故障:" + ex.ErrorStatus.ToString()).ShowAsync();
            }
        }
Ejemplo n.º 14
0
        public async Task <ActionResult> GetAuth([FromRoute] string type, [FromQuery] GetAuthRequest request)
        {
            var oAuthType   = OAuthType.Parse(type);
            var host        = ApiUtils.GetHost(Request);
            var redirectUrl = request.RedirectUrl;

            if (string.IsNullOrEmpty(redirectUrl))
            {
                redirectUrl = ApiUtils.GetHomeUrl();
            }

            var url = string.Empty;

            if (oAuthType == OAuthType.Weixin)
            {
                var settings = await _loginManager.GetWeixinSettingsAsync();

                var client = new WeixinClient(settings.WeixinAppId, settings.WeixinAppSecret, host, redirectUrl);
                url = client.GetAuthorizationUrl();
            }
            else if (oAuthType == OAuthType.Qq)
            {
                var settings = await _loginManager.GetQqSettingsAsync();

                var client = new QqClient(settings.QqAppId, settings.QqAppKey, host, redirectUrl);
                url = client.GetAuthorizationUrl();
            }
            else if (oAuthType == OAuthType.Weibo)
            {
                var settings = await _loginManager.GetWeiboSettingsAsync();

                var client = new WeiboClient(settings.WeiboAppKey, settings.WeiboAppSecret, host, redirectUrl);
                url = client.GetAuthorizationUrl();
            }

            if (!string.IsNullOrEmpty(url))
            {
                return(Redirect(url));
            }

            return(this.Error("类型不正确"));
        }
Ejemplo n.º 15
0
        public void Add_A_Comment_Test()
        {
            // Arrange
            var text    = "²âÊÔ·¢ÆÀÂÛ " + DateTime.Now.ToLongTimeString();
            var reid    = "47032096626287";
            var request = new QQCommentAddRequest(reid, text)
            {
                ClientIp = IPUtility.GetFirstLocalIP()
            };

            // Act
            var response = WeiboClient.Post(request);

            // Assert
            Assert.IsNotNull(response);
            Assert.AreEqual("0", response.Ret);

            Console.WriteLine(response.Id);
            Console.WriteLine(response.Timestamp);
        }
Ejemplo n.º 16
0
        private async void BtnShareText_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                WeiboClient client = await WeiboClient.CreateAsync();

                var shareResult = await client.ShareTextAsync(txtShareText.Text);

                if (shareResult.IsSuccess)
                {
                    await new MessageDialog("分享成功").ShowAsync();
                }
                else
                {
                    await new MessageDialog("分享失败,错误码" + shareResult.ErrorCode).ShowAsync();
                }
            }
            catch (ArgumentException ex)
            {
                // 空字符串或长度超过 140。
                await new MessageDialog(ex.Message).ShowAsync();
            }
            catch (AuthorizeException ex)
            {
                if (ex.Result.ResponseStatus == WebAuthenticationStatus.UserCancel)
                {
                    await new MessageDialog("你取消了授权").ShowAsync();
                }
                else if (ex.Result.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
                {
                    await new MessageDialog("网络故障").ShowAsync();
                }
            }
            catch (HttpException ex)
            {
                await new MessageDialog("网络故障:" + ex.ErrorStatus.ToString()).ShowAsync();
            }
        }
Ejemplo n.º 17
0
        private static async Task <bool> WeiboShare(string url, string text)
        {
            CacheProvider cache = new CacheProvider(StorageType.IsolatedStorage);

            if (GlobalValue.CurrentWeiboUserInfo == null)
            {
                GlobalValue.CurrentWeiboUserInfo = cache.GetItem <UserInfo>(CacheKey.WeiboUser) ?? new UserInfo();
            }
            byte[] image = await new HttpClient().GetByteArrayAsync(url);

            bool shareResult = false;

            try
            {
                WeiboClient client = new WeiboClient(GlobalValue.CurrentWeiboUserInfo);
                await client.LoginAsync();

                WeiboResult result;
                if (!string.IsNullOrEmpty(url))
                {
                    result = await client.ShareImageAsync(image, text);
                }
                else
                {
                    result = await client.ShareTextAsync(text);
                }
                GlobalValue.CurrentWeiboUserInfo = client.UserInfo;

                cache.UpdateItem(CacheKey.WeiboUser, GlobalValue.CurrentWeiboUserInfo);
                shareResult = true;
            }
            catch
            {
                shareResult = false;
            }
            return(shareResult);
        }
Ejemplo n.º 18
0
        public IHttpActionResult GetRedirect(string type)
        {
            try
            {
                var request = Context.GetCurrentRequest();

                var config    = Utils.GetConfigInfo();
                var oAuthType = OAuthType.Parse(type);

                var redirectUrl = request.GetQueryString("redirectUrl");
                var code        = request.GetQueryString("code");
                var userName    = string.Empty;

                if (oAuthType == OAuthType.Weibo)
                {
                    var client = new WeiboClient(config.WeiboAppKey, config.WeiboAppSecret, redirectUrl);

                    string name;
                    string screenName;
                    string avatarLarge;
                    string gender;
                    string uniqueId;
                    client.GetUserInfo(code, out name, out screenName, out avatarLarge, out gender, out uniqueId);

                    userName = OAuthDao.GetUserName(OAuthType.Weibo.Value, uniqueId);
                    if (string.IsNullOrEmpty(userName))
                    {
                        var userInfo = Context.UserApi.NewInstance();
                        userInfo.UserName = Context.UserApi.IsUserNameExists(name)
                            ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                            : name;
                        userInfo.DisplayName = screenName;
                        userInfo.AvatarUrl   = avatarLarge;
                        userInfo.Gender      = gender;

                        string errorMessage;
                        Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage);
                        userName = userInfo.UserName;

                        OAuthDao.Insert(new OAuthInfo
                        {
                            Source   = OAuthType.Weibo.Value,
                            UniqueId = uniqueId,
                            UserName = userName
                        });
                    }
                }
                else if (oAuthType == OAuthType.Weixin)
                {
                    var client = new WeixinClient(config.WeixinAppId, config.WeixinAppSecret, redirectUrl);

                    string nickname;
                    string headimgurl;
                    string gender;
                    string unionid;
                    client.GetUserInfo(code, out nickname, out headimgurl, out gender, out unionid);

                    userName = OAuthDao.GetUserName(OAuthType.Weixin.Value, unionid);
                    if (string.IsNullOrEmpty(userName))
                    {
                        var userInfo = Context.UserApi.NewInstance();
                        userInfo.UserName = Context.UserApi.IsUserNameExists(nickname)
                            ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                            : nickname;
                        userInfo.DisplayName = nickname;
                        userInfo.AvatarUrl   = headimgurl;
                        userInfo.Gender      = gender;

                        string errorMessage;
                        Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage);
                        userName = userInfo.UserName;

                        OAuthDao.Insert(new OAuthInfo
                        {
                            Source   = OAuthType.Weixin.Value,
                            UniqueId = unionid,
                            UserName = userName
                        });
                    }
                }
                else if (oAuthType == OAuthType.Qq)
                {
                    var client = new QqClient(config.QqAppId, config.QqAppKey, redirectUrl);

                    string displayName;
                    string avatarUrl;
                    string gender;
                    string uniqueId;
                    client.GetUserInfo(code, out displayName, out avatarUrl, out gender, out uniqueId);

                    userName = OAuthDao.GetUserName(OAuthType.Qq.Value, uniqueId);
                    if (string.IsNullOrEmpty(userName))
                    {
                        var userInfo = Context.UserApi.NewInstance();
                        userInfo.UserName = Context.UserApi.IsUserNameExists(displayName)
                            ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                            : displayName;
                        userInfo.DisplayName = displayName;
                        userInfo.AvatarUrl   = avatarUrl;
                        userInfo.Gender      = gender;

                        string errorMessage;
                        Context.UserApi.Insert(userInfo, Guid.NewGuid().ToString(), out errorMessage);
                        userName = userInfo.UserName;

                        OAuthDao.Insert(new OAuthInfo
                        {
                            Source   = OAuthType.Qq.Value,
                            UniqueId = uniqueId,
                            UserName = userName
                        });
                    }
                }

                if (!string.IsNullOrEmpty(userName))
                {
                    request.UserLogin(userName, true);
                }

                HttpContext.Current.Response.Redirect(redirectUrl);

                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public async Task <ActionResult <GetRedirectResult> > GetRedirect([FromRoute] string type,
                                                                          [FromQuery] GetRedirectRequest request)
        {
            var host      = ApiUtils.GetHost(Request);
            var oAuthType = OAuthType.Parse(type);

            var userName = string.Empty;

            if (oAuthType == OAuthType.Weixin)
            {
                var settings = await _loginManager.GetWeixinSettingsAsync();

                var client = new WeixinClient(settings.WeixinAppId, settings.WeixinAppSecret, host, request.RedirectUrl);

                var userInfo = await client.GetUserInfoAsync(request.Code);

                userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Weixin.Value, userInfo.UnionId);

                if (string.IsNullOrEmpty(userName))
                {
                    var user = new User
                    {
                        UserName = await _userRepository.IsUserNameExistsAsync(userInfo.Nickname)
                            ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                            : userInfo.Nickname,
                        DisplayName = userInfo.Nickname,
                        AvatarUrl   = userInfo.HeadImgUrl
                    };

                    var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request));

                    userName = newUser.UserName;

                    await _oAuthRepository.InsertAsync(new OAuth
                    {
                        Source   = OAuthType.Weixin.Value,
                        UniqueId = userInfo.UnionId,
                        UserName = userName
                    });
                }
            }
            else if (oAuthType == OAuthType.Qq)
            {
                var settings = await _loginManager.GetQqSettingsAsync();

                var client = new QqClient(settings.QqAppId, settings.QqAppKey, host, request.RedirectUrl);

                var userInfo = await client.GetUserInfoAsync(request.Code);

                userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Qq.Value, userInfo.UniqueId);

                if (string.IsNullOrEmpty(userName))
                {
                    var user = new User
                    {
                        UserName = await _userRepository.IsUserNameExistsAsync(userInfo.DisplayName)
                            ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                            : userInfo.DisplayName,
                        DisplayName = userInfo.DisplayName,
                        AvatarUrl   = userInfo.AvatarUrl
                    };

                    var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request));

                    userName = newUser.UserName;

                    await _oAuthRepository.InsertAsync(new OAuth
                    {
                        Source   = OAuthType.Qq.Value,
                        UniqueId = userInfo.UniqueId,
                        UserName = userName
                    });
                }
            }
            else if (oAuthType == OAuthType.Weibo)
            {
                var settings = await _loginManager.GetWeiboSettingsAsync();

                var client = new WeiboClient(settings.WeiboAppKey, settings.WeiboAppSecret, host, request.RedirectUrl);

                var userInfo = await client.GetUserInfoAsync(request.Code);

                userName = await _oAuthRepository.GetUserNameAsync(OAuthType.Weibo.Value, userInfo.UnionId);

                if (string.IsNullOrEmpty(userName))
                {
                    var user = new User();
                    user.UserName = await _userRepository.IsUserNameExistsAsync(userInfo.Name)
                        ? Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "")
                        : userInfo.Name;

                    user.DisplayName = userInfo.ScreenName;
                    user.AvatarUrl   = userInfo.AvatarLarge;

                    var(newUser, _) = await _userRepository.InsertAsync(user, Guid.NewGuid().ToString(), PageUtils.GetIpAddress(Request));

                    userName = newUser.UserName;

                    await _oAuthRepository.InsertAsync(new OAuth
                    {
                        Source   = OAuthType.Weibo.Value,
                        UniqueId = userInfo.UnionId,
                        UserName = userName
                    });
                }
            }

            var token = _authManager.AuthenticateUser(await _userRepository.GetByUserNameAsync(userName), true);

            if (oAuthType == OAuthType.Qq || oAuthType == OAuthType.Weibo)
            {
                return(Redirect(PageUtils.AddQueryString(request.RedirectUrl, $"token={token}")));
            }
            else
            {
                return(new GetRedirectResult
                {
                    RedirectUrl = request.RedirectUrl,
                    Token = token
                });
            }
        }