新浪微博,騰訊微博,騰訊QQ登陸

無論是新浪微博仍是騰訊微博仍是騰訊QQ,平臺的接入都是以App key以及Appsercrit爲基礎返回一個connectid。程序再接收到這個conectid會從數據庫中作個查詢。whereconnectid="" andfrom="sina",若是存在,表明這個帳戶已經跟某帳戶已經綁定成功。能夠進一步通知查詢出帳戶的用戶名通知uc同步登錄,而後設置cookie或者session。
$this->_init_phpsso();
$synloginstr=$this->client->ps_member_synlogin($r['phpssouid']);
若是不存在,表明尚未綁定,都已都跳轉到connect頁面,但在這裏須要設置session
$_SESSION = array();
$_SESSION['connectid'] = $me['id'];
$_SESSION['from'] = 'sina';
$connect_username = $me['name'];
include template('member', 'connect');
在這個頁面中,若是綁定新帳號,至關於從新註冊了個帳戶,只是將connectid跟from一併寫入了數據表中。若是綁定新帳號,則讓用戶輸入帳戶的用戶名跟密碼,若是驗證成功,則將connectid跟from更新入庫。
以上是原理,來實際操做中可能就沒這麼簡單了,在MVC中,咱們能夠創建三個方法
public_sina_login,pulic_tqq_login,public_qq_login三個方法來處理三者的登錄
在用戶未post以前,展示給用戶的就是三個connect_sina.html,connect_tqq.html,connect_qq.html,其實也沒啥高深的,三個按鈕點後就提交到了public_sina_login,pulic_tqq_login,public_qq_login方法中,



http://open.weibo.com/wiki/SDK
http://wiki.open.t.qq.com/index.php/SDK%E4%B8%8B%E8%BD%BD#PHP_SDK
http://wiki.open.qq.com/wiki/website/SDK%E4%B8%8B%E8%BD%BD
什麼時回調地址,也就是受權經過後跳轉的地址,這個地址是可以接受access_token的地址就好了。其實OAUTH2最關鍵的就是先經過akey跟skey生成


define('WB_AKEY', pc_base::load_config('system', 'sina_akey'));
define('WB_SKEY', pc_base::load_config('system', 'sina_skey'));
pc_base::load_app_class('weibooauth', '' ,0);
$this->_session_start();
if(isset($_GET['callback']) && trim($_GET['callback'])) {
$o = new WeiboOAuth(WB_AKEY, WB_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']);
$_SESSION['last_key'] = $o->getAccessToken($_REQUEST['oauth_verifier']);
$c = new WeiboClient(WB_AKEY, WB_SKEY, $_SESSION['last_key']['oauth_token'], $_SESSION['last_key']['oauth_token_secret']);
//獲取用戶信息
$me = $c->verify_credentials();


define('QQ_AKEY', pc_base::load_config('system', 'qq_akey'));
define('QQ_SKEY', pc_base::load_config('system', 'qq_skey'));
pc_base::load_app_class('qqoauth', '' ,0);
$this->_session_start();
if(isset($_GET['callback']) && trim($_GET['callback'])) {
$o = new WeiboOAuth(QQ_AKEY, QQ_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']);
$_SESSION['last_key'] = $o->getAccessToken($_REQUEST['oauth_verifier']);


define('SNDA_AKEY', pc_base::load_config('system', 'snda_akey'));
define('SNDA_SKEY', pc_base::load_config('system', 'snda_skey'));
define('SNDA_CALLBACK', urlencode(APP_PATH.'index.php?m=member&c=index&a=public_snda_login&callback=1'));
pc_base::load_app_class('OauthSDK', '' ,0);
$this->_session_start();        
if(isset($_GET['callback']) && trim($_GET['callback'])) {
$o = new OauthSDK(SNDA_AKEY, SNDA_SKEY, SNDA_CALLBACK);
$code = $_REQUEST['code'];
$accesstoken = $o->getAccessToken($code);



$appid = pc_base::load_config('system', 'qq_appid');
$appkey = pc_base::load_config('system', 'qq_appkey');
$callback = pc_base::load_config('system', 'qq_callback');
pc_base::load_app_class('qqapi','',0);
$info = new qqapi($appid,$appkey,$callback);
$this->_session_start();
if(!isset($_GET['oauth_token'])){
$info->redirect_to_login();
}else{
$info->get_openid();//調取QQ openid值

下面是兩篇oauth2的教程,雖然是針對phpcms的,不過思路同樣
http://bbs.phpcms.cn/forum.php?mod=viewthread&tid=814511&highlight=oauth2
http://bbs.phpcms.cn/forum.php?mod=viewthread&tid=878885&highlight=oauth2


php

相關文章
相關標籤/搜索