Размещение на стене пользователя в Facebook с использованием php 2011 - PullRequest
0 голосов
/ 28 августа 2011

Ничего не публикуется на стене, выполнение запускается после $ result = $ facebook-> api ('/ me / feed /', 'post', $ attachment); Скажите, любая идея сломана.

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
));

// Get User ID


$user = $facebook->getUser();
if ($user) {
  try {
    // Get the user profile data you have permission to view
    $user_profile = $facebook->api('/me');
    $uid = $facebook->getUser();


      $url = $facebook->getLoginUrl(array(
    'canvas' => 1,
    'fbconnect' => 0,
    'req_perms' => 'email,publish_stream,status_update,user_birthday,user_location,user_work_history'));


    $attachment = array
 (
 'access_token'=>$facebook->getAccessToken(),
 'message' => 'I had a question: should I write a PHP facebook app that actually worked?',
 'name' => 'I Asked Bert',
 'caption' => 'Bert replied:',
 'link' => 'http://apps.facebook.com/askbert/',
 'description' => 'NO',
 'picture' => 'http://www.facebookanswers.co.uk/img/misc/question.jpg'
 );
 echo "Test 1"; 

$result = $facebook->api('/me/feed/','post',$attachment);

    echo "Test 2"; 
    $_SESSION['userID'] = $uid;


  } catch (FacebookApiException $e) {
    $user = null;
  }
} else {
  die('Somethign Strange just happened <script>top.location.href="'.$facebook->getLoginUrl().'";</script>');
}

Тест 1 напечатан, но не Тест 2.

Ответы [ 3 ]

5 голосов
/ 28 августа 2011

Вы сказали, что искали обновленную документацию, проверяли FAQ по PHP-SDK Facebook ?

В частности,

  • Как авторизоваться и иметь любое из следующих разрешений?
  • Как разместить на стене?

После создания экземпляра приложения получите $user first

$user = $facebook->getUser();

Отсюда, следуя инструкциям из «Как авторизоваться и иметь любое из следующих разрешений?» используя область действия

$par = array();
$par['scope'] = "publish_stream";

Проверьте состояние пользователя, чтобы узнать, какой метод входа / выхода требуется, передав разрешение publish_stream

if ($user) {
        $logoutUrl = $facebook->getLogoutUrl();
} else {
        $loginUrl = $facebook->getLoginUrl($par);
}

Затем разместите вложение, как описано в разделе «Как разместить на стене?»

if ($user) {
$attachment = array('message' => 'this is my message',
    'name' => 'This is my demo Facebook application!',
    'caption' => "Caption of the Post",
    'link' => 'http://mylink.com/ ',
    'description' => 'this is a description',
    'picture' => 'http://mysite.com/pic.gif ',
    'actions' => array(array('name' => 'Get Search',
    'link' => 'http://www.google.com/ '))
    );

    try {
    // Proceed knowing you have a user who is logged in and authenticated
    $result = $facebook->api('/me/feed/','post',$attachment);
    } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
    }

}

Как объяснено в примере приложения , вставьте блок try / catch, чтобы увидеть, какие данные доступны в зависимости от того, вошел ли пользователь в систему или нет при выполнении вызовов API.

вызов, такой как

$cocacola = $facebook->api('/cocacola');

Всегда будет работать, так как он общедоступен.

1 голос
/ 28 августа 2011

Вот пара замечаний:

  1. Вы используете новый PHP-SDK, поэтому не используйте req_perms используйте scope вместо
  2. Поместите /me/feed после звонка внутри try
  3. Вам не нужно звонить getUser() дважды, идентификатор пользователя уже находится в $user
  4. ПользовательИдентификатор будет уже в сеансе с ключом, который выглядит следующим образом: fb_XXXXXXX_user_id где XXXXXXX - это идентификатор вашего приложения
  5. сеанс уже запущен ..
0 голосов
/ 06 сентября 2011

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

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
));
$user = $facebook->getUser();
$user_profile = $facebook->api('/me');


if( array_key_exists('publish_stream', $permissions['data'][0]) ) {
                // Permission is granted!
                // Do the related task
                //$post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!'));
                  $post_id = $facebook->api('/me/feed', 'post', $attachment);

            } else {
                // We don't have the permission
                // Alert the user or ask for the permission!
                echo "Click Below to Enter!";
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
            }

* Предупреждение

по состоянию на 5 сентября 2011 года это работает, но я видел в документации по fb, что они меняют метод размещения на стене пользователя и препятствуют использованию потока публикации. но сейчас работает

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