腾讯空间 第三方接入(OAuth2.0/JS V2)

本文详细介绍了在Codeigniter/PHP框架下,如何实现与腾讯第三方网站的OAuth2.0接入流程,包括获取APPID、KEY信息,实现登陆图片展示,获取access_token及openid,并调用API获取用户信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

// 获取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传递到后台 .

如果我的方法哪里有错误 或者 您有更好的建议 ,还请您不吝提点




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值