我已按照http://developers.facebook.com/docs/api#authorization上的说明使用标准PHP库。一切正常,直到它重定向到我的网站。我不确定我在这里做什么!当重定向发生时,我可以看到关键的facebook谈论我用来在URL中请求OAuth令牌。
但是我的意思是什么呢?我是否编写了一个简单的脚本来获取新的“代码”值并将请求发送到Facebook页面,其中包含详细信息?在php库中是否没有调用我的整个过程?
任何帮助表示感谢。
答案 0 :(得分:5)
以下是代码在我的应用程序中的外观(本例简化)
$code = $_REQUEST['code'];
if ( $code )
{
$response = $facebook->api( '/oauth/access_token', 'GET', array(
'client_id' => $facebook->getAppId()
, 'client_secret' => $facebook->getApiSecret()
, 'redirect_uri' => 'http://example.com/your/redirect/uri'
, 'code' => $code
) );
parse_str( $response, $vars );
$oauthToken = $vars['access_token'];
// Persist this token in the session, DB, or wherever you want
} else {
switch ( $_REQUEST['error_reason'] )
{
case 'user_denied':
// some sort of message here
break;
}
}
如果像我一样,你创建了Facebook
的子类,只需将上面的一些内容放入一个新方法
/**
* Exchange an Access Code for an OAuth Token
*
* @param string $accessCode
* @param string $redirectUrl
*
* @return string OAuth Token
*/
public function getOauthTokenFromAccessCode( $accessCode, $redirectUrl )
{
$response = $this->api( '/oauth/access_token', 'GET', array(
'client_id' => $this->getAppId()
, 'client_secret' => $this->getApiSecret()
, 'redirect_uri' => $redirectUrl
, 'code' => $accessCode
) );
parse_str( $response, $vars );
return $vars['access_token'];
}
这简化了客户端代码
$code = $_REQUEST['code'];
if ( $code )
{
$oauthToken = $facebook->getOauthTokenFromAccessCode(
$code
, 'http://example.com/your/redirect/uri'
);
// Persist this token in the session, DB, or wherever you want
} else {
switch ( $_REQUEST['error_reason'] )
{
case 'user_denied':
// some sort of message here
break;
}
}