免责声明:我对php编码相对较新,对Facebook SDK也是一个新手。
我一直在尝试使用他们的在线资料和示例来学习Facebook API,并发现它们相当缺乏。我正在尝试做一些非常基本的事情 - 只需登录Facebook并检索一些用户值。
按照Facebook的例子,我有login.php,它看起来像这样:
<?php
session_start();
require_once __DIR__ . '/../_fb/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => '26777overwritten335',
'app_secret' => '8260906deoverwrittenf286510',
'default_graph_version' => 'v2.6',
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; // optional
$loginUrl = $helper->getLoginUrl('http://www.domain.com/_mdp/fb_dev/login-callback.php', $permissions);
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
?>
......这似乎工作正常。
在login-callback.php页面上,我有以下内容:
<?php
session_start();
require_once __DIR__ . '/../_fb/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => '267772overwritten335',
'app_secret' => '8260906de2overwritten1f286510',
'default_graph_version' => 'v2.6',
]);
$helper = $fb->getRedirectLoginHelper();
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!
$_SESSION['facebook_access_token'] = (string) $accessToken;
echo 'You are now logged in!';
echo '<br> the access token is: ' . $accessToken . '<br>';
// Now you can redirect to another page and use the
// access token from $_SESSION['facebook_access_token']
}
// Am Successfully Logged In Here
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get('/me?fields=id,name', '$accessToken');
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$user = $response->getGraphUser();
echo 'Name: ' . $user['name'];
// OR
// echo 'Name: ' . $user->getName();
?>
我似乎能够成功登录,因为我从该行获得了回音:
echo 'You are now logged in!';
我已经尝试了很多不同的代码示例并获得了各种错误,但上面的代码会回显以下内容:
Graph returned an error: Invalid OAuth access token.
我用谷歌搜索了我能想到的每一种方式,并且还没有发现我做错了什么。
如果有人能告诉我我遗失的地方,并希望给我一些更正的代码,那肯定会受到赞赏。
另外,仅供参考 - 我真的想在SDK 5中使用图形版本2.6,因为看起来有一些边缘可用,而不是最新版本。
非常感谢帮助我指明正确的方向。
答案 0 :(得分:5)
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get('/me?fields=id,name', '$accessToken');
您在这里传递文字值$accessToken
- 这当然不是有效的访问令牌。
PHP不会用单引号解析字符串中的变量。请在这方面阅读http://php.net/manual/en/language.types.string.php,这是您需要的基本知识。
然后,停止将简单变量放入字符串中。
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get('/me?fields=id,name', $accessToken);