2010-08-24 118 views
2

我按照標準PHP庫中的說明使用http://developers.facebook.com/docs/api#authorization。一切工作正常,直到它重定向到我的網站。我不確定我在這裏要做什麼!當重定向發生時,我可以看到Facebook的關鍵說明我用來在URL中請求OAuth令牌。我對OAuth/Facebook過程感到困惑

但是我打算怎麼做呢?我是否寫了一個簡單的腳本,它接受新的「代碼」值,並將請求發送到包含詳細信息的Facebook頁面?有沒有在PHP庫中的呼叫爲我完成整個過程?

任何幫助表示讚賞。

回答

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; 
    } 
} 
+2

什麼是... $ code = $ _REQUEST ['code']; – Bharath 2012-09-24 15:25:38