2012-03-18 196 views
0

我试图使用图形API来获取我的应用程序的访问令牌,通过请求以下字符串:获取Facebook的访问令牌

https://graph.facebook.com/oauth/authorize?type=user_agent&client_id=app_id&redirect_uri=canvas_page&scope=read_friendlists

这重定向到:canvas_page /#=的access_token XXX & expires_in = 4124 & code = A ...

但我不知道我怎么可以用PHP解析这个,这样我最终可以做出一个json请求来获取好友列表。

我希望你可以指导我:)

谢谢

+0

你想解析JSON结果呢? – safarov 2012-03-18 11:24:52

回答

0

你使用Facebook PHP SDK? https://github.com/facebook/php-sdk

您可以使用它像这样:

$facebook = new Facebook(array(
    'appId' => 'your_app_id', 
    'secret' => 'your_app_secret', 
)); 

// Get User ID 
$user = $facebook->getUser(); 


if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
} catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(); 
} 

可以使用$ loginUrl使该用户需要点击,将授权你的应用程序,如果他们还没有这样做的话

链接

然后你就可以拨打电话,以这样的图形API:

$friends = $facebook->api('/user_id/friends'); 
+0

我使用你建议的代码,但是当请求api时(...我得到错误: 致命错误:调用一个非对象的成员函数api()在... – JPJens 2012-03-18 11:49:05

+0

这是一些愚蠢的代码我的身边,似乎在工作 我被告知php-sdk会被弃用,所以我认为它不是最好的东西吗? 但是,谢谢你的回复:) – JPJens 2012-03-18 12:04:29

0

你可以用下面的下面的代码。它为我工作。

首先,你需要从这里下载Facebook SDK https://github.com/facebook/php-sdk

function facebook_oauth_init($facebook_app_id, $facebook_app_secret, $cookie = false) 
{ 
    $facebook = new Facebook(array("appId" => $facebook_app_id, "secret" => $facebook_app_secret, 
     "cookie" => $cookie)); 
    return $facebook; 
} 

$fb_app_id = "YOUR_APP_ID"; 
$fb_app_secret = "YOUR_APP_SECRET"; 
$fb_user_id = "YOUR_USER_ID"; 
$fb_access_token = "YOUR_GIVEN_ACCESS_TOKEN"; 

$facebook = facebook_oauth_init($fb_app_id, $fb_app_secret); 
$accounts = $facebook->api('/' . $fb_user_id . '/accounts', 'get', array('access_token'=>$fb_access_token)); 
$accounts = $accounts['data']; 

$access_token_2 
foreach($accounts as $acc) 
{ 
    if($fb_page_id == $acc['id']) 
    { 
     $access_token_2 = $acc['access_token']; 
     break; 
    } 
} 

“$ access_token_2” 应该是你在找什么。

希望这会有所帮助。

穆罕默德。