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(); }
// 测试之前,请先配置 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(); }
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()); }
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(); }
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); } }
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)); }
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")); }
// 测试之前,请先配置 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(); }
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" ) ); }
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); }
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("进入本页方式错误"); } }
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")); }
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()); }
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); }
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")); }
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()); }
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); } }