无论是新浪微博仍是腾讯微博仍是腾讯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