2014-01-31 66 views
0

我知道这里有很多其他类似的请求 - 但它们都没有提供我已经能够找到的解决方案。首先,请不要直接给我一个PHP的答案 - 我需要使用JavaScript SDK来实现这个实现,并且我正在寻求用JavaScript来解决它。作为管理员使用Javascript发布Facebook照片到Facebook页面

我想将照片发布到登录用户是管理员的Facebook页面。我得到了我认为要在页面ACCESS_TOKEN但它仍然张贴照片的用户页面而不是作为页面的管理是这样的:

enter image description here

,而不是像这样:

enter image description here

我相当肯定,我使用使用正确的权限ACCESS_TOKEN的页面,你可以从Facebook的访问令牌调试器在这里看到: 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我知道更改的代码,这是有效的 –

相关问题