现在的人越来越懒,以前的注册和登录的流程让很多用户讨厌起来,确实谁愿意记这么多用户名和密码呢,好吧上帝的要求我们必须要满足的。所以就有了第三方登陆这个东东,目前主要是 微信、微博、qq、淘宝、支付宝 等几个。他们都是基于oath2 协议的。原理差不多。这里记录的是我测试的新郎微博登陆。请需要的同学参考下。
一、pc版
1.下载开发的sdk包
https://github.com/xiaosier/libweibo 按照上面的安装方法解压缩到 vendor 目录(由于本人用的是yii2)。
在LoginController.php 里加入
use SaeTOAuthV2;
use SaeTClientV2;
use OAuthException;
session_start();
define( "WB_AKEY" , '********' );//需要在微博注册申请开发账号后有<a target=_blank href="http://open.weibo.com/webmaster/info/basic?siteid=???">开发者后台-网站信息</a> 查看
define( "WB_SKEY" , '**********' );
define( "WB_CALLBACK_URL" , 'http://www.niuhun.com/login/back' );//需要和后台设置的一致 <a target=_blank href="http://open.weibo.com/webmaster/privilege/oauth?siteid=115394324" target="_blank">接口管理</a>-授权机制中 设置的成功后返回地址一致
中间加入
<p class="p1"><span class="s1"> </span>/**</p><p class="p1"> 登录的页面,生成登录按钮,按自己想要的放在view中 </p><p class="p1"> */</p>public function actionSina()
{
$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY );
$code_url = $o->getAuthorizeURL( WB_CALLBACK_URL );
echo '<a href="'.$code_url.'&debug=true">login </a>';
}<p class="p1"> <span class="s1">/**</span></p><p class="p2"> * 登陆后返回本页面</p><p class="p2"> *</p><p class="p2"> * $user_message 数组常用内容 ["id"]=></p><p class="p2"> int(1659806631)</p><p class="p2"> ["screen_name"]=></p><p class="p2"> string(24) "爱上coding-原东厂pm"</p><p class="p2"> ["name"]=></p><p class="p2"> string(24) "爱上coding-原东厂pm"</p><p class="p2"> ["province"]=></p><p class="p2"> string(2) "33"</p><p class="p2"> ["city"]=></p><p class="p2"> string(1) "1"</p><p class="p2"> ["location"]=></p><p class="p2"> string(13) "浙江 杭州"</p><p class="p2"> ["avatar_large"]=></p><p class="p2"> string(49) "http://tp4.sinaimg.cn/1659806631/180/5610346393/0"</p><p class="p2"> ["avatar_hd"]=></p><p class="p2"> string(49) "http://tp4.sinaimg.cn/1659806631/180/5610346393/0"</p><p class="p2"> */</p><p class="p1"> <span class="s2">public function </span>actionBack()</p><p class="p1"> { </p><p class="p3">
</p><p class="p1"><span> </span><span> </span><span class="s2">if </span>(<span class="s2">isset</span>($_REQUEST[<span class="s3">'code'</span>])) {</p><p class="p1"><span> </span><span> </span><span> </span>$keys = <span class="s2">array</span>();</p><p class="p1"><span> </span><span> </span><span> </span>$keys[<span class="s3">'code'</span>] = $_REQUEST[<span class="s3">'code'</span>];</p><p class="p1"><span> </span><span> </span><span> </span>$keys[<span class="s3">'redirect_uri'</span>] = WB_CALLBACK_URL;</p><p class="p1"><span> </span><span> </span><span> </span>$o = <span class="s2">new </span>SaeTOAuthV2( WB_AKEY , WB_SKEY );</p><p class="p3"><span> </span><span> </span><span> </span><span> </span></p><p class="p1"><span> </span><span> </span><span> </span><span class="s2">try </span>{</p><p class="p1"><span> </span><span> </span><span> </span><span> </span>$token = $o->getAccessToken( <span class="s3">'code'</span>, $keys ) ;</p><p class="p1"><span> </span><span> </span><span> </span>} <span class="s2">catch </span>(OAuthException $e) {</p><p class="p1"><span> </span><span> </span><span> </span><span> </span><span class="s4">var_dump</span>($e.message);</p><p class="p1"><span> </span><span> </span><span> </span>}</p><p class="p1"><span> </span><span> </span>}</p><p class="p3">
</p><p class="p1"><span> </span><span> </span><span class="s2">if </span>(!<span class="s2">empty</span>($_SESSION[<span class="s3">'token'</span>] )||$token) {</p><p class="p4">// <span> </span><span> </span><span> </span>$_SESSION['token'] = $token;</p><p class="p1"><span> </span><span> </span><span> </span><span class="s2">if</span>($token){</p><p class="p1"><span> </span><span> </span><span> </span><span> </span><span class="s4">setcookie</span>( <span class="s3">'weibojs_'</span>.$o->client_id, http_build_query($token) );</p><p class="p5"><span class="s5"><span> </span><span> </span><span> </span><span> </span></span><span class="s2">echo </span>'授权完成'<span class="s5">;</span></p><p class="p1"><span> </span><span> </span><span> </span>}</p><p class="p1"><span> </span><span> </span><span> </span>$c = <span class="s2">new </span>SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION[<span class="s3">'token'</span>][<span class="s3">'access_token'</span>] );</p><p class="p1"><span> </span><span> </span><span> </span>$c->set_debug(<span class="s2">true</span>);</p><p class="p1"><span> </span><span> </span><span> </span>$ms = $c->home_timeline(); <span class="s6">// done</span></p><p class="p1"><span> </span><span> </span><span> </span>$uid_get = $c->get_uid();</p><p class="p4"><span class="s5"><span> </span><span> </span><span> </span></span>// <span> </span>var_dump($uid_get);exit();</p><p class="p1"><span> </span><span> </span><span> </span> <span> </span>$uid = $uid_get[<span class="s3">'uid'</span>];</p><p class="p1"><span> </span><span> </span><span> </span>$user_message = $c->show_user_by_id( $uid);<span class="s6">//根据ID获取用户等基本信息</span></p><p class="p3"><span> </span><span> </span><span> </span></p><p class="p3"><span> </span><span> </span><span> </span> </p><p class="p1"><span> </span><span> </span>}</p><p class="p1"> }</p><p class="p3"> </p>
3.访问 image1.niuhun.com/login/sina 后点login 登陆-授权成功后返回 成功(通过个人认证前还需要到开发者中心设置测试账号才能使用)
4.登陆后与系统用户合并方案
参考网址:
http://open.weibo.com/qa/index.php?qa=%E5%BA%94%E7%94%A8%E5%AE%A1%E6%A0%B8
http://open.weibo.com/wiki/OAuth2/access_token
http://www.cnblogs.com/hooray/archive/2012/11/17/2774499.html

本文介绍如何利用新浪微薄提供的SDK实现第三方登录功能。包括下载SDK、配置应用密钥及回调地址,并通过PHP代码实现登录按钮及授权过程。
244

被折叠的 条评论
为什么被折叠?



