从 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 获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
Graph API v2.0 之后,Apple Calendar 如何获取 Facebook 好友的生日?