Разрешения не переносятся при посещении новой страницы при использовании php sdk Facebook - PullRequest
0 голосов
/ 28 марта 2012

Я использую следующий код для получения разрешений для моего приложения (код находится в index.php) -

   <?php
  require_once "sdk/facebook.php";

   $fbconfig['appid'] = "333446170045623";
  $fbconfig['secret'] = "9ea7b92bc7eac852a3900e1d7931c34d";

   $facebook = new Facebook(array(
        'appId' => $fbconfig['appid'],
        'secret' => $fbconfig['secret'],
        'cookie' => true,
    ));

   $user = $facebook->getUser();

  if (!$user) { /* If user not found, authenticate */
$loginUrl = $facebook->getLoginUrl(
        array(
            'scope' => 'publish_stream',
            'redirect_uri' => 'http://www.facebook.com/pages/pagename?sk=app_333446170045623'
        ));
  echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
   }

  $signed_request = $facebook->getSignedRequest();
      ?>

Теперь на странице есть ссылка, которая ведет пользователя на страницу select.php. Там я попытался использовать следующий код, чтобы получить информацию о текущем пользователе-

$user_profile = $facebook->api('/me');

Я разместил на этой странице тот же код получения разрешения, что и на странице index.php.

Тем не менее, я получаю следующую ошибку на этой странице -

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /server/html/appname/sdk/base_facebook.php on line 1106

Я пробовал различные предлагаемые решения, но они, похоже, не работают. Как мне использовать $ facebook-> api ('/ me'), чтобы получить информацию на этой странице? (кстати, я использую последний php SDK Facebook)

Ответы [ 2 ]

0 голосов
/ 09 августа 2012

Не знаю почему, но перед использованием

используйте метод getAccessToken()
$user_profile = $facebook->api('/me');

перестанет выдавать ошибку.

0 голосов
/ 28 марта 2012

Если это нативное приложение facebook, у вас есть 2 варианта. Вы можете установить цель всех своих ссылок в качестве родительского фрейма и добавить новый URL в конце, например, http://apps.facebook.com/yourapp/next.php, или же вы можете включить js-sdk на страницу для обработки событий входа и выхода с помощью window.reload. Если это нативное приложение, то, скорее всего, правильные данные не отправляются с Facebook, что приводит к потере подписанного запроса и т. Д., И вы теряете токен доступа.

Если это веб-приложение, я бы также предложил использовать javascript sdk на странице.

так что-то похожее на это чуть ниже тега body на всех ваших страницах

  <div id="fb-root"></div>

<script>               
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<?php echo $app_id; ?>', 
      cookie: true, 
      xfbml: true,
      oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      setTimeout('window.location.reload()',0);
    });
    FB.Event.subscribe('auth.logout', function(response) {
     setTimeout('window.location.reload()',0);
    });
  };
    (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=433871385166";
    fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>
...