基于OAuth的开放平台获取用户授权码的方法

开放平台是真的火了,但在中国开放只能是更大意义的圈子,所以平台还只是平台,但对于coder来说,搞搞还是很有必要的!

很久之前,做了个独立 微博 ,整合了几大还算比较火的微博平台(新浪、腾讯、网易、搜狐、豆瓣……),感觉还不错!

最近给一客户做了个小的同步工具,再次把 OAuth 捡起来!这里记录一下,顺道分享点小心得!

首先,OAuth是个啥?传送门:OAuth认证协议原理分析及使用方法!或者到各大开放平台看文档!

先分享一些个小的心得,走一走OAuth的流程!这里以一个获取用户授权码的示例来讲解,先上示例演示,结合演示看代码!

PS. 文中提到的所有代码均置于同一页面!目录配置请看代码!以获取新浪微博用户授权码为例:

先写个前端:

<a rel="nofollow" href="index.php?oauth=sina">新浪微博</a>

当点击“新浪微博”时,将参数oauth提交至index.php文件处理,index.php文件需要先加载通用配置文件:

include(dirname(__FILE__) . '/config.php');
include(dirname(__FILE__) . '/oauth/OAuth.php');//OAuth通用类

顺道开启 session:session_start();

接着设置一个 callback url,用于用户授权之后传回确认信息,其中就包括授权码

if($_GET['oauth']=="sina"){
    $callbackUrl = 'http://data.yangjunwei.com/demo/668/index.php?callback=sina';//以示例目录为例
    include_once('oauth/sina_oauth.php');
    $a = new sinaOAuth( SINA_AKEY, SINA_SKEY );// 创建 sinaOAuth 对象实例
    $keys = $a->getRequestToken();
    $aurl = $a->getAuthorizeURL( $keys['oauth_token'] ,false , $callbackUrl);// $callbackUrl

    $_SESSION['keys'] = $keys;// 保存到 session 中
    //print_r($_SESSION['keys']);//这里可以输出看看是啥!
    header('Location:' . $aurl);//跳转至微博官网输入用户登录信息
}

下面就是用户输入登录信息后,返回 $callbackUrl 处理!

if($_GET['callback']=="sina"){
    include_once('oauth/sina_oauth.php');
    $b = new sinaOAuth(SINA_AKEY, SINA_SKEY, $_SESSION['keys']['oauth_token'], $_SESSION['keys']['oauth_token_secret']);
    // 获取最终用户授权 access token
    $last_token = $b->getAccessToken($_REQUEST['oauth_verifier']);
    $_SESSION['last_key'] = $last_token;// 保存到 Session 中    
}

至此,$_SESSION['last_key']里保存的就是我们需要的用户授权码!推荐阅读last_key使用技术:腾讯微博OAuth开放接口php-sdk的小技巧

方法不是很难,注意转换就OK!代码写的比较乱,有问题可以留言交流!

ps.20130401更新:

新浪OAuth V1:返回oauth_token、oauth_token_secret

新浪OAuth V2:返回access_token、expires_in