QQ联合登陆:
1. 注册QQ互联开发者并注册项目
这里主要要注意注册项目时的网站地址和回调地址。网站地址不支持三级目录,如“www.abc.com/abc/test”是不支持的,最多只能到“www.abc.com/abc”这一级。回调地址为当用户授权登录后的跳转地址,一般根据项目情况自己控制。填写完成后会有验证操作,按照网址要求在header中添加代码即可,注意生成的验证码有所绑定,不要copy错了。注册项目成功后会生成APP ID 和APP KEY,这两个值是与QQ互联交互的标识。
2. 选择合适的QQ登录logo,放在网站登录的合适地方,此处用户可以自己选择,但需要给该logo绑定ID,代码如下:
<div id="qqLoginBtn"><imgsrc='Public/images/QQconnect.png'></div>
3. 引入QQ集成好的JS SDK包,可以直接实现QQ登录,代码如下:
<script type="text/javascript"src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js"data-appid="101069286"data-redirecturi="http://stone2gold.cn/testLogin"charset="utf-8"></script>
注意此处的data-appid就是注册项目成功后获得的APP ID,data-redirecturi即回调地址。
具体使用说明见http://wiki.connect.qq.com/js_sdk使用说明
4. 给该ID绑定click事件,代码如下:
<script type="text/javascript">
QC.Login({
btnId:"qqLoginBtn" //插入按钮的节点id
});
var paras= {};
5. 调用JS SDK 的OpenAPI,可以获取用户信息,具体获取字段可以参考互联登陆SDK说明
QC.api("get_user_info",paras)
//指定接口访问成功的接收函数,s为成功返回Response对象
.success(function(s){
//成功回调,通过s.data获取OpenAPI的返回数据,可以在这里添加自定义动作
alert("获取用户信息成功!当前用户昵称为:"+s.data.nickname);
})
//指定接口访问失败的接收函数,f为失败返回Response对象
.error(function(f){
//失败回调
alert("获取用户信息失败!");
})
//指定接口完成请求后的接收函数,c为完成请求返回Response对象
.complete(function(c){
//完成请求回调
alert("获取用户信息完成!");
});
</ script >新浪联合登陆:
与QQ第三方登录类似,流程都是采用Oauth方式,也有集成开发包,主要是微博的项目认证必须要求一级域名,即必须在www.abc.com的地址进行互联,不允许再有子目录,首先也是注册认证,然后绑定相应的图标,最后为该图标绑定登陆事件及登陆后操作,具体代码如下
$("#wb_connect_btn").live("click",function(){
WB2_Login();
});
function WB2_Login(){
WB2.login(function(){
/***授权成功后回调***/
getWbUserData(function(o){
/***o是/users/show.json接口返回的json对象***/
var paras={};
paras.openid=o.idstr;
// paras.accesstoken=accessToken;
paras.nickName=o.screen_name;
paras.userPic=o.profile_image_url;
Connectlogin(paras,CONSTANT.CONNECTLOGIN.WEIBOLOGIN);
});
});
}
function getWbUserData(callback) {
WB2.anyWhere(function (W) {
/***获取授权用户id***/
W.parseCMD("/account/get_uid.json", function (sResult, bStatus) {
if (!!bStatus) {
/**请求uid成功后调用以获取用户数据**/
getData(W, sResult);
}else{
/*** 这里只是简单处理出错***/
ui.failed("授权失败或错误");
}
}, {}, {
method: 'GET'
});
});
/***请求用户数据,并执行回调***/
function getData(W, User) {
W.parseCMD("/users/show.json", function (sResult, bStatus) {
if (!!bStatus && !!callback) {
callback.call(this,sResult);
}
},
{
'uid': User.uid
},
{
method: 'GET'
});
}
};
豆瓣联合登陆:
不得不说,豆瓣的互联开发做的真的不太好啊。。。没有集成好的SDK,同时说明文档也不完善。
当然,首先你还是要去豆瓣开发者注册一个账号啊,通过验证才可以发送请求啊。做的过程也比较纠结,这里没有使用JS请求,而是直接使用PHP发送Http请求,代码如下:
private function httpRequest($url, $postfields='', $method='GET', $headers=array()){
$ci=curl_init(); //初始化curl请求
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30); //参数设置
if($method=='POST'){
curl_setopt($ci, CURLOPT_POST, TRUE);
if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
}
$headers[]="User-Agent: doubanPHP(piscdong.com)"; //封装head头
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLOPT_URL, $url);
$response=curl_exec($ci); //执行curl请求
curl_close($ci);
$json_r=array();
if($response!='')$json_r=json_decode($response, true);
return $json_r;
}
到此,三种联合登陆的过程都解释完了,希望能给大家帮助