OAuthTutorial

跳转到: 导航, 搜索

本文介绍使用PHP libweibo (http://code.google.com/p/libweibo/) 来进行OAuth验证及微博接口调用

准备工作

要使用微博开放平台之前,你必须拥有一个微博开放平台的帐号,可以到这里申请,http://t.sina.com.cn/11051/3f4cXR5Tej 申请通过后,微博开放平台会给你APP KEY(CONSUMER KEY)和CONSUMER SECRET.

只有拥有APP KEY和APP SECRET才能和微博平台进行交互

了解OAuth

微博开放平台支持两种认证方式,一种是需要用户输入用户名和密码的Basic验证,一种是不需要用户提供密码的OAuth.我们只提供OAuth方式的class.

OAuth通过应用和微博授权页面之间的跳转来进行授权. 其步骤为

  1. 应用向微博平台发起请求,获得一个临时的oauth_token,和oauth_token_secret(A),这套key被称为request token.
  2. 应用将用户转向到微博授权页面,同时带上这个token和一个回调页面地址
  3. 用户在微博上同意授权后,会生成oauth_verifier(B),并在转向到回调页面是带上这个值.
  4. 应用通过$_REQUEST得到oauth_verifier,再加上之前(A)处的oauth_token和oauth_token_secret,向微博发起最后一次请求.
  5. 微博平台验证无误后,发给应用另外一套oauth_token和oauth_token_secret(C),这套key被成为access token.
  6. 拿到access token意味着应用已经获得了授权.之后应用就可以通过access token获取和发送微博了.

access token不用每次都去取,可以把它保存下来,供下次使用.这样性能更高.

使用libweibo

由于微博接口属于SAE以外的服务,所以我们需要手工载入class,并初始化对象.

include_once( 'saet.ex.class.php' ); $o = new SaeT( WB_AKEY , WB_SKEY ); // APP KEY和APP SECRET

然后进行上一段中的(1)

$keys = $o->getRequestToken(); // 取得oauth_token

接着获得(2)中要用到的url,第三个参数指定了回调页面

$aurl = $o->getAuthorizeURL( $keys['oauth_token'] ,false , 'http://'. $_SERVER['HTTP_APPNAME'] . '.sinaapp.com/callback.php');

通过提示用户点击链接或者header(”Location:aulr”)等方式将页面转向.

用户被带到微博授权页面上,当他点击同意后,微博会将他转向到callback.php.

我们在callback.php里边继续.

因为是一个新的页面,需要重新载入class并初始化.

include_once( 'saet.ex.class.php' ); $o = new SaeT( WB_AKEY , WB_SKEY , $_SESSION['keys']['oauth_token'] , $_SESSION['keys']['oauth_token_secret'] );

注意这里new的时候多带了两个参数,是在(A)处获得的值.因为跨页面了,我们一般把它们存在Session里边. oauth_verifier就在callback接收到的$_REQUEST里边.这三个值准备好后,我们再请求最后一次认证.

$last_key = $o->getAccessToken( $_REQUEST['oauth_verifier'] ) ;

这样我们就得到了(C)处的两个值.在它们过期之前(微博目前是永久的),我们都可以直接通过这两个值来和微博进行数据交换了. $o = new SaeT( WB_AKEY , WB_SKEY , $_SESSION['last_key']['oauth_token'] , $_SESSION['last_key']['oauth_token_secret'] );

// 取得用户的最近5条微博 $ms = $o->get("http://api.t.sina.com.cn/statuses/user_timeline.json?count=5");

// 发布微博 $o->post( "http://api.t.sina.com.cn/statuses/update.json" , array( 'status' => 'always test' ) );

libweibo 下载地址为 http://code.google.com/p/libweibo/