Автоматизированный пост в фейсбуке с помощью Javascript - PullRequest
0 голосов
/ 18 августа 2011

У меня есть приложение facebook, в котором пользователь проходит проверку подлинности с помощью PHP и предоставляет разрешения для приложения, в том числе publish_stream.
Во время применения пользователь просматривает несколько экранов.
На последнем экране, пользователь выбирает, хотят ли они публиковать сообщения на своей стене.
Если они это сделают, на их стене должно быть опубликовано автоматическое и отформатированное сообщение.

Я пытался сделать это с помощью Javascriptно это не сработало.Вы видите, что не так?

Спасибо!Вот мой код:

<div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {
        FB.init({
          appId  : 'MY APP ID',
          status : true, 
          cookie : true, 
          xfbml  : true 
        });
      };

      (function() {
        var e = document.createElement('script');
        e.src = 'http://connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
      }());
    </script>

<script>
    function postToFacebook() {
        var body = '';
        var params = {};
        params['message'] = 'MESSAGE';
        params['name'] = 'NAME';
        params['description'] = '';
        params['link'] = '';
        params['picture'] = 'https://www.URL.com/pic.jpg';
        params['caption'] = 'CAPTION';
        FB.api('/me/feed', 'post', params, function(response) {
          if (!response || response.error) {
           // alert('Error occured');
          } else {
           // alert('Post ID: ' + response);
          }
        });
    }
    </script>

Ответы [ 3 ]

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

После прочтения вашего вопроса и различных комментариев мне кажется, что информация о сеансе пользователя не сохраняется в JavaScript SDK - это предполагает, что на сервере поддерживается действительный сеанс пользователя.

Прежде всего вы должны проверить, используете ли вы самый последний PHP SDK. Для двойной проверки скачайте и установите последнюю версию с GitHub . Я думаю, что это должно решить вашу проблему, так как куки, содержащие данные сеанса авторизованных пользователей, должны передаваться между PHP и JavaScript SDK.

Если это не сработает, у меня есть подозрение, что пользователь неправильно проходит проверку подлинности на стороне сервера. В этом случае вы можете попробовать следующее.

Перед вами postToFacebook() вы должны проверить пользователей, вошедших в систему, и при необходимости войти в систему. Например:

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
        postToFacebook();
    } else {
        // no user session available, someone you dont know
        FB.login(function(response) {
            if (response.authResponse) {
                // logged in and connected user
                postToFacebook();
            } else {
                // User cancelled login or did not fully authorize
            }
        }, {scope: 'YOUR,REQUIRED,PERMISSIONS'});
    }
});
0 голосов
/ 21 февраля 2012

Когда вы пытаетесь сделать это:

FB.api('/me/feed', 'post', params, function(response) { ..  });

Вам необходимо передать маркер доступа вместе со звонком. Я предполагаю, что у вас есть на стороне php / server, так что:

FB.api('/me/feed/access_token='[INSERT_ACCESS_TOKEN], 'post', params, function(response) { ..  });
0 голосов
/ 18 августа 2011

Вы не вызываете функцию postToFacebook()!

window.fbAsyncInit = function() {
    FB.init({
      appId  : 'MY APP ID',
      status : true, 
      cookie : true, 
      xfbml  : true 
    });
    postToFacebook();
  };
...