下面是代码在我的应用程序中的外观(对于本例进行了简化)
$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;
}
}