PHP API для Facebook - неожиданная проблема с users_isAppUser () - PullRequest
2 голосов
/ 27 января 2010

у нас есть приложение iframe facebookapp, которое до вчерашнего дня работало нормально. Хотя мы ничего не меняли, наше приложение вдруг перестало работать.

Мы могли бы идентифицировать users_isAppUser() как проблему. Метод возвращает, что пользователь не добавил приложение, хотя он определенно установил приложение и вошел в систему. Мы можем удалить часть try / catch (см. Код ниже), чтобы приложение не попадало в цикл перенаправления но следующие методы тоже не работают:

$this->facebook->api_client->friends_get()

$this->facebook->api_client->friends_getAppUsers()

$this->facebook->api_client->call_method('facebook.users.hasAppPermission', array('ext_perm' => 'publish_stream'))

require_login() работает, и мы можем получить идентификатор пользователя Facebook для вошедшего в систему пользователя.

Странно то, что наше приложение работало нормально от пары недель до вчерашнего дня. Были ли какие-либо секретные изменения в API в последние дни? Или какие-то другие выводы, в чем может быть проблема? Буду признателен за любые советы. Заранее спасибо!

$this->fbuserid = $this->facebook->require_login();

// check if user has added app,  exception gets thrown if the cookie has an invalid session_key i.e. user is not logged in
try {
    if(!$this->facebook->api_client->users_isAppUser()) {
        $this->facebook->redirect($this->facebook->get_add_url());
    }
} catch (exception $ex) {
    // clear cookies for application and redirect to login prompt
    $this->facebook->set_user(null, null);
    $this->facebook->redirect($this->configArray['appcallbackurl']);
}

1 Ответ

0 голосов
/ 07 мая 2011
<?php
// this is sample code taken from the Facebook Developers Site.Thank you to Face book

define('YOUR_APP_ID', '');
define('YOUR_APP_SECRET', '');


function get_facebook_cookie($app_id, $app_secret) {
  $args = array();
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args);

  ksort($args);
  $payload = '';
  foreach ($args as $key => $value) {
    if ($key != 'sig') {
      $payload .= $key . '=' . $value;
    }
  }
  if (md5($payload . $app_secret) != $args['sig']) {
    return null;
  }
  return $args;
}

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET);
echo "<pre/>";
/*print_r($_COOKIE);

print_r($cookie);*/
$user = json_decode(file_get_contents('https://graph.facebook.com/me?access_token=' . $cookie['access_token']));

$photo = json_decode(file_get_contents('https://graph.facebook.com/100000439661780/albums?access_token=' . $cookie['access_token']));

echo "<pre/>";
print_r($photo);
?>
<img src="https://graph.facebook.com/ureshpatel5/picture" height="200" width="200" />
<html>
  <body>
  <?php
  $albums = $facebook->api('/me/albums');
print_r($albums);
foreach($albums['data'] as $album)
{
        // get all photos for album
        $photos = $facebook->api("/{189346844423303_46487}/photos");

        foreach($photos['data'] as $photo)
        {
                echo "<img src='{$photo['source']}' />", "<br />";
        }
}  
  ?>
    <?php if ($cookie) { ?>
      Welcome <?= $user->name ?>
    <?php } else { ?>
      <fb:login-button></fb:login-button>
    <?php } ?>

    <?php 
        echo $photo->source;
     ?>
    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
      FB.init({appId: '<?= YOUR_APP_ID ?>', status: true,
               cookie: true, xfbml: true});
      FB.Event.subscribe('auth.login', function(response) {
        window.location.reload(); 

      });
          </script>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...