2012-05-30 5 views
0

내 탭은 사용자가 팬이 될 때를 알아야하므로 권한을 요청해야합니다. 페이스 북의 공식 문서에도 불구하고 나는 그것을 성공적으로 만들었고 사용자는 oauth 대화 상자로 리다이렉트되었고 그가 확인한 후에 탭으로 돌아왔다.PHP Oauth inside TAB

$user = $facebook->getUser(); 
if ($user) 
{ 
    $access_token = $facebook->getAccessToken(); 
    $user_profile = $facebook->api('/me'); 
    try 
    { 
     $likes = $facebook->api("/me/likes/pageid"); 
    } 
    catch (FacebookApiException $e) 
    { 
     $user = null; 
    } 
} 
else 
{ 
    ?> 
    <script type="text/javascript"> 
     var oauth_url = 'https://www.facebook.com/dialog/oauth/'; 
     oauth_url += '?client_id=<?=$app_id?>'; 
     oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/<?=$pageid?>?sk=app_<?=$app_id?>'); 
     oauth_url += '&scope=' 
     window.top.location = oauth_url; 
    </script> 
    <? 
    die(); 
} 

모두 작동하지만 사용자가 대화 상자를 수락하지 않는 경우 오류 응답을 구문 분석 할 수 없습니다. 복귀하는 URL은 다음과 같습니다

https://www.facebook.com/page?sk=app_appid&error_reason=user_denied&error=access_denied&error_description=The+user+denied+your+request.#_=_ 

그러나 탭 내부의 iframe이이 매개 변수가 없습니다.

어떻게해야합니까?

답변

0

URL의 app_data 매개 변수를 사용하여 탭의 iframe에만 데이터를 전달할 수 있습니다.

https://www.facebook.com/{your_page}?v=app_{app_id}&app_data={your_string}

일예를 : 당신은 같은 URL에 실패한 로그인 시도를 리디렉션해야합니다 사용자가 클릭이 "취소"대신 ​​"응용 프로그램으로 이동"경우 다른 리디렉션 URL을 정의 할 경우 https://www.facebook.com/{your_page}?v=app_{app_id}&app_data=login_failed

login_failed 여전히 디코딩 signed_request

+0

에 나타납니다 나는 찾을 수 없습니다. –

+0

로그인 코드에 'cancel_url'매개 변수를 추가하십시오 : 'cancel_url = https : //www.facebook.com/ {your_page}? v = app_ {app_id} & app_data = login_failed' –