从 Facebook Graph API 获取访问令牌

Posted

技术标签:

【中文标题】从 Facebook Graph API 获取访问令牌【英文标题】:Getting an access token from the Facebook Graph API 【发布时间】:2016-03-09 15:40:59 【问题描述】:

我正在尝试使用 facebook graph api 在他们的网站上显示运动队的 facebook 状态更新,但似乎无法获得有效的访问令牌。

这是我的代码。

require_once APPPATH.'/third_party/facebook-php-sdk-v4/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
    'app_id' => '123123123123',
    'app_secret' => 'fghdfghtyjdfghdghjfghjfghj', 
    'default_graph_version' => 'v2.5'
]);

$fb->setDefaultAccessToken('123123123123|dfhjfgytdfghdfhgdsfjd');

$helper = $fb->getCanvasHelper();

try 
  $accessToken = $helper->getAccessToken();
 catch(Facebook\Exceptions\FacebookResponseException $e) 
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
 catch(Facebook\Exceptions\FacebookSDKException $e) 
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;


if (isset($accessToken)) 
  // Logged in.
 else 
    echo 'access token not set - THIS IS WHERE I ALWAYS SEEM TO END UP';

exit;

有什么明显的我做错了吗?

【问题讨论】:

你是先按权限获取代码吗?类似于: $permissions = ['manage_pages, publish_actions']; $loginUrl = $helper->getLoginUrl(URL::to('/your-redirect-url'), $permissions); 可能不会...我使用的所有代码都显示在这里... 如果页面是公开的,那么您可以使用您的应用访问令牌来请求数据。否则,您将需要获取页面访问令牌或能够查看页面的用户的用户访问令牌。更多关于不同种类的令牌以及如何获得它们:developers.facebook.com/docs/facebook-login/access-tokens 顺便说一句,在这里尝试使用 canvasHelper 没有任何意义,如果我理解正确的话,您甚至都没有在 on 画布上,但该应用程序位于外部网站上. @CBroe 如果我说实话,我对我必须做的事情的了解有限(好像这还不是很明显),所以我只是在尝试一切都在我得到一些结果之前!不过,我会查看您建议的链接。谢谢 【参考方案1】:

这是我在 Laravel 4 应用程序中用来连接的。基本上当用户点击“登录”按钮时, 1- 使用 app_id、app_secret 和 default_graph_version 创建 Facebook 实例。 2- 获取 redirectLoginHelper 对象以获取 loginUrl,其中包含 facebook 在您调用 $helper->getLoginUrl($redirectUrl, (array) $permissionsNeeded) 时将提供的代码 3-重定向到该网址 4- 再次创建 facebook 实例和 getRedirectLoginHelper 作为第 1 步和第 2 步 5-检查您是否在帮助返回的 url 中收到了“code”参数 6- 获取访问令牌:$accessToken = $helper->getAccessToken()

在我提供的代码中,我以一种方法完成所有这些步骤。我检查请求中是否有代码参数,如果没有,我请求它并重定向。下次代码运行时,当我检查代码是否存在时,它会继续下一步

$fb = new Facebook([
    'app_id' => 'facebook_app_id',
    'app_secret' => 'facebook_app_secret',
    'default_graph_version' => 'v2.5',
]);

$helper = $fb->getRedirectLoginHelper();

if(Input::get('code') == '') 
    $permissions = ['manage_pages, publish_actions'];
    $loginUrl = $helper->getLoginUrl('http://yoururl.dev/uri', $permissions);

    return Redirect::to($loginUrl);


try 
    $accessToken = $helper->getAccessToken();
 catch(Facebook\Exceptions\FacebookSDKException $e) 
    //Handle error

在这种情况下,登录按钮转到 www.domain.app/connect,redirectLoginHelper 返回的 URL 相同,但带有 code 参数:www.domain.app/connect?code=ntasd341251

【讨论】:

以上是关于从 Facebook Graph API 获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Graph API:如何访问用户电影?

Graph API v2.0 之后,Apple Calendar 如何获取 Facebook 好友的生日?

从 Facebook Graph-API 获取用户图像

Facebook Graph API,如何获取用户电子邮件?

从 facebook graph API 获取全尺寸图片

从 facebook-group-album 中的 graph-api 获取视频网址