2014-01-31 3 views
0

다른 유사한 요청이 많다는 것을 알고 있습니다. 그러나 그 중 어느 것도 내가 찾은 해결책을 제공하지 못합니다. 먼저 제게 PHP 응답을 보내지 마십시오.이 구현을 위해 JavaScript SDK를 사용해야하며 JavaScript로 해결하려고합니다.Javascript SDK를 사용하여 사진을 Facebook의 관리자 페이지로 게시

로그인 한 사용자가 관리자 인 사진을 Facebook 페이지에 게시하려고합니다. 나는 페이지가 access_token이 생각하는 무엇을 얻고있다하지만 여전히 같은 페이지 관리자로 오히려 다음 페이지로 사용자와 사진을 게시 대신이 같은의

enter image description here

:

enter image description here

나는 나는 당신이 페이스 북의 액세스 토큰 디버거에서 여기에서 볼 수 있듯이 내가 올바른 권한 access_token이 페이지를 사용하고 상당히 일정 : 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..mchanged 코드를 알고 있습니다. 작동합니다. –

관련 문제