http://www.pp6.cn/Index.aspx

http://www.pp6.cn/Login.aspx

网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别进行本网站的自动注册。

自行到QQ,人人网和新浪微博的开发平台申请并获得对应的app

qq:

sina:

人人:

在做人人网的连接时审核了3次才通过:

引入qq的js

<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="你申请的id"  charset="utf-8"></script>
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" charset="utf-8" data-callback="true"></script>

不需要按照官网的做法,登录的做法也不过是跳转的一个链接而已,改为自己相应的参数就可以:

<tr>
<td align="right" style="font-size:12px;">其他方式:</td>
<td class="loginap">
<% string href1 = "http://openapi.qzone.qq.com/oauth/show?which=ConfirmPage&display=pc&client_id=你申请的id&redirect_uri=http://www.pp6.cn/Login.aspx?type=qq_true_" + url + "&response_type=token&scope=all";
string href2 = "http://graph.renren.com/oauth/grant?client_id=你申请的id&redirect_uri=http://www.pp6.cn/Login.aspx?type=rr_true_" + url.Replace("?","%3F") + "&response_type=code&display=page&secure=true&origin=00000";
string href3 = "https://api.weibo.com/oauth2/authorize?client_id=你申请的id&redirect_uri=http://www.pp6.cn/Login.aspx?type=sina_true_" + url + "&response_type=code&state=2";
%>
<a href="<%=href1 %>" class="qqicon" title="QQ登录"></a>
<a href="<%=href2 %>" class="rricon" title="人人登录"></a>
<a href="<%=href3 %>" class="sinaicon" title="新浪登录"></a>
</td>
</tr>

获取信息并注册:

    <script type="text/javascript">
var code = "<%=code %>";
var error = "<%=error %>";
var type = "<%=type %>";
if (type == "qq") {
//从页面收集OpenAPI必要的参数。get_user_info不需要输入参数,因此paras中没有参数
var paras = {};
//用JS SDK调用OpenAPI
QC.api("get_user_info", paras)
//指定接口访问成功的接收函数,s为成功返回Response对象
.success(function (s) {
//成功回调,通过s.data获取OpenAPI的返回数据
QC.Login.getMe(function (openId, accessToken) {
qq_Login(s, openId, accessToken);
})
}).complete(function (c) {
if (c.ret == 0) {
if (QC.Login.check()) {
}
}
});
}
if (code != "" && error != "error") {
if (type == "rr" || type == "sina") {
var id = "<%=id %>";
var name = "<%=name %>";
var imageurl = "<%=imageurl %>";
var sex = "<%=sex %>";
rr_Login(id, name, sex, imageurl);
}
} function qq_Login(s, openId, accessToken) {
$(function () {
$.ajax({
contentType: "application/json",
url: "/WS/vinson.asmx/LoginQQ",
data: "{OpenID:'" + openId + "',NickName:'" + s.data.nickname + "',gender:'" + s.data.gender + "',figureurl_qq_1:'" + s.data.figureurl_qq_1 + "',password:'" + randomPassword(8) + "'}",
type: "POST",
dataType: "json",
async: false, // 设为同步请求,执行完此项后再继续执行后面的语句
success: function (json) {
json = eval("(" + json.d + ")");
$("#qqLoginBtn").hide();
QC.Login.signOut(); //马上注销qq的登录,改而使用本网站的账号系统
window.parent.location.href = "<%=url %>";
},
error: function (err, ex) {
alert(err.responseText);
}
});
});
} function rr_Login(id, name, sex, imageurl) {
$(function () {
$.ajax({
contentType: "application/json",
url: "/WS/vinson.asmx/LoginQQ",
data: "{OpenID:'" + id + "',NickName:'" + name + "',gender:'" + sex + "',figureurl_qq_1:'" + imageurl + "',password:'" + randomPassword(8) + "'}",
type: "POST",
dataType: "json",
async: false, // 设为同步请求,执行完此项后再继续执行后面的语句
success: function (json) {
json = eval("(" + json.d + ")");
window.parent.location.href = "<%=url %>";
},
error: function (err, ex) {
alert(err.responseText);
}
});
});
} function delCookie(name){
//为了删除指定名称的cookie,可以将其过期时间设定为一个过去的时间
var date = new Date();
date.setTime(date.getTime() - 10000);
document.cookie = name + "=a; expires=" + date.toGMTString();
}
</script>

密码就随机生成好了:

      function randomPassword(length, special) {
var iteration = 0;
var password = "";
var randomNumber;
if (special == undefined) {
var special = false;
}
while (iteration < length) {
randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33;
if (!special) {
if ((randomNumber >= 33) && (randomNumber <= 47)) { continue; }
if ((randomNumber >= 58) && (randomNumber <= 64)) { continue; }
if ((randomNumber >= 91) && (randomNumber <= 96)) { continue; }
if ((randomNumber >= 123) && (randomNumber <= 126)) { continue; }
}
iteration++;
password += String.fromCharCode(randomNumber);
}
return password;
}

人人网和新浪微博的登录信息获取,不像qq那样直接使用js获取,而是使用第三方的sdk获取的:

        protected string url = GameRequest.GetQueryString("url");
protected string isShow = GameRequest.GetQueryString("isShow");
protected string type = GameRequest.GetQueryString("type");
protected string code = GameRequest.GetQueryString("code");
protected string access_token = GameRequest.GetQueryString("#access_token");
protected string id = "";
protected string name = "";
protected string imageurl = "";
protected string sex = "";
protected string error = ""; protected void Page_Load(object sender, EventArgs e)
{
Themes.Standard.Common_Header sHeader = (Themes.Standard.Common_Header)this.FindControl("sHeader");
sHeader.title = "会员中心";
if (url == "" || url==null) url = "/Member/MIndex.aspx";
if (isShow == "" || isShow == null) isShow = "false";
if (code == "" || code == null) code = "";
if (access_token == "" || access_token == null) access_token = ""; string[] values = type.Split('_');
if (values.Length == )
{
type = values[];
isShow = values[];
url = values[];
}
if (code != "")
{
if (type == "rr")
{
getInfoFromRenr();
}
if (type == "sina")
{
getInfoFromSina();
}
}
else
{
isShow = "false";
}
} /// <summary>
/// 获取人人网登录的用户信息
/// </summary>
private void getInfoFromRenr()
{
try
{
APIValidation av = new APIValidation();
List<APIParameter> parameters = new List<APIParameter>() {
new APIParameter("userId", av.GetUserId())
};
RennClient rr = new RennClient();
string responseData = rr.Request("GET", "/v2/user/get", parameters);
RennUserResponse resp = new JavaScriptSerializer().Deserialize<RennUserResponse>(responseData);
id = resp.response.id;
name = resp.response.name;
imageurl = resp.response.avatar[].url;
sex = resp.response.basicInformation.sex == "MALE" ? "男" : "女";
}
catch
{
error = "error";
isShow = "false";
Show("未审核的应用使用人数超过限制,拍拍乐的人人网连接正在测试中");
}
} /// <summary>
/// 获取新浪微博登录的用户信息
/// </summary>
private void getInfoFromSina()
{
try
{
string AppKey = "你申请的AppKey";
string AppSecret = "你申请的AppSecret";
string CallbackUrl = "http://www.pp6.cn"; var oauth = new OAuth(AppKey, AppSecret, CallbackUrl);
/*
* 正常的流程或Web流程:
* 1. 获取授权地址
* 2. 访问授权地址
* 3. 授权成功后自动跳转至callback指定的网站,并获得code
* 4. 通过code换取access token
*/
if (!string.IsNullOrEmpty(code))
{
var accessToken = oauth.GetAccessTokenByAuthorizationCode(code).Token;//注意:callback指定的url必须一致 oauth = new OAuth(AppKey, AppSecret, accessToken, "");
var sina = new Client(oauth); var userInfo = sina.API.Users.Show(sina.API.Account.GetUID());
id = userInfo.ID;
name = userInfo.Name;
imageurl = userInfo.ProfileImageUrl;
sex = userInfo.Gender == "MALE" ? "男" : "女"; }
}
catch
{
error = "error";
isShow = "false";
Show("未审核的应用使用人数超过限制,拍拍乐的新浪网连接正在测试中");
}
}

回调页有参数怎么办?连续多个参数可能无法获取,所以这里把参数合并到一个参数里面:

"http://www.pp6.cn/Login.aspx?type=sina_true_" + url; 

再在后台把他们分隔开来:

            string[] values = type.Split('_');
if (values.Length == )
{
type = values[];
isShow = values[];
url = values[];
}

这里的参数type表示是使用何种方式登录,isShow指示是否弹出遮罩层,url才是我们真正想跳转的链接,至于redirect_uri是我们获取信息的代码功能页面:

redirect_uri=http://www.pp6.cn/Login.aspx

可以把AppKey写到web.config文件里面

第三方登录 QQ登录 人人网登录 新浪微博登录的更多相关文章

  1. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...

  2. Android 实现QQ、微信、新浪微博和百度第三方登录

    前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppK ...

  3. qq登录,新浪微博登录 ,接口开发

    给linux命令在线中文手册加了,qq登录和新浪微博登录,认证用的是auth2.0,并且用了js api和php api相结合的方式来做的.个人觉得这种方式,兼顾安全和人性化.以前写过一篇关于申请的博 ...

  4. CAS Server集成QQ登录、新浪微博登录源码及配置文件

    转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1446 CAS Server集成QQ第三方登录,CAS Server集成新浪微博第三方登录以 ...

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

    项目地址 :  https://github.com/zhonggaorong/QQLoginDemo/tree/master 最新版本的qq登录实现步骤实现: 1. 首先,你需要去向腾讯申请账号. ...

  6. 安卓Android第三方登录-QQ登录

    要实现QQ第三方登录,其实只需要一个封装类:QQLoginManager 几乎 三行代码 就实现QQ登录功能 这里先给出Github开源项目地址,项目下有详细的使用说明   下面就开始详细说一说怎么实 ...

  7. qq登录,新浪微博登录接口申请过程中遇到的问题

    接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...

  8. 用QQ帐号和新浪微博帐号登录网站

    用QQ帐号登录: 先去http://connect.qq.com/intro/login/申请   然后点击验证   将下面代码复制到网站首页中,放进去以后再点击验证就能得到ID和key 第一步:配置 ...

  9. 对QQ、微信等第三方登录的几个思考

    转自:http://www.jianshu.com/p/7f282dfc16fc 今天聊聊注册.登录环节中很常见的第三方登录,如QQ.微信.支付宝.新浪微博等.虽然这些产品的开放平台都提供了标准的接入 ...

随机推荐

  1. android学习笔记31——ADB命令

    使用Adb shell command直接送key event給Androidadb shell input keyevent 7 # for key '0'adb shell input keyev ...

  2. C#:基于WMI查询USB设备

    来源:http://blog.csdn.net/jhqin/article/details/6734673 /* ------------------------------------------- ...

  3. Tomcat无法启动:org.apache.catalina.LifecycleException: Failed to start component 问题解决

    问题如下:需要使用到数据库mysql,于是将mysql-connector-java-5.1.30-bin.jar的数据库驱动复制到WEE-INF/lib目录下.点击运行,但是服务器无法启动. 控制台 ...

  4. C语言每日一题之No.6

    人总要战胜内心的懦弱的,我不能一直这么缩在里边.终究向自己发出了挑战,还是会伤心的时候,发愣的时候.如果可以,我也希望像盗梦空间的女主一直沉在两个人的梦里永远不要醒来.可是,我们谁又能抗拒时间呢?这雨 ...

  5. Linux LVM简明教程

    逻辑卷管理LVM是一个多才多艺的硬盘系统工具.无论在Linux或者其他类似的系统,都是非常的好用.传统分区使用固定大小分区,重新调整大小十分麻烦.但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物 ...

  6. 【原】sql 将某列拼成一个字符串

    SQL Server中,写存储过程,时常会碰到这样一个需求:从某个表中取某一列,然后需要将这一列数据以某种形式拼成一个字符串,以供后面使用,下面这种方法能够实现此需求. --取说明书模块枚举,结果格式 ...

  7. IIS环境下如何批量添加、修改、删除绑定的域名

    IIS环境下如何批量添加和修改所绑定域名 1.关闭IISADMIN服务和W3SVC服务,可以从服务里面关闭,也可以直接执行命令:net stop iisadmin /y: 2.打开“C:\WINDOW ...

  8. 在JavaScript里嵌入大量字符串常量的方法

    [转]在JavaScript文件里嵌入大量字符串常量是经常遇到的事.有时为了省事,就把一些界面的HTML和CSS直接写在JS文件里.数量少还好,多的话就密密麻麻的一坨文字,讲究美观的文艺青年们,会用大 ...

  9. CLR via C#笔记

    第一部分 CLR基础 CLR和JIT “运行时”如何解析类型引用 第二部分 设计类型 使用C#的is和as操作符来转型 运行时的相互联系 基元类型.引用类型和值类型 值类型的装箱和拆箱 哈希码 dyn ...

  10. bug_ _fragment的1

    =========  2   fragment小结 ???? ======== 1     fragment:java.lang.IllegalStateException: Can not perf ...