Я использую приведенный ниже код на своем веб-сайте, чтобы попытаться опубликовать сообщение на странице Facebook, которой я управляю. Я использую PHP PHP SDK v5. Всякий раз, когда я запускаю код, я получаю адрес в Facebook с окном с ошибкой, которое говорит:Facebook PHP SDK v5 Ошибка OAuth Ошибка при отправке на страницу в виде страницы
«URL-адрес заблокирован: это перенаправление не удалось, потому что URI перенаправления не включен в настройках клиента OAuth. Убедитесь, что клиент и веб-адрес OAuth Login включены и добавляют все ваши домены приложений в качестве допустимых URI-адресов OAuth Redirect ».
Однако, если я перейду в API-интерфейс Graph API и запрошу токен доступа к пользователю, тогда жестко закодируйте токен доступа в скрипте, который работает очень хорошо. Я добавил Facebook Войти на вкладку продуктов в настройках моего приложения, так как это единственное место, которое вы можете добавить в «Действительные URI перенаправления OAuth». Я уверен, что проблема возникает из поля «Valid UAuth redirect URIs» в области настроек. Я не уверен, что поставить в эту область, или если это вообще проблема. В настоящее время я попытался поместить следующее в поле «Valid UAuth redirect URIs» без везения;
только мой домен т.е. www.my-domain.com
полный путь по вызывающий скрипт т.е. www.my-domain.com/calling-script.php
полный путь к пустой странице на моем сервере, то есть www.my-domain.com/blank.html
Ничего не работают. Это мой первый опыт использования PHP PHP SDK, поэтому я уверен, что все делаю неправильно ... Интересно, может ли кто-нибудь дать мне некоторые рекомендации по этому поводу?
ОБНОВЛЕНИЕ: См. Ответ, размещенный ниже с исправлением. Мой первоначальный пост был не очень ясен в отношении моих намерений. Моя цель состояла в том, чтобы успешно опубликовать сообщение на странице Facebook в виде страницы, а не как отдельный пользователь. Надеюсь, это поможет кому-то по дороге.
Вот PHP скрипт я использую:
session_start();
$path = "path-to-Facebook-autoloader-on-my-server";
include_once $path;
$fb = new Facebook\Facebook([
'app_id' => 'app-id-from-app-settings',
'app_secret' => 'app-secret-number-from-app-settings',
'default_graph_version' => 'v2.7',
]);
/////////////////////////////////////////////////////////////////////////
// If I uncomment the below line the script works fine, but the token expires often
// and I do not want to have to keep updating it
// $_SESSION['facebook_access_token'] = "access-token-obtained-from-Graph-API-Explorer";
/////////////////////////////////////////////////////////////////////////
$helper = $fb->getCanvasHelper();
$permissions = ['email', 'publish_actions']; // optional
try {
if(isset($_SESSION['facebook_access_token'])){
$accessToken = $_SESSION['facebook_access_token'];
}else{
$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)){
if(isset($_SESSION['facebook_access_token'])){
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}else{
$_SESSION['facebook_access_token'] = (string)$accessToken;
// OAuth 2.0 client handler
$oAuth2Client = $fb->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string)$longLivedAccessToken;
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
// validating the access token
try{
$request = $fb->get('/me');
}catch(Facebook\Exceptions\FacebookResponseException $e){
// When Graph returns an error
if($e->getCode() == 190){
unset($_SESSION['facebook_access_token']);
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
exit;
}
}catch(Facebook\Exceptions\FacebookSDKException $e){
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
try{
// message must come from the user-end
$data = ['message' => 'test message...'];
$request = $fb->post('/me/feed', $data);
$response = $request->getGraphNode();
}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;
}
echo $response['id'];
}else{
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
}