Uncaught OAuthException: ошибка при проверке приложения - PullRequest
0 голосов
/ 08 марта 2012

Я занимаюсь разработкой своего первого приложения на Facebook, которое включает создание нового альбома и размещение фотографий на стене пользователя. Изучив документацию в фейсбуке и несколько учебных пособий и придумав этот код, я получаю следующую ошибку с ним.

Fatal error: Uncaught OAuthException: Error validating application. Thrown in /home/base_facebook.php on line 1106

Плюс: я не знаю, имеет ли это значение или нет, но когда я распечатываю

echo $facebook->getUser();

переменная, которая возвращает мне «0», даже если пользователь (в данном случае это я) вошел в систему.

Пожалуйста, помогите мне через это.

Код:

$config = array(
'appId'  => '3663250024856',
'secret' => 'b14ac6d2b7dbdtyb259599b06983e881',
'fileUpload' => true,
'cookie' => true
);


        $facebook = new Facebook($config);
        echo "USER STATUS:".$facebook->getUser();
        $facebook -> setFileUploadSupport(true);

        $album_details = array('message' => 'Album desc', 'name' => 'Album name');
        $create_album = $facebook -> api('/me/albums', 'post', $album_details);

        $album_uid = $create_album['id'];

        $photo_details = array('message' => 'Photo message');
        $file = "temp/".$imageName;
        $photo_details['image'] = '@' . realpath($file);

        $upload_photo = $facebook -> api('/' . $album_uid . '/photos', 'post', $photo_details);

Ответы [ 3 ]

4 голосов
/ 14 октября 2012

Лучшее рабочее решение, которое я нашел в сети. Добавьте приведенный ниже код вверху вашей страницы php:

$app_id = "YOUR_APP_ID";   
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_URL";


   $code = $_REQUEST["code"];

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = @file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];
   }
3 голосов
/ 08 марта 2012

Несмотря на то, что пользователь вошел в систему, пользователь должен дать разрешение вашему приложению, прежде чем вы сможете совершать вызовы API.

В основном процесс аутентификации пользователя с использованием facebook php sdk должен выглядеть следующим образом:

  1. Определить, вошел ли пользователь в систему и дал ли оно разрешение вашему приложению.

  2. Если он не дал разрешения, перенаправьте его на страницу авторизации и доступа к приложению.После входа в систему и предоставления разрешения он будет снова перенаправлен на страницу вашего приложения.

    В противном случае отобразите содержимое вашего приложения, выполните вызовы API, ...

Вот модифицированный пример кода со страницы документации php sdk для обработки аутентификации, которая должна работать, если вы просто измените appId, appSecret и redirect_uri:

<?php
require_once 'fb_php_sdk/facebook.php';

$appId = 'your_app_id';
$appSecret = 'your_app_secret';

// Create your Application instance (replace this with your appId and secret).
$facebook = new Facebook( 
    array(
      'appId'  => $appId,
      'secret' => $appSecret,
    'fileUpload' => true,
    'cookie' => true
));

// Get User ID
$user = $facebook->getUser();

if ($user) 
{
    try {
        // Proceed knowing you have a logged in user who's authenticated.
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }
}

// Login or logout url will be needed depending on current user state.
if ($user) 
{
    $logoutUrl = $facebook->getLogoutUrl();
} 
else 
{
    $loginUrl = $facebook->getLoginUrl(
                            array(
                                'canvas' => 1,
                                'fbconnect' => 0,
                                'scope' => '',//these are the extended permissions you will need for your app, add/remove according to your requirement
                                'redirect_uri' => 'http://apps.facebook.com/test_app_azk/',//this is the redirect uri where user will be redirected after allow,
                                ));                                       
}

if ($user)
{
    //show the content of your app
    //make api calls
    var_dump($user_profile);
}
else
{
    //redirect user to loginUrl
    echo "<script>parent.location = '".$loginUrl."';</script>";
}

Надеюсь, это поможет.

1 голос
/ 13 марта 2012

Проблема может заключаться в выражении else.Вместо использования else используйте if (! User).Это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...