facebook-> getUser()返回0

Sne*_*ish 1 php facebook facebook-php-sdk

每当我尝试登录时,会打开一个询问基本权限的提示,然后将其重定向到带有URL的redirect_uri

="> HTTP://本地主机/演示/代码= AQDwzia3Wx1BktixF59jVHbm0ViGVJm8Xhb2tNZDyYreZh0KoSJhrSsJ8Aa2KX3gocwR0XNQjQz7ZlBh26_nBi-3iOMByhVO2cxwJ8maC4IHxBacfqXjzqIyBaZQbWKUUxPI6VBrqBgFXQasj7PEtmug7lt93dK4fmMC2A4i2dUYU-gSvzn0f0ZdB3eT_aSvgR1KoLCmQgLh3xix4H05QR6LCP9nLtQC4l9rMJW83kS0PNmWq0COZYvGfuX1R7519Fn3iXRB9F0MTsK1KQ_ulpK84PUCkuMu8et88Lln0ZwuzaPo0oERelkPWYnrrTKa-5W&状态= ed66ea618d8076d9e72c15d9a65a6312#=

即使facebook-> getUser()返回0

这是我的代码

<?php
require_once('php-sdk/facebook.php');
$facebook = new Facebook (array(
    'appId' => '1234',
    'secret' => '12313',
    'cookie' => true
    ));
?>

<html>
    <head> <title> Warming Up with FB API </title> </head>
    <body> <h1> Hello World </h1> </body>
</html>
<?php
$loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo'
        ));

$user = $facebook->getUser();
//echo $user. '</br>';
if ($user) {
    echo '<em>User Id: </em> '.$user;
} else {
    $loginUrl = $facebook->getLoginUrl(array ( 
        'display' => 'popup',
        'redirect_uri' => 'http://localhost/demo'
        ));
    echo '<a href = "'.$loginUrl.'">Login Here </a> ';
 }
?>
Run Code Online (Sandbox Code Playgroud)

我知道这是一个非常微不足道的问题,但我有点坚持这个,无法继续前进.请建议做什么.

*更新*

让App Domain为空解决了我的问题.

小智 11

如果有人仍在敲头,这就是现在的错误.我被雇来修理这个烂摊子!

  1. 在fb面板中检查App域,必须与您的应用所在的域匹配.

  2. 编辑base_facebook.php找到:

    public function getAccessToken(){

    if ($this->accessToken !== null) {
      // we've done this already and cached it.  Just return.
      return $this->accessToken;
    }
    
    // first establish access token to be the application
    // access token, in case we navigate to the /oauth/access_token
    // endpoint, where SOME access token is required.
    $getApplicationAccessToken = $this->getApplicationAccessToken();
    $this->setAccessToken($getApplicationAccessToken);
    $user_access_token = $this->getUserAccessToken();
    if ($user_access_token) {
      $this->setAccessToken($user_access_token);
    }
    return $this->accessToken;
    
    Run Code Online (Sandbox Code Playgroud)

    }

至::

  public function getAccessToken() {

    if ($this->accessToken !== null) {
      // we've done this already and cached it.  Just return.
      return $this->accessToken;
    }

    // first establish access token to be the application
    // access token, in case we navigate to the /oauth/access_token
    // endpoint, where SOME access token is required.
    $getApplicationAccessToken = $this->getApplicationAccessToken();
    $this->setAccessToken($getApplicationAccessToken);
    $user_access_token = $this->getUserAccessToken();
    if ($user_access_token) {
      //$this->setAccessToken($user_access_token);
    $this->accessToken = $user_access_token; //edit; msolution
    }
    return $this->accessToken;
  }
Run Code Online (Sandbox Code Playgroud)
  1. 接下来找到函数:getAccessTokenFromCode()

找到这条线:

parse_str($access_token_response, $response_params); 
Run Code Online (Sandbox Code Playgroud)

替换为:

//parse_str($access_token_response, $response_params); //edit:: msolution;;
$response_params = json_decode($access_token_response, true );
Run Code Online (Sandbox Code Playgroud)

评论原文并添加json_decode

而已!