腾讯空间 第三方接入(OAuth2.0/JS V2)
2012-07-21 14:54
218 查看
在Codeigniter/PHP框架下,实现腾讯第三方网站接入.接入方式(OAuth2.0)
1. 跟其他第三方接入一样,我们需要申请接入获取 APP ID,KEY信息
首先我们放置一张登陆图片,
<a href="请求地址">
<img src="http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/img/Connect_logo_7.png">
</a>
1.1. 获取access_token
请求地址: http://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=YOU_APP_ID&redirect_uri=YOU_REDIRECT_URL
返回地址:
http://graph.qq.com/demo/index.jsp?#access_token=FE04************************CCE2&expires_in=7776000
可通过js方法:window.location.hash来获取URL中#后的参数值。传送:如何使用window.location.hash获取#后参数值
1.2.
根据access_token获得对应用户身份的openid
根据回调的地址传递的access_token,在后台获取openid
2.上述是OAuth2.0 方式, 使用JS JDK快速登录也很简单,参见JS SDK Demo.这里也给出一个例子
.
传送门:JS变量 传递到PHP服务端方法
如果我的方法哪里有错误 或者 您有更好的建议 ,还请您不吝提点
1. 跟其他第三方接入一样,我们需要申请接入获取 APP ID,KEY信息
首先我们放置一张登陆图片,
<a href="请求地址">
<img src="http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/img/Connect_logo_7.png">
</a>
1.1. 获取access_token
请求地址: http://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=YOU_APP_ID&redirect_uri=YOU_REDIRECT_URL
返回地址:
http://graph.qq.com/demo/index.jsp?#access_token=FE04************************CCE2&expires_in=7776000
可通过js方法:window.location.hash来获取URL中#后的参数值。传送:如何使用window.location.hash获取#后参数值
1.2.
根据access_token获得对应用户身份的openid
根据回调的地址传递的access_token,在后台获取openid
// 获取OpenID function getOpenId($access_token) { $url = "https://graph.qq.com/oauth2.0/me"; $ch = curl_init();//创建curl会话 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url);/*如果需要获取一个URL的内容,传递一个URL给curl_setopt()函数*/ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//终止从服务端进行验证 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//获得URL站点的内容但不输出在浏览器 curl_setopt($ch, CURLOPT_POSTFIELDS,"access_token=$access_token"); $output = curl_exec($ch);//打印出URL站点的内容 $info = curl_getinfo($ch);//获取最后一次传输的相关信息 if ($output === false || $info['http_code'] != 200) { $output = "No cURL data returned for $url [". $info['http_code']. "]"; if (curl_error($ch)) $output .= "\n". curl_error($ch); }else { //将json变量 转换成php变量 $str=$output; preg_match('/\{[^\}]*\}/',$str,$obj); $tmp = json_decode($obj[0],true); return $tmp; } curl_close($ch);//关闭curl会话 }1.3. 根据access_token ,openid信息,调用API,下面示例如何获取用户信息API
// 调用 get_user_info API function get_user_info($access_token,$oauth_consumer_key,$openid) { $url = "https://graph.qq.com/user/get_user_info"; $ch = curl_init();//创建curl会话 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url);/*如果需要获取一个URL的内容,传递一个URL给curl_setopt()函数*/ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//终止从服务端进行验证 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//获得URL站点的内容但不输出在浏览器 curl_setopt($ch, CURLOPT_POSTFIELDS,"access_token=$access_token&oauth_consumer_key=$oauth_consumer_key&openid=$openid"); $output = curl_exec($ch);//打印出URL站点的内容 $info = curl_getinfo($ch);//获取最后一次传输的相关信息 if ($output === false || $info['http_code'] != 200) { $output = "No cURL data returned for $url [". $info['http_code']. "]"; if (curl_error($ch)) $output .= "\n". curl_error($ch); }else { //将json变量 转换成php变量 $obj = json_decode($output); return $obj; } curl_close($ch);//关闭curl会话 }
2.上述是OAuth2.0 方式, 使用JS JDK快速登录也很简单,参见JS SDK Demo.这里也给出一个例子
//调用QC.Login方法,指定btnId参数将按钮绑定在容器节点中 QC.Login({ btnId:"qqLoginBtn", scope:"all", size: "A_M" }, function(reqData, opts){ //登录成功 var dom = document.getElementById(opts['btnId']), _logoutTemplate=[ //头像 '<span><img src="{figureurl}" class="{size_key}"/></span>', //昵称 '<span> {nickname} </span>', //退出 '<span><a href="javascript:QC.Login.signOut();"> 退出 </a></span>' ].join(""); dom && (dom.innerHTML = QC.String.format(_logoutTemplate, { nickname : QC.String.escHTML(reqData.nickname), figureurl : reqData.figureurl })); // ajax var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } QC.Login.getMe(function(openId, accessToken){ xmlhttp.open("GET","http://localhost/CI/index.php/SaveInfo/save_qq_openId?openId="+openId+"&accessToken="+accessToken,true); xmlhttp.send(); }); }, function(opts){//注销成功 //alert('注销成功'); } );这段code,,放置了登录Button,并且获取acess_token,openid,以供调用QQ API.并将acess_token,openid通过ajax传递到后台
.
传送门:JS变量 传递到PHP服务端方法
如果我的方法哪里有错误 或者 您有更好的建议 ,还请您不吝提点
相关文章推荐
- QQ第三方登陆及同步内容到腾讯微博,腾讯空间,朋友网
- 第三方接入备忘(人人、开心、新浪、腾讯)
- 用第三方会员系统(腾讯平台网站接入oauth)
- 分享到微信微博空间等第三方平台的JS代码
- 微信公众号实现智能聊天-接入第三方智能机器人平台
- Android仿微信调用第三方地图应用导航(高德、百度、腾讯)
- cocos2d-x android工程接入第三方支付宝SDK
- 腾讯应用宝联运接入YSDK的坑(Nginx的CA证书配置,回调地址)
- Android 第三方应用接入微信平台(1)
- 第三方组件接入方案(演示文稿图片)
- 微信公众平台接入第三方接口
- 腾讯MSDK接入untiy3d游戏
- Unity3D如何接入第三方的SDK - iOS篇
- 第三方插件-微信支付接入注意问题
- android app 接入第三方SDK接口层实现思考
- 第三方接入支付宝问题:nested exception is java.lang.NoClassDefFoundError: com/alipay/api/AlipayRequest
- 腾讯新浪平台第三方尾巴 App…
- IOS接入第三方付钱啦支付平台
- Owin+ASP.NET Identity浅析系列(五)接入第三方登录
- 腾讯大牛教你web前后端漏洞分析与防御-接入层(SQL)注入