php实现新浪微博第三方信任登录

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

现在的人越来越懒,以前的注册和登录的流程让很多用户讨厌起来,确实谁愿意记这么多用户名和密码呢,好吧上帝的要求我们必须要满足的。所以就有了第三方登陆这个东东,目前主要是 微信、微博、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

THINKPHP最全第三方登录(包括腾讯QQ、微信、新浪微博、Github、淘宝网、百度、搜狐微博、人人、360、网易等等) 使用方式: 1、使用命名空间 use Org\ThinkSDK\ThinkOauth; 2、设置三方登录的类别并赋予一个变量 $type = ThinkOauth::getInstance('qq'); 3、设置配置文件 'THINK_SDK_(TYPE)' => array( 'APP_KEY' => '', //应用注册成功后分配的 APP ID 'APP_SECRET' => '', //应用注册成功后分配的KEY 'CALLBACK' => '', //注册应用填写的callback ), 上文中的(TYPE)为设置的类别,其值目前有以下几个: //腾讯QQ登录配置 THINK_SDK_QQ // 用户基本信息API接口 user/get_user_info //腾讯微博配置 THINK_SDK_TENCENT // 用户基本信息API接口 user/info //新浪微博配 THINK_SDK_SINA // 用户基本信息API接口 users/show。附加参数:'uid='.$obj->openid() //网易微博配置 THINK_SDK_T163 // 用户基本信息API接口 users/show //人人网配置 THINK_SDK_RENREN // 用户基本信息API接口 users.getInfo //360配置 THINK_SDK_X360 // 用户基本信息API接口 user/me //豆瓣配置 THINK_SDK_DOUBAN // 用户基本信息API接口 user/~me //Github配置 THINK_SDK_GITHUB // 用户基本信息API接口 user //Google配置 THINK_SDK_GOOGLE // 用户基本信息API接口 userinfo //MSN配置 THINK_SDK_MSN // 用户基本信息API接口 msn。附加参数:token //点点配置 THINK_SDK_DIANDIAN // 用户基本信息API接口 user/info //淘宝网配置 THINK_SDK_TAOBAO // 用户基本信息API接口 taobao.user.buyer.get。附加参数:'fields=user_id,nick,sex,buyer_credit,avatar,has_shop,vip_info' //百度配置 THINK_SDK_BAIDU // 用户基本信息API接口 passport/users/getLoggedInUser // 注意,百度的头像位置是http://tb.himg.baidu.com/sys/portrait/item/{$data['portrait']} //开心网配置 THINK_SDK_KAIXIN // 用户基本信息API接口 users/me //搜狐微博配置 THINK_SDK_SOHU // 用户基本信息API接口 i/prv/1/user/get-basic-info 4、实例化一个登录页面 redirect($type->getRequestCodeURL()); 这里的$type是第二部获取的结果 5、回调页面 $code = $this->get('code'); $type = 'QQ'; $sns = ThinkOauth::getInstance($type); //腾讯微博需传递的额外参数 $extend = null; if($type == 'tencent'){ $extend = array('openid' => $this->_get('openid'), 'openkey' => $this->_get('openkey')); } //请妥善保管这里获取到的Tok
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值