使用 Facebook SDK 获取 Facebook 页面列表以及页面 ID 和访问令牌

问题描述

我创建了一个简单的仪表板,我可以在其中使用 Facebook 登录。但我无法获得页面列表。我已启用这些权限 manage_pages pages_manage_posts pages_show_list

我想获取我授权的页面页面 ID 和访问令牌,然后将其存储在我的数据库中。这样我以后就可以在不打开 Facebook 的情况下在这页面上发帖了。

我的用例:使用 Facebook 登录、授权页面获取页面 ID 和访问令牌、将其存储到我的数据库中,然后使用这些凭据创建帖子。

这些是我创建的代码

config.PHP

<?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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...