问题描述
我创建了一个简单的仪表板,我可以在其中使用 Facebook 登录。但我无法获得页面列表。我已启用这些权限 manage_pages
pages_manage_posts
pages_show_list
我想获取我授权的页面的页面 ID 和访问令牌,然后将其存储在我的数据库中。这样我以后就可以在不打开 Facebook 的情况下在这些页面上发帖了。
我的用例:使用 Facebook 登录、授权页面、获取页面 ID 和访问令牌、将其存储到我的数据库中,然后使用这些凭据创建帖子。
这些是我创建的代码。
<?PHP
session_start();
require_once('Facebook/autoload.PHP');
$FBObject = new \Facebook\Facebook([
'app_id' => 'HIDDEN','app_secret' => 'HIDDEN','default_graph_version' => 'v2.10'
]);
$handler = $FBObject -> getRedirectLoginHelper();
?>
login.PHP
<?PHP
require_once('config.PHP');
if(isset($_SESSION['access_token'])){
header("Location: index.PHP");
exit();
}
$redirectTo = "http://localhost/callback.PHP";
$data = ['email'];
$fullURL = $handler->getLoginUrl($redirectTo,$data);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<Meta name="viewport" content="width=device-width,initial-scale=1.0">
<Meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGjplSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<title>Login with Facebook</title>
</head>
<body>
<div class="container" style="margin-top: 100px">
<div class="row justify-content-center">
<div class="col-md-6 col-md-offset-3" align="center">
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="form-check">
<input type="checkBox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div>
<input type="submit" value="Enter" class="btn btn-primary">
<input type="button" onclick="window.location = '<?PHP echo $fullURL ?>'" value="Login with Facebook" class="btn btn-primary">
</form>
</div>
</div>
</div>
</body>
</html>
callback.PHP
<?PHP
require_once("config.PHP");
try {
$accesstoken = $handler->getAccesstoken();
}catch(\Facebook\Exceptions\FacebookResponseException $e){
echo "Response Exception: " . $e->getMessage();
exit();
}catch(\Facebook\Exceptions\FacebookSDKException $e){
echo "SDK Exception: " . $e->getMessage();
exit();
}
if(!$accesstoken){
header('Location: login.PHP');
exit();
}
$oauth2client = $FBObject->getoauth2client();
if(!$accesstoken->isLongLived())
$accesstoken = $oauth2client->getLongLivedAccesToken($accesstoken);
$response = $FBObject->get("/me?fields=id,first_name,last_name,email,picture.type(large)",$accesstoken);
$userData = $response->getGraphNode()->asArray();
$_SESSION['userData'] = $userData;
$_SESSION['access_token'] = (string) $accesstoken;
$requestxx = new FacebookRequest(
$fbApp,$_SESSION['access_token'],//my user access token
'GET','/{page-id}?fields=access_token',array( 'ADMINISTER' )
);
$responset = $fb->getClient()->sendRequest( $requestxx );
$json = json_decode( $responset->getBody() );
$page_access = $json->access_token;
header('Location: index.PHP');
exit();
?>
index.PHP
<?PHP
session_start();
if(!isset($_SESSION['access_token'])){
header("Location: login.PHP");
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<Meta name="viewport" content="width=device-width,initial-scale=1.0">
<Meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGjplSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<title>My profile</title>
</head>
<body>
<div class="container" style="margin-top: 100px">
<div class="row justify-content-center">
<div class="col-md-3">
<img src="<?PHP echo $_SESSION['userData']['picture']['url'] ?>">
</div>
<div class="col-md-9">
<table class="table table-hover table-bordered">
<tbody>
<tr>
<td>ID</td>
<td><?PHP echo $_SESSION['userData']['id'] ?></td>
</tr>
<tr>
<td>First Name</td>
<td><?PHP echo $_SESSION['userData']['first_name'] ?></td>
</tr>
<tr>
<td>Last Name</td>
<td><?PHP echo $_SESSION['userData']['last_name'] ?></td>
</tr>
<tr>
<td>Email</td>
<td><?PHP echo $_SESSION['userData']['email'] ?></td>
</tr>
<tr>
<td>Token</td>
<td><?PHP echo $_SESSION['access_token'];?></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
因此,使用 Facebook 登录正在运行,但我没有获得页面列表或页面 ID。它返回 500 错误。
我不知道我做错了什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)