第三方登录(QQ,微博,支付宝)

最近公司需要做一个第三方登录的功能,之前我用JS的SDK玩过。开始的时候,觉得挺简单的,不过本来就简单。

由于DEMO我后面加入QQ的,导致不兼容,出现weibo能登录,QQ的报错,具体不兼容的是Newtonsoft.Json。

Demo搞定了。觉得有点乱,重新把demo里面的东西,重新写了一个解决方案。

准备东西:

1.首先到需要网站上申请AppKey和AppSecret

QQ:http://connect.qq.com/(认证网站)

Sina:http://open.weibo.com/(简单)

AliPay:https://b.alipay.com/order/productDetail.htm?productId=2013052704023441&tabId=4#ps-tabinfo-hash(要签约)

2.设置回调地址

3.在web.config配置对应的key和AppSecret再加回调地址即可。

在这里,很感谢@张善友 提供的QQ SDK,难道疼讯就没有net开发工程师嘛。

这是他的博客园:http://www.cnblogs.com/shanyou/archive/2012/02/05/2338797.html

1.QQ

源码下载地址(由张善友提供):

http://opensns.codeplex.com/

1.1在这里强烈建议用Nuget来获取,PM> Install-Package QConnectSDK

更新后会有这两个DLL出现在引用里面,下图:

1.2目前我使用的版本:

QConnectSDK 1.1.0.0

RestSharp 104.1.0.0

1.3Controllers

 1         /// <summary>
 2         /// QQ登录
 3         /// </summary>
 4         /// <returns>跳转URL</returns>
 5         public ActionResult QzoneLogin()
 6         {
 7             var context = new QzoneContext();
 8             string state = Guid.NewGuid().ToString().Replace("-", "");
 9             string scope = "get_user_info";
10             var authenticationUrl = context.GetAuthorizationUrl(state, scope);
11             Session["requeststate"] = state;
12             return new RedirectResult(authenticationUrl);
13         }
14
15         /// <summary>
16         /// QQ回调地址
17         /// </summary>
18         /// <param name="code">登录验证CODE</param>
19         /// <returns>返回主页</returns>
20         public ActionResult QzoneCallback(String code)
21         {
22             if (!string.IsNullOrEmpty(code))
23             {
24                 QOpenClient qzone = null;
25                 QConnectSDK.Models.User currentUser = null;
26                 string state = Session["requeststate"].ToString();
27                 try
28                 {
29                     qzone = new QOpenClient(code, state);
30                 }
31                 catch (Exception ex)
32                 {
33
34                     throw;
35                 }
36                 currentUser = qzone.GetCurrentUser();
37                 string nickName = currentUser.Nickname;
38                 string openId = qzone.OAuthToken.OpenId;
39                 string accessToken = qzone.OAuthToken.AccessToken;
40
41                 Session["uid"] = openId;
42                 Session["nickName"] = nickName;
43                 Session["Figureurl"] = currentUser.Figureurl;
44
45                 return RedirectToAction("Index");
46             }
47             return RedirectToAction("Index");
48         }
49
50         /// <summary>
51         /// 获取用户信息
52         /// </summary>
53         /// <returns></returns>
54         public ActionResult GetQQState()
55         {
56             var json = new JObject();
57             if (Session["Figureurl"] != null)
58             {
59
60                 json["Figureurl"] = Session["Figureurl"].ToString();
61
62             }
63             return Content(json.ToString(Formatting.None), "application/json");
64         }

2.Sina

源码(由林选臣提供):

http://weibosdk.codeplex.com/

直接引用,暂时没有找到Nuget地址

直接引用这2个DLL即可。

 1  /// <summary>
 2         /// 封装一个方法来初始化OpenAuth客户端
 3         /// </summary>
 4         /// <returns></returns>
 5         private SinaWeiboClient GetOpenAuthClient()
 6         {
 7             var accessToken = Session["access_token"] == null ? string.Empty : (string)Session["access_token"];
 8             var uid = Request.Cookies["uid"] == null ? string.Empty : Request.Cookies["uid"].Value;
 9
10             var settings = ConfigurationManager.AppSettings;
11             var client = new SinaWeiboClient(settings["Sina_AppKey"], settings["Sina_AppSecret"], settings["Sina_CallbackUrl"], accessToken, uid);
12
13             return client;
14         }
15         /// <summary>
16         /// 获取用户信息
17         /// </summary>
18         /// <returns></returns>
19         public ActionResult GetUserState()
20         {
21             var client = GetOpenAuthClient();
22
23             if (!client.IsAuthorized)
24             {
25                 return Json(new
26                 {
27                     authorized = false,
28                     url = client.GetAuthorizationUrl()
29                 });
30             }
31
32             // 调用获取获取用户信息api
33             // 参考:http://open.weibo.com/wiki/2/users/show
34             var response = client.HttpGet("users/show.json", new
35             {
36                 uid = client.UID
37             });
38
39             if (response.IsSuccessStatusCode)
40             {
41                 var json = new JObject();
42                 json["authorized"] = true;
43                 json["data"] = JObject.Parse(response.Content.ReadAsStringAsync().Result);
44                 return Content(json.ToString(Formatting.None), "application/json");
45             }
46             else
47             {
48                 var json = new JObject();
49                 json["authorized"] = false;
50                 json["data"] = JObject.Parse(response.Content.ReadAsStringAsync().Result);
51
52                 json["authorized"] = true;
53                 return Content(json.ToString(Formatting.None), "application/json");
54             }
55         }
56
57         /// <summary>
58         /// 授权认证
59         /// </summary>
60         /// <param name="code">新浪返回的code</param>
61         /// <returns></returns>
62         public ActionResult SinaAuthorized(string code)
63         {
64             if (string.IsNullOrEmpty(code))
65             {
66                 return RedirectToAction("Index");
67             }
68             var client = GetOpenAuthClient();
69
70             client.GetAccessTokenByCode(code);
71
72             if (client.IsAuthorized)
73             {
74                 //用session记录access token
75                 Session["access_token"] = client.AccessToken;
76                 //用cookie记录uid
77                 Response.AppendCookie(new HttpCookie("uid", client.UID) { Expires = DateTime.Now.AddDays(7) });
78                 return RedirectToAction("Index");
79             }
80             else
81             {
82                 return RedirectToAction("Index");
83             }
84
85         }

3.AliPay(还在申请接口中,待完善)

时间: 2024-10-10 22:47:27

第三方登录(QQ,微博,支付宝)的相关文章

第三方登录qq、微博

第三方登录: 用的友盟 得下载好sdk包: 首先登录友盟开发者服务平台,获得key值(得先创建一个应用,在管理里面可以看见key值,一个项目工程对应一个应用,也就是对应一个key值,如果说这个项目里,有qq.和微博两种登录方式,只要同一个应用,同一个key值就行了,因为这两个同属于同一个项目工程程序),(然后打开文档中心-->点击社会化分享-->点击小机器人.-------这是参照人家的文档一步步粘贴的): 然后打开下载好的SDK集成工具文件夹:(存放路径)D:\zhengyanyan\学习有

iOS 第三方登录(QQ 微信 新浪微博)

一.QQ登录 1.登录腾讯开放平台,创建一个应用,获取APP_KEY和APP_ID 2.下载对应的SDK 3.下载 iOS SDK环境搭建 1.导入SDK,配置工程 1.下载SDK到本地后,将SDK拖入工程中 2.添加所需的依赖库 Security.framework SystemConfiguration.framework CoreGraphics.Framework CoreTelephony.framework libiconv.tdb libsqlite3.tdb libstdc++.

iOS开发之第三方登录QQ -- 史上最全最新第三方登录QQ方式实现

项目地址 :  https://github.com/zhonggaorong/QQLoginDemo/tree/master 最新版本的qq登录实现步骤实现: 1. 首先,你需要去向腾讯申请账号. 地址:点击打开链接 2. 下载最新的SDK   地址: SDK下载 SDK内容如下: 1. doc: 为说明文档, 方法参数说明. 2.sample 这个是简单的demo 3. TencentOpenApi_IOS_Bundle.bundle   资源文件包 4. TencentOpenApi.fr

网页应用接入第三方登录QQ登录,微信登录

注意:目前,很多应用都有安卓版,iOS版,还增加了网页版.这时,特别要注意,第三方数据的统一.所说的统一指的是用户在腾讯里的标识,一般原生应用会使用openid作为用户的唯一标识.这样做是错的,如果你要实现安卓,IOS与网页版数据统一就不能这样做.因为安卓,IOS与网页版的openid不一样!所以在开发前就要明确以后是否开发网页版和ios,安卓版. 1.如果开发这三种应用,而且要求数据统一,那么就该用unionid来作为用户唯一标识. 那么什么是unionid? 该接口用来获取用户的基本信息,开

ThinkPHP第三方登录-QQ登录

参考:思梦教育 1.QQ互联(链接地址:https://connect.qq.com/index.html),进行开发者认证(未认证的情况下),有公司和个人两种认证方式,个人开发者选择个人认证就好,准备好身份证电子版.认证界面如图一,认证不做赘述. (图一) 2.认证通过界面如图二,认证完,我们将创建应用如图三,选择创建网站应用,填写好个人信息如图四. (图二) (图三) (图四) 3.应用创建好后,会有大约2天的认证时间,认证通过的情况下,可在应用管理下查看.成功创建的应用如图五 (图五) 4

shareSDK第三方登录,微博可以跳转,微信不能跳转。

微信登陆不了:1.测试没有打包(用keystroke打包apk)2.微信平台上的签名,也就是MD5码不一致(微信开放平台填写的是MD5,ps: 填写到微信开放平台 然后把MD5中的 大写字母改成小写字母 冒号去掉)具体的可以参考帖子检查签名http://bbs.mob.com/thread-22813-1-1.html3.没有申请登陆权限4.应用没有审核通过5.包名跟开放平台上面的不一致6:没有在在mob.com申请key!7:修改签名会在微信客户端有缓存的,要卸载重新安装微信客户端重新安装,微

第三方登录(QQ登录)开发流程详解

原文  http://www.cnblogs.com/it-cen/p/4338202.html 主题 OpenID 近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网( http://wiki.connect.qq.com )查看,我这里就简单地进行描述,主要是分析代码的实现过程. 我用的是CI框架(MVC模式),模板引擎用的是smarty. 下图为整个接入流程: 一.准备工作 接

(转)第三方登录(QQ登录)开发流程详解

近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网(http://wiki.connect.qq.com)查看,我这里就简单地进行描述,主要是分析代码的实现过程. 我用的是CI框架(MVC模式),模板引擎用的是smarty. 下图为整个接入流程: 一.准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权.

第三方登录(QQ登录)开发流程

近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑做一个详细的讲解. 对于整个流程的详细文档可以到QQ互联官网(http://wiki.connect.qq.com)查看,我这里就简单地进行描述,主要是分析代码的实现过程. 我用的是CI框架(MVC模式),模板引擎用的是smarty. 下图为整个接入流程: 一.准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权.