2014-01-31 7 views
0

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

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

enter image description here

Вместо того, как это:

enter image description here

Я довольно уверен, я использую страницу access_token с правильными разрешениями, как вы можете видеть здесь с Facebook, маркер доступа Debugger: enter image description here

Так вот мой код:

<script> 
    var current_login_status = "start"; 
    window.fbAsyncInit = function() { 
    // init the FB JS SDK 
    FB.init({ 
     appId  : 'MY_APP_ID', // App ID from the app dashboard 
     status  : true,   // Check Facebook Login status 
     xfbml  : true   // Look for social plugins on the page 
    }); 

    // Additional initialization code such as adding Event Listeners goes here 
    FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
     // the user is logged in and has authenticated the app, 
     var uid = response.authResponse.userID; 
     var accessToken = response.authResponse.accessToken; 
     PostToFB(uid, accessToken); 
     } else if (response.status === 'not_authorized') { 
     // the user is logged in to Facebook, 
     // but has not authenticated the app 
     FB.login(function(response) { 
      current_login_status=response.status; 
      if (response.authResponse) { 
       window.location.reload(true); 
       } else { 
       alert('User did not fully authorize.'); 
       } 
     }, {scope: 'publish_stream,manage_pages'}); 
     } else { 
     // the user isn't logged in to Facebook.;   
     FB.login(function(response) { 
      current_login_status=response.status; 
      if (response.authResponse) { 
       window.location.reload(true); 
       } else { 
       alert('User cancelled login or did not fully authorize.'); 
       } 
     }, {scope: 'publish_stream,manage_pages'}); 
     } 
    }); 
    }; 

    function PostToFB(uid, accessToken) { 
    FB.api(
     { 
      method: 'fql.query', 
      query: 'SELECT page_id, name, page_url FROM page WHERE page_id IN (SELECT page_id FROM page_admin WHERE uid='+ uid+')' 
     }, 
     function(data) { 
      // Do something with the response 
      var page_id = data[0].page_id; 
      var page_accessToken = '' 
      FB.api(
       '/'+uid+'/accounts', 
       function(returnData) {     
        page_accessToken = returnData.data[0].access_token; 
       } 
      ); 
      FB.api(
       '/'+page_id+'/photos', 
       'POST', 
       { 
        'access_token': page_accessToken, 
        'message': 'Beer Description', 
        'url': "IMAGE_URL" 
       }, 
       function (response) { 
        if (response && !response.error) { 
        /* handle the result */ 
        console.log(response); 
        } else { 
        console.log(response); 
        } 
       } 
      );    

     } 
    );     
    }; 

    // Load the SDK asynchronously 
    (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"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk'));  
</script> 

Может кто-нибудь увидеть, что это не так?

ответ

0

FB.api работает асинхронно, поэтому ваш третий вызов FB.api не имеет значения, установленного в page_accessToken (и поэтому используется токен доступа пользователя).

Включите третий вызов FB.api в обработчик обратного вызова второго - так же, как и во втором вызове в обратном вызове первого.

+0

Спасибо CBroe !! Так оно и было. – Tom

+0

tom..may я знаю измененный код, который работает –

Смежные вопросы