Facebook graph api &引用;此URL的域不是';t包括在应用程序中';“s域”;当它是

Facebook graph api &引用;此URL的域不是';t包括在应用程序中';“s域”;当它是,facebook-graph-api,facebook-php-sdk,Facebook Graph Api,Facebook Php Sdk,我正试图从一个PHP脚本发布到Facebook的墙上。我创建了一个FB应用程序,安装了Graph PHP API,并实现了一些测试脚本,如下所示: fbinit.php: <?php session_start(); require_once('src/Facebook/autoload.php'); $fb = new Facebook\Facebook([ 'app_id' => 'REDACTED', 'app_secret' => 'REDACTED', 'def

我正试图从一个PHP脚本发布到Facebook的墙上。我创建了一个FB应用程序,安装了Graph PHP API,并实现了一些测试脚本,如下所示:

fbinit.php:

<?php

session_start();

require_once('src/Facebook/autoload.php');

$fb = new Facebook\Facebook([
'app_id' => 'REDACTED',
'app_secret' => 'REDACTED',
'default_graph_version' => 'v2.9',
]);

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();

$permissions = ['manage_pages','publish_pages']; //'publish_actions'
$loginUrl = $helper->getLoginUrl('https://www.REDACTED.net/fb-callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();
$_SESSION['FBRLH_state']=$_GET['state'];

try {

  $accessToken = $helper->getAccessToken();

} 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;

}

if (! isset($accessToken)) {
  echo 'No OAuth data could be obtained from the signed request. User has not authorized your app yet.';
  exit;
}

try {

  $response = $fb->get('me/accounts', $accessToken->getValue());
  $response = $response->getDecodedBody();

} 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;

}

echo "<pre>";
print_r($response);
echo "</pre>";

?>

fbpost.php:

<?php

session_start();

require_once('src/Facebook/autoload.php');

$fb = new Facebook\Facebook([
'app_id' => 'REDACTED',
'app_secret' => 'REDACTED',
'default_graph_version' => 'v2.9',
]);

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();

$permissions = ['manage_pages','publish_pages']; //'publish_actions'
$loginUrl = $helper->getLoginUrl('https://www.REDACTED.net/fb-callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();
$_SESSION['FBRLH_state']=$_GET['state'];

try {

  $accessToken = $helper->getAccessToken();

} 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;

}

if (! isset($accessToken)) {
  echo 'No OAuth data could be obtained from the signed request. User has not authorized your app yet.';
  exit;
}

try {

  $response = $fb->get('me/accounts', $accessToken->getValue());
  $response = $response->getDecodedBody();

} 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;

}

echo "<pre>";
print_r($response);
echo "</pre>";

?>

fb callback.php:

<?php

session_start();

require_once('src/Facebook/autoload.php');

$fb = new Facebook\Facebook([
'app_id' => 'REDACTED',
'app_secret' => 'REDACTED',
'default_graph_version' => 'v2.9',
]);

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();

$permissions = ['manage_pages','publish_pages']; //'publish_actions'
$loginUrl = $helper->getLoginUrl('https://www.REDACTED.net/fb-callback.php', $permissions);

echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>';

?>
<?php

include('fbinit.php');

$helper = $fb->getRedirectLoginHelper();
$_SESSION['FBRLH_state']=$_GET['state'];

try {

  $accessToken = $helper->getAccessToken();

} 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;

}

if (! isset($accessToken)) {
  echo 'No OAuth data could be obtained from the signed request. User has not authorized your app yet.';
  exit;
}

try {

  $response = $fb->get('me/accounts', $accessToken->getValue());
  $response = $response->getDecodedBody();

} 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;

}

echo "<pre>";
print_r($response);
echo "</pre>";

?>

当我第一次打开fbpost.php时,我被要求按预期登录到Facebook,它要求允许我在页面上发表文章,这很好。但随后我被重定向到回拨页面,并出现以下错误:

图形返回错误:无法加载URL:此URL的域未包含在应用程序的域中。若要加载此URL,请将应用程序的所有域和子域添加到应用程序设置中的“应用程序域”字段。

我已经添加了我能想到的所有应用程序URL和回调URL的组合,但没有任何效果。有关应用程序设置的屏幕截图,请参见下文。应用程序ID和密码绝对正确


在登录对话框调用和尝试将代码交换为令牌的后续API调用中,
重定向uri
参数的值必须完全相同

当您在不同的脚本上生成登录URL和处理响应(即,通过不同的URL调用)时,很容易导致这样的问题。SDK尝试根据当前脚本URL计算值(如果留给自己的设备)


在这种情况下,还应在
getAccessToken
方法调用中显式指定回调URL。

在登录对话框调用中,
redirect\u uri
参数的值必须与尝试将代码交换为令牌的后续API调用中的值完全相同。当您在不同的脚本上生成登录URL和处理响应(即,通过不同的URL调用)时,很容易导致这样的问题。尝试在
getAccessToken
方法调用中显式指定回调URL。啊哈,这很有效!在getAccessToken()中指定回调URL允许回调工作,然后我得到了表示返回页面的数组。非常感谢。如果您将此作为答案发布,我将接受它。在getAccessToken()中指定回调URL允许回调工作,然后我得到表示返回页面的数组。非常感谢。Yikes,它生成的一个与我提供的相同,但添加了自己的查询参数,这破坏了它!只需在没有查询参数的情况下传递相同的URL,我就解决了这个问题,谢谢!