2014-01-31 67 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我知道更改的代碼,這是有效的 –

相關問題