示例#1
0
        public void testProfile()
        {
            Console.WriteLine("请按任意键,开始发布……");
            Console.ReadLine();

            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            AccessToken x = new AccessToken();

            x.Token = accessToken;
            x.Uid   = openId;

            OAuthUserProfile obj = connect.GetUserProfile(x);

            Console.WriteLine("id=" + obj.Uid);
            Console.WriteLine("name=" + obj.Name);

            // 用户头像(小50×50像素)
            Console.WriteLine("profile_image_url=" + obj.PicUrlSmall);
            // 用户头像(大)
            Console.WriteLine("avatar_large=" + obj.PicUrlBig);

            Console.WriteLine("domain=" + obj.FriendlyUrl);

            Console.WriteLine("请按 Enter 键结束……");
            Console.ReadLine();
        }
示例#2
0
        // 测试之前,请先配置 QQWeiboConnect
        public void testAuth()
        {
            Console.WriteLine("请按任意键开始用户授权……");
            Console.ReadLine();

            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            Console.WriteLine("启动浏览器...");
            connect.CallbackUrl = "http://127.0.0.1/oauth/callback";
            Process.Start(connect.GetAuthorizationFullUrl());

            Console.Write("请拷贝浏览器地址栏code的值,粘贴到此处:");
            string code = Console.ReadLine();

            Console.WriteLine("授权的code=" + code);


            Console.WriteLine("开始获取access token……");

            // 必须同时保存 openId ,调用 API 时可以用到
            AccessToken result = OAuthClient.New().GetAccessToken(connect, code);

            Console.WriteLine("access token=" + result.Token);
            logger.Info("access token=" + result.Token);

            Console.WriteLine("请按 Enter 键结束……");
            Console.ReadLine();
        }
示例#3
0
        public virtual void Login()
        {
            if (ctx.viewer.IsLogin)
            {
                echoError("对不起,您已经登录");
                return;
            }

            // 1) 登录的第三方类型
            String connectType = ctx.Get("connectType");

            AuthConnect connect = AuthConnectFactory.GetConnect(connectType);

            if (connect == null)
            {
                echoError("连接类型不存在:" + connectType);
                return;
            }

            // 2) 根据类型,redirect到第三方授权。回调网址callback 是 ProcessLogin()
            ctx.web.SessionSet("__connectType", connect.GetType().FullName);
            ctx.web.SessionSet("__connectFrom", "login");

            redirectUrl(connect.GetAuthorizationFullUrl());
        }
示例#4
0
        public void testProfile()
        {
            // 如果报错 source paramter(appkey) is missing,很有可能是 access token 过期

            Console.WriteLine("请按任意键,开始发布……");
            Console.ReadLine();

            WeiboConnect connect = AuthConnectFactory.GetConnect(typeof(WeiboConnect).FullName) as WeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            AccessToken x = new AccessToken();

            x.Token = accessToken;
            x.Uid   = "3214151865";

            OAuthUserProfile obj = connect.GetUserProfile(x);

            Console.WriteLine("id=" + obj.Uid);
            Console.WriteLine("name=" + obj.Name);

            // 用户头像(小50×50像素)
            Console.WriteLine("profile_image_url=" + obj.PicUrlSmall);
            // 用户头像(大)
            Console.WriteLine("avatar_large=" + obj.PicUrlBig);

            Console.WriteLine("domain=" + obj.FriendlyUrl);

            Console.WriteLine("请按 Enter 键结束……");
            Console.ReadLine();
        }
示例#5
0
        public void testGetMyStatus()
        {
            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            List <JsonObject> list = OAuthClient.Init("http://open.t.qq.com/api/statuses/broadcast_timeline", accessToken, "GET")
                                     .AddParam(defaultParams(connect))
                                     .AddParam("pageflag", 0)
                                     .AddParam("pagetime", 0)
                                     .AddParam("reqnum", 20)
                                     .AddParam("lastid", 0)
                                     .AddParam("type", 3)
                                     .AddParam("contenttype", "0x80")
                                     .RunJson()
                                     .GetJson("data")
                                     .GetList <JsonObject>("info");

            foreach (JsonObject x in list)
            {
                String userName = x.Get("name");
                String blogBody = x.Get("text");

                Assert.IsNotNull(blogBody);
                Assert.IsNotNull(userName);

                Console.WriteLine("---------------------------------------------------------");
                Console.WriteLine("[[" + userName + "]]: " + blogBody);
            }
        }
示例#6
0
        public override void After(object returnValue, MethodInfo method, object[] args, object target)
        {
            Microblog blog = args[0] as Microblog;

            if (blog == null || blog.ParentId > 0)
            {
                return;
            }
            if (blog.User == null || blog.User.Id <= 0)
            {
                return;
            }

            UserConnect uc = connectService.GetConnectInfo(blog.User.Id, typeof(WeiboConnect).FullName);

            // 1. 检查:用户是否绑定,是否允许同步
            if (uc == null)
            {
                return;             // 绑定
            }
            if (uc.NoSync == 1)
            {
                logger.Info("取消同步,因为用户明确禁止");
                return;
            }

            // 2. 同步
            WeiboConnect connect = AuthConnectFactory.GetConnect(typeof(WeiboConnect).FullName) as WeiboConnect;

            connect.Publish(uc.AccessToken, _blogContent, getPicDiskPath(blog.Pic));
        }
示例#7
0
        public void testPublish()
        {
            WeiboConnect connect   = AuthConnectFactory.GetConnect(typeof(WeiboConnect).FullName) as WeiboConnect;
            String       content   = "这是测试的微博内容" + DateTime.Now;
            JsonObject   jsonValue = connect.PublishPost(accessToken, content);

            Assert.AreEqual(content, jsonValue.Get("text"));
        }
示例#8
0
文件: QQTest.cs 项目: zuhuizou/wojilu
        // 测试之前,请先配置 QQConnect
        public void testAuth()
        {
            Console.WriteLine("请按任意键开始用户授权……");
            Console.ReadLine();

            QQConnect connect = AuthConnectFactory.GetConnect(typeof(QQConnect).FullName) as QQConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            Console.WriteLine("启动浏览器...");
            connect.CallbackUrl = "http://www.wojilu.com";
            Process.Start(connect.GetAuthorizationFullUrl());

            Console.Write("请拷贝浏览器地址栏code的值,粘贴到此处:");
            string code = Console.ReadLine();

            Console.WriteLine("授权的code=" + code);


            Console.WriteLine("开始获取access token……");

            AccessToken result = OAuthClient.New().GetAccessToken(connect, code, connect.HttpMethod_AccessToken);

            Console.WriteLine("access token=" + result.Token);
            Console.WriteLine("uid=" + result.Uid);


            // 获取openId
            String openIdUrl = "https://graph.qq.com/oauth2.0/me?access_token=" + result.Token;
            String response  = wojilu.Net.PageLoader.Download(openIdUrl);

            Console.WriteLine("获取openid返回结果=" + response);

            String     strJson   = strUtil.TrimStart(response.Trim().TrimEnd(';'), "callback(").TrimEnd(')');
            JsonObject obj       = Json.ParseJson(strJson);
            String     openIdMsg = "openid=" + obj.Get("openid");

            Console.WriteLine(openIdMsg);
            logger.Info(openIdMsg);

            //---------------------------------------------------------------------

            Console.WriteLine("请按 Enter 键结束……");
            Console.ReadLine();
        }
示例#9
0
        public void testUploadPic()
        {
            WeiboConnect connect   = AuthConnectFactory.GetConnect(typeof(WeiboConnect).FullName) as WeiboConnect;
            String       content   = "这是测试的微博内容" + DateTime.Now;
            JsonObject   jsonValue = connect.PublishPic(accessToken, content, "c:\\testpic.jpg");

            Assert.AreEqual(content, jsonValue.Get("text"));

            //-------------------------------
            //Console.WriteLine( "获取最新的微博..." );
            //items = new Dictionary<String, String>();
            //items.Add( "id", getFirstId() );

            //result = OAuth.GetApi( accessToken, "https://api.weibo.com/2/statuses/show.json", items );
            //jsonValue = Json.DeserializeJson( result );
            //Assert.AreEqual( content, jsonValue.Get( "text" ) );
        }
示例#10
0
        public override void After(object returnValue, MethodInfo method, object[] args, object target)
        {
            Microblog blog = args[0] as Microblog;

            if (blog == null || blog.ParentId > 0)
            {
                return;
            }
            if (blog.User == null || blog.User.Id <= 0)
            {
                return;
            }

            if (QQWeiboJobHelper.IsQQWeiboSync(blog.Id))
            {
                return;                                            // 是否已经同步过
            }
            UserConnect uc = ObjectContext.Create <UserConnectService>()
                             .GetConnectInfo(blog.User.Id, typeof(QQWeiboConnect).FullName);

            // 1. 检查:用户是否绑定,是否允许同步
            if (uc == null)
            {
                return;             // 绑定
            }
            if (uc.NoSync == 1)
            {
                logger.Info("取消同步,因为用户明确禁止");
                return;
            }

            // 2. 获取 access token
            AccessToken x = new AccessToken();

            x.Token = uc.AccessToken;
            x.Uid   = uc.Uid;

            // 3. 同步
            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            connect.Publish(x, _blogContent, getPicDiskPath(blog.Pic));

            // 设置已经同步标记
            QQWeiboJobHelper.AddQQWeiboSyncItem(blog.Id);
        }
示例#11
0
        public virtual void Callback()
        {
            string code = ctx.Get("code");

            if (strUtil.IsNullOrEmpty(code))
            {
                echoError("code无效");
                return;
            }

            Object connectType = ctx.web.SessionGet("__connectType");

            if (connectType == null)
            {
                echoError("无效的 connect type");
                return;
            }

            AuthConnect connect = AuthConnectFactory.GetConnect(connectType.ToString());

            if (connect == null)
            {
                echoError("此连接类型不存在:" + connectType);
                return;
            }

            Object connectFrom = ctx.web.SessionGet("__connectFrom");

            if (connectFrom == null)
            {
                echoError("进入本页方式错误");
            }
            else if (connectFrom.ToString() == "bind")
            {
                processBind(connect, code);
            }
            else if (connectFrom.ToString() == "login")
            {
                processLogin(connect, code);
            }
            else
            {
                echoError("进入本页方式错误");
            }
        }
示例#12
0
文件: QQTest.cs 项目: zuhuizou/wojilu
        public void testUploadPic()
        {
            QQConnect connect = AuthConnectFactory.GetConnect(typeof(QQConnect).FullName) as QQConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            AccessToken x = new AccessToken {
                Token = accessToken
            };
            String content = "这是来自QQ互联api的微博内容" + DateTime.Now;

            JsonObject jsonValue = connect.PublishPic(x, content, "c:\\testpic.jpg");

            Assert.AreEqual("ok", jsonValue.Get("msg"));
        }
示例#13
0
        public void testUploadPic()
        {
            Console.WriteLine("请按任意键开始……");
            Console.ReadLine();

            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            AccessToken x = new AccessToken {
                Token = accessToken, Uid = openId
            };
            JsonObject jsonValue = connect.PublishPic(x, "这是测试的微博内容" + DateTime.Now, "c:\\testpic.jpg");

            Assert.AreEqual("ok", jsonValue["msg"].ToString());
        }
示例#14
0
        public void testLoadConfig()
        {
            List <AuthConnectConfig> cfgList = cdb.findAll <AuthConnectConfig>();

            Assert.IsTrue(cfgList.Count > 0);

            Dictionary <string, AuthConnect> connects = AuthConnectFactory.GetAllConnects();

            Assert.IsNotNull(connects);
            Assert.IsTrue(connects.Count > 0);

            String      qqConnect   = typeof(QQConnect).FullName;
            AuthConnect authConnect = null;

            connects.TryGetValue(qqConnect, out authConnect);

            Assert.IsNotNull(authConnect);

            AuthConnect objConnect = AuthConnectFactory.GetConnect(qqConnect);

            Assert.IsNotNull(objConnect);
        }
示例#15
0
        public void testDelete()
        {
            Console.WriteLine("请按任意键开始……");
            Console.ReadLine();

            // 1)现发布一条微博
            QQWeiboConnect connect = AuthConnectFactory.GetConnect(typeof(QQWeiboConnect).FullName) as QQWeiboConnect;

            if (connect == null)
            {
                throw new Exception("尚未配置");
            }

            JsonObject jsonValue = OAuthClient.Init("https://open.t.qq.com/api/t/add", accessToken, "POST")
                                   .AddParam(defaultParams(connect))
                                   .AddParam("content", "这是测试的微博内容" + DateTime.Now)
                                   .RunJson();

            Assert.AreEqual("ok", jsonValue["msg"]);

            // 2)获取此微博的id
            JsonObject data      = jsonValue.GetJson("data");
            long       currentId = data.Get <long>("id");

            Assert.IsTrue(currentId > 0);

            // 3)删除刚刚发布的微博
            Console.WriteLine("开始删除……" + currentId);

            JsonObject obj = OAuthClient.Init("https://open.t.qq.com/api/t/del", accessToken, "POST")
                             .AddParam(defaultParams(connect))
                             .AddParam("id", currentId)
                             .RunJson();

            Assert.AreEqual("ok", obj.Get("msg"));
        }
示例#16
0
        public virtual void Bind()
        {
            String connectType = ctx.Get("connectType");

            AuthConnect connect = AuthConnectFactory.GetConnect(connectType);

            if (connect == null)
            {
                echoError("此连接类型不存在:" + connectType);
                return;
            }

            // 检查是否绑定过
            if (connectService.HasBind(ctx.viewer.Id, connect.GetType().FullName))
            {
                echoError("对不起,已经绑定");
                return;
            }

            ctx.web.SessionSet("__connectType", connect.GetType().FullName);
            ctx.web.SessionSet("__connectFrom", "bind");

            redirectUrl(connect.GetAuthorizationFullUrl());
        }
示例#17
0
        public virtual void SaveFirstLogin()
        {
            if (ctx.viewer.IsLogin)
            {
                echoError("对不起,您已经登录");
                return;
            }

            Object connectType = ctx.web.SessionGet("__connectType");

            if (connectType == null)
            {
                echoError("无效的 connect type");
                return;
            }

            AuthConnect connect = AuthConnectFactory.GetConnect(connectType.ToString());

            if (connect == null)
            {
                echoError("此连接类型不存在:" + connectType);
                return;
            }

            AccessToken accessToken = getAccessToken();

            OAuthUserProfile userProfile = connect.GetUserProfile(accessToken);

            if (userProfile == null)
            {
                echoError("无法获取正常 user profile");
                return;
            }

            accessToken.Name = userProfile.Name;

            // 注册用户
            User user = new User();

            user.Name = ctx.Post("userName");
            user.Url  = ctx.Post("userUrl");

            Result result = userService.RegisterNoPwd(user);

            if (result.HasErrors)
            {
                echoError(result);
                return;
            }

            result = AvatarUploader.SaveRemote(userProfile.PicUrlBig, user.Id);
            if (result.IsValid)
            {
                user.Pic = result.Info.ToString();
                user.update();
            }
            else
            {
                echoError(result);
                return;
            }

            // 是否开启空间
            RegHelper.CheckUserSpace(user, ctx);

            // 绑定用户
            Result saveResult = connectService.Create(user, connect.GetType().FullName, accessToken);

            if (saveResult.IsValid)
            {
                UserConnect userConnect = saveResult.Info as UserConnect;
                loginService.Login(user, userConnect.Id, LoginTime.OneWeek, ctx.Ip, ctx);   // 登录
                echoRedirect("登录成功", "/");
            }
            else
            {
                echoError(saveResult);
            }
        }