网站添加第三正值登陆(PHP版)

  这有限健全在写毕业设计,我做的凡一个问答网站。先介绍一下斯网站:那是一个关于大学生在线问答的网站,类似新浪和百度知道,然而功能尚未住户多,毕竟这个网站本身一个人口于召开。网站部署于阿里云,网站包括API,Web,IOS,三万分模块,现在向来不找到人帮助写安卓,唉… 
网站API已经写了了,Web端正在无微不至开发被,毕业答辩以前会吧基本功用上线,小伙伴们可以拜看看扩展人气,然则没有写了,并且看在无咬赏心悦目,因为无人形容前端,我还要未擅写页面所以发生硌低端。域名是:http://www.olas.cn

  下面说的一样点题外话,前日一旦说之是一个豪门相比较熟稔的物:第三正值登录,因为自之那多少个毕业设计要使用,所以虽然顺手加了转,第三正登陆依然蛮有由此底,这个是现行应用级网站的不可或缺,现在之用户一般还不相会失掉主动去而的报,一般如故经第三正的张罗账号去登陆,这样看得将来错过记密码,而且也比安全,所以添加第三着登录仍然相比较好之。上面我结是网站的增长过程写点东西。

  第三在登陆,顾名思义:用此印度媒体体之账号登陆一些网站,现在于流行的老三着账号一般是:QQ,和讯,微信。其他的阳台吗出,比如:人人,百度贴吧等,感觉就几乎独无前那么三独驰名,也未尝前边那么三单用之多,所以昨日即说脚下卓殊常用的博客园及QQ的登陆方法。

乐乎登陆

  先说利用初浪乐乎账号登陆我之网站,天涯论坛登陆我晓得是有少栽:一种植是通过前台JS调用非涉及后端的代码就足以兑现登陆的意义,另一样栽是透过SDK进行和谐写页面及弹出确认框,自己处理逻辑,上面我会以立时半栽办法都勾一下(其实呢无到底是个别种,只是大约上称之为前端和后端

  • SDK不同等嘛):

第一种:

  1、先登陆天涯论坛之开放平台:http://open.weibo.com,在我的应用中添加自己的网站或者是应用,网站的话域名必须是备案过的域名,不备案的域名禁止添加。我添加是
“答疑之小”,等待对,审通过充分成功后,点击应用进入后会相左侧的导航里有只导航:部署微链接
->乐乎登陆
->果壳网登陆详细介绍中就是和讯登陆涉及到的文档的丰硕之步调。

图片 1

2.停登陆按钮,逻辑大致如下:

通过WBML方式

 1 <!--没有回调函数的登录按钮-->                 
 2 <wb:login-button type="3,2" ></wb:login-button>
 3  
 4 <!--有回调函数的登录按钮-->      
 5 <wb:login-button type="3,2" onlogin="login" onlogout="logout" ></wb:login-button>
 6 
 7 // 如需添加回调函数,请在wbml标签中添加onlogin="login" onlogout="logout",并定义login和logout函数。
 8 function login(o) {
 9     alert(o.screen_name)
10 }
11  
12 function logout() {
13     alert('logout');
14 }

通过Js的方式:

 1 <div id="wb_connect_btn" ></div>
 2 
 3 WB2.anyWhere(function (W) {
 4     W.widget.connectButton({
 5         id: "wb_connect_btn",
 6         type: '3,2',
 7         callback: {
 8             login: function (o) { //登录后的回调函数
 9                 alert("login: " + o.screen_name)
10             },
11             logout: function () { //退出后的回调函数
12                 alert('logout');
13             }
14         }
15     });
16 });

累加必要之Js文件:

当HTML标签中益XML命名空间

1 <html xmlns:wb="http://open.weibo.com/wb">

每当HEAD头中引入WB.JS

1 <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=4121744546" type="text/javascript" charset="utf-8"></script>

于用配备登录按钮的位置贴WBML代码

1 <wb:login-button type="3,2" onlogin="login" onlogout="logout">登录按钮</wb:login-button>

如此这般便可以,点击按钮就足以经过回调的方吧用户授权后底音将到,比如头像昵称等。

第二种:通过PHP-SDK的方式

这种感觉符合自身之消,可以直接当PHP端处理登陆后底逻辑,前端能够形容好想假使的授权打开形式,所以我改用的立即同样种,首先你用看一下文档:http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6

1:下载PHP-SDK开发包(http://open.weibo.com/wiki/SDK),借助于sdk能让你减少好多不必考虑的东西,所以下载文档还是很有必要的,不过牛逼的你可以袭击写调用方式,毕竟那个文档写的也不咋滴,因为他的代码风格并不是按照PHP
PSR(http://www.kancloud.cn/thinkphp/php-fig-psr/3140)规范去写的,感觉很不专业,毕竟是让别人看的东西,规范是很重要的,至少不会挨那么多骂,哈哈!题外话啊!下面看看他的代码,你就该想吐槽了。。。。(换行方式,缩进,if
规范.. 不能忍)

值得注意的凡公只要牢记自己之app id 与key,然后以sdk中改换成团结之id

图片 2

2:前端open登陆授权页面,我是直接通过打开窗口的艺术:

1 function oauthLogin() {
2      var A = window.open("http://***/public/tencentopen.html", "TencentLogin", "width=755, height=550,left=300px,top=60px,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1");
3 }

求地址的拍卖逻辑:

 1     /**
 2      * 微博打开登陆认证页面
 3      * code:5000004
 4      * time:2016.4.28
 5      */
 6     public function weiboopen()
 7     {
 8         include_once('weiboOauth/config.php' );
 9         include_once('weiboOauth/saetv2.ex.class.php');
10 
11         $weiboObj = new \SaeTOAuthV2(WB_AKEY, WB_SKEY );
12         $code_url = $weiboObj->getAuthorizeURL(WB_CALLBACK_URL);
13 
14         header("Location:" . $code_url);
15     }

3:用户点击和讯登陆后的表明重回逻辑:

    /**
     * 执行微博认证
     * code:5000005
     * time:2016.4.28
     */
    public function weibooauth()
    {
        include_once('weiboOauth/config.php' );
        include_once('weiboOauth/saetv2.ex.class.php' );

        $weiboObj = new \SaeTOAuthV2(WB_AKEY, WB_SKEY);

        if (isset($_REQUEST['code'])) {
            $keys = array();
            $keys['code'] = $_REQUEST['code'];
            $keys['redirect_uri'] = WB_CALLBACK_URL;
            try {
                $token = $weiboObj->getAccessToken('code', $keys) ;
            } catch (OAuthException $e) {}
        }

        $succ['code'] = '100';
        $succ['message'] = '授权成功';

        $erro['code'] = '101';
        $erro['message'] = '授权失败';

        if(empty($token)) {
            $msg = $erro;
        } else {
            $saeObj = new \SaeTClientV2(WB_AKEY, WB_SKEY, $token['access_token']);
            $user_info = $saeObj->show_user_by_id($token['uid']);
            $ret = $this->oauthLogin($user_info, 'weibo');

            //授权失败
            if(empty($ret)) {
                $msg = $erro;
            } else {
                session('olas_access_token', $token['access_token']);
                $msg = $succ;
            }
        }

        $this->assign('msg', $msg);
        $this->display('oauth');
    }

4:授权成功未来:

  成功之后,你会拿用户之音写副到数据库,天涯论坛登陆会再次回到用户的昵称,头如音信(各类版本大小的头像),用户的性别等等,还有挺用户之用户uid,这多少个老紧要的,下次登陆会检查是UID是未是通过今日头条登陆过。这么些与腾讯的未均等,腾讯的莫倒回UID而是一个openid,可是性质是均等的,待会我会介绍。

从此未来再次来到打开窗口的状态码,刷新父页面举办跳转。

 1 $(document).ready(function(){
 2       if($.trim($("#code").val()) == '100') {
 3              $('#bodys').html("<div>授权成功,正在跳转 . . .</div>");
 4              setTimeout("changewindows();", 800);
 5       } else {
 6               $('#bodys').html("<div style='color:red;'>授权失败,请重试!</div>");
 7       }
 8 });
 9 function changewindows(){
10       window.opener.location.href = 'http://**';
11       window.close();
12 }

   
能够了通过SDK中SaeTClientV2中之show_user_by_id就足以得用户之信息了。你还得望好Sae***以这PHP版本是SAE部门维护的,所以只SAE起初的。步骤相当简单的,我们可以表明阅读他的支付文档,反复调试应该不成问题。我看SDK是对乐乎支付文档的包装:OAuth2/authorize
OAuth2/access_token
OAuth2/get_token_infoOAuth2/revokeoauth2OAuth2/get_oauth2_token

假如你在连接中起啊问题你可以直接挂钩自身

QQ登陆

  以QQ登陆也是老大普遍的,毕竟使用QQ的人差不多呀!使用QQ就无法不坚守每户的科班来,不然人家无给授权啊!下边是手续:

1:和博客园同样,首先要申请采取QQ互联,网址:http://connect.qq.com/manage/index
。首先创造以,审核通过,不经为足以使,然而起限制,好像只好使你协调的账号登陆,如下图:

图片 3

 

2:一旦经审核后你尽管好加上和修改好网站的局部登陆音信,点击
应用主旨音讯,这里要特别注意回调地址,因为要写错不克展开授权认证,所以回调地址要专门之注意,我以联网的当儿即使是直接报错。还有一个设留意的是加加协作者,这一个好作为测试,很有因而的。下面是自身好的网站添加的信,我们可瞅瞅,但是关键音讯我一度删除去了,隐私嘛。

图片 4

3:下边的展开收之后,你就可下载sdk了(http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD),我下的是PHP-sdk,下载后把他放在根目录就可以了。然后本地访问配置(主要是配置自己的应用信息),它上面有一个例子,直接可以调用的那种

下一场直接js打开授权页,页面地址请求到后台的方:

 1     /**
 2      * qq打开登陆认证页面
 3      * code:5000006
 4      * time:2016.4.24
 5      */
 6  public function tencentopen()
 7  {
 8      include_once("tencentOauth/qqConnectAPI.php");
 9      $qc = new \QC();
10      $qc->qq_login();
11  }

授权成功之后即使重复起始化这个sdk类:感觉顿时是外的BUG,必须将齐平等次等登陆重返的acs和open_id去伊始化QC重新得到用户的音信。

1  //申请开发$openid
2  $obj = new \QC();
3  $acs = $obj->qq_callback();
4  $openid = $obj->get_openid();
5 
6  //重新赋值,得到用户信息
7  $qc = new \QC($acs, $openid);
8  $user_info = $qc->get_user_info();

完全的代码如下:

 1     /**
 2      * qq登陆认证逻辑
 3      * code:5000007
 4      * time:2016.4.24
 5      */
 6     public function oauth()
 7     {
 8         include_once("tencentOauth/qqConnectAPI.php");
 9 
10         //申请开发$openid
11         $obj = new \QC();
12         $acs = $obj->qq_callback();
13         $openid = $obj->get_openid();
14 
15         //重新赋值,得到用户信息
16         $qc = new \QC($acs, $openid);
17         $user_info = $qc->get_user_info();
18 
19         $succ['code'] = '100';
20         $succ['message'] = '授权成功';
21 
22         $erro['code'] = '101';
23         $erro['message'] = '授权失败';
24 
25         $msg = [];
26         if(empty($user_info)) {
27             $msg = $erro;
28         } else {
29             $user_info['openid'] = $openid;
30             $user_info['appid'] = C('QQ_APPID');
31             $ret = $this->oauthLogin($user_info, 'tencent');
32             
33             //授权失败
34             if(empty($ret)) {
35                 $msg = $erro;
36             } else {
37                 $msg = $succ;
38             }
39         }
40 
41         $this->assign('msg', $msg);
42         $this->display('oauth');
43     }

这里要留意QQ和今日头条再次回到用户之ID是免平等的,果壳网重返的尽管用户以今日头条之诚实id,但是QQ不是。他再次回到的凡qq号对应之一个open_Id,感觉腾讯有点扯,那直接导致,你无法赢得登陆者的QQ号,有接触悲哀,只抱一个和QQ号一一对应的open_id,也毕竟不磨了,哎!

哼了,到此基本上把网易与QQ的登陆说得了了,期间要遇各样的题材,比如回调地址败北,登陆后刷新父页面跳转等等,设计及各个的用户体验。

假如我们以添加的时刻遭受解决不了的题材可以Q我,我会的本人定让你说,我们共同提升嘛,另外上边说之不规则的卿得经过评价报自己,共同提升嘛。

注意:

1、本博客同步改进至自己之个人网站:http://www.zhaoyafei.cn

2、本文属原创内容,为了尊重旁人劳动,转载请阐明本文地址:

http://www.cnblogs.com/zyf-zhaoyafei/p/5449776.html

 

相关文章