前面的文章讲述了,如何在thinkphp框架开发的项目中,配置第三方登录类文件ThinkSDK类库,在此不再赘述,本文就具体讲解用QQ做第三方登陆的实例。
ThinkSDK类库,很好的帮我们集成了主流的第三方登录类,把第三方平台的SDK包集成在了一起,我们需要做的任务是从QQ开发平台申请开发者权限,获取appkey和appsecret参数,将其配置到项目中即可。
注意:网站申请第三方登录必须是已备案的网站才可以。我在阿里云购买的域名和服务器,半个月就备案下来了。
首先需要到qq开发平台申请开发者权限,地址是:https://connect.qq.com/manage.html。
打开页面之后,填写个人信息(个人是可以申请QQ做第三方登录的),提交腾讯审核,其中的网站名称一项必须是备案信息上的名称,有过不一致,会被打回,不给通过(亲身经历)。
提交信息页面
审核通过后的页面
审核通过详情页
登录效果页面
上面几个步骤执行完之后,就可以获取到QQ开发者平台的appkey和appsecret了,将其放到thinkphp的config.php配置文件中即可,具体配置前面的文章已经讲过(参考:http://www.zixuephp.cn/index.php/Home/Index/article/aid/51),我们接下来就是用户输入QQ账号步骤完成之后的,回调方法了。
该回调方法,会将通过appkey和appsecret获取到的openid,再用openid换取用户的基本信息,将信息保存到数据库中,则执行完毕。
回调方法如下:
<?php // 第三方登录类:新浪微博德隆 class ThirdAction extends Action{ //SNS登录首页 public function index(){ $this->display(); } //登录地址 public function login($type = null){ empty($type) && $this->error('参数错误'); //加载ThinkOauth类并实例化一个对象 import("ORG.ThinkSDK.ThinkOauth"); $sns = ThinkOauth::getInstance($type); //跳转到授权页面 redirect($sns->getRequestCodeURL()); } //授权回调地址 public function callback($type = null, $code = null){ (empty($type) || empty($code)) && $this->error('参数错误');
//加载ThinkOauth类并实例化一个对象 import("ORG.ThinkSDK.ThinkOauth"); $sns = ThinkOauth::getInstance($type); //腾讯微博需传递的额外参数 $extend = null; if($type == 'tencent'){ $extend = array('openid' => $this->_get('openid'), 'openkey' => $this->_get('openkey')); } //请妥善保管这里获取到的Token信息,方便以后API调用 //调用方法,实例化SDK对象的时候直接作为构造函数的第二个参数传入 //如: $qq = ThinkOauth::getInstance('qq', $token); $token = $sns->getAccessToken($code , $extend); //获取当前登录用户信息 if(is_array($token)){ $user_info = A('Type', 'Event')->$type($token); //echo("<h1>恭喜!使用 {$type} 用户登录成功</h1><br>"); //echo("授权信息为:<br>"); //dump($token); //echo("当前登录用户信息为:<br>"); //dump($user_info); //exit; $model=M('custome'); $data=array(); $data['uname']=$user_info['nick']; $data['name']=$user_info['nick']; //$name=$user_info['name'];//接收新浪的用户名,作为本站的用户姓名项,此处保证来自新浪的是唯一标识符,方便用户再次用新浪登录可以保存之前的数据 $name=$token['openid']; $nick=$user_info['nick']; $data['headPortrait']=$user_info['head']; //判断用户是否已经登录过 $info=$model->where("namecode='{$name}'")->find(); if($info){ $pre_id=$info['id']; $res=$model->where("id='{$pre_id}'")->save($data); $data['password']=$info['password']; }else{ $data['namecode']=$token['openid']; $data['type']=1; $data['status']='ACTIVE'; $data['comefrom']='网站'; $data['comechild']='装修情报M站'; $data['createTime']=date('Y-m-d H:i:s'); $data['password']=md5('a123456'); $data['points']=50; $data['zxCoins']=50; //生成用户唯一的id标识符 $id = md5(uniqid(mt_rand(), true)); $data['id']=strtoupper($id); $pre_id=$data['id']; $res=$model->add($data); } if($res!==false){ //保存cookie做免登陆验证 $time = time()+86400*7; //注册成功则在积分详情表中,标明用户积分和装修比变动详情 //1、用户积分变动详情 $m_coindetail=M('coinDetail'); $arr=array(); $arr['customerId']=$data['id']; $arr['direction']=1; $arr['coins']=50; $arr['coinsType']=2; $arr['coinsTime']=date('Y-m-d H:i:s'); $arr['remark']='注册赠送积分'; $rss=$m_coindetail->add($arr); //2、装修币变动详情 $arrs=array(); $arrs['customerId']=$data['id']; $arrs['direction']=1; $arrs['coins']=50; $arrs['coinsType']=1; $arrs['coinsTime']=date('Y-m-d H:i:s'); $arrs['remark']='注册赠送装修币'; $rss=$m_coindetail->add($arrs); setcookie('pre_id',$pre_id,$time,'/'); setcookie('pre_uname',$name,$time,'/'); setcookie('pre_password',$data['password'],$time,'/'); header('Location:http://m.myhousing.cn/index.php/Ucenter/index'); } } } } |
宠物免费领养小程序,欢迎来踩