2011-08-03 15 views
3

FacebookのiFrameアプリケーションを使用しているユーザーのユーザーIDを取得する必要があります。すべての間違った情報と時代遅れの情報を調べながら、私は正しい情報を見つけたと思います。PHPのiFrameアプリケーションのFacebook承認

ユーザーがページをヒットすると、そのユーザーにアプリケーションを許可する必要があります。私のPHPでは、私はこれを行う:

$facebook = new Facebook($appData); 
$user = $facebook->getUser(); 

if(!$user) { 
    echo '<script>top.location.href="'.$facebook->getLoginUrl().'";</script>'; 
    die(); 
} 

これは私に認証要求を与えるが、その後、私のサーバーに戻って私をプッシュし、ないのiFrameアプリケーションのURL(http://app.facebook.com/blah)。私は手動でURLを構築し、app.facebook.com URIへのURLを設定しようとしましたが、そのURLがアプリに対して有効ではないというエラーが表示されます。

承認後にアプリにリダイレクトする方法を教えてください。このアプリはFacebook内では一般にアクセスできないため、Facebook Connectログインを探しているわけではありません。

編集

これは私がREQUEST_URIをいじるときに私が得る正確なエラーです:

API Error Code: 191 
API Error Description: The specified URL is not owned by the application 
Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration. 

答えて

5

あなたがredirect_uriパラメータを設定しようとしています。

if(!$user) { 
    $params = array('redirect_uri' => 'http://app.facebook.com/blah/'); 
    die('<script>top.location.href="'.$facebook->getLoginUrl($params).'";</script>'); 
} 
+0

のためにはい、私はそれを試してみました。私は「編集」の下に追加したエラーを受け取ります。私の知る限り、アプリは正しく設定されています。承認ビットを削除すると、アプリはFacebookのiFrameに表示され、app.facebook.com/blahのURLの下に表示されます。 – dragonmantank

+0

上記のコードサンプルを実行しようとするとどうなりますか? – jBit

+0

実際には、代わりにheader()リダイレクトを使用して

0

移動先:あなたの開発者のアプリケーションの設定で

http://developers.facebook.com/apps 

あなたのFacebookのアプリは、キャンバスアプリであることを知っているように、URLの設定を変更する必要があります。設定では、WebタブにあるすべてのURLを削除してから、すべてのURLがOn Facebookタブに適切に設定されていることを確認してください。

+0

「Web」は空で、「On Facebook」 - >「Canvas Settings」ページでは、キャンバスページに「blah」と記入されています。キャンバスURLには、アプリを含むWebサーバー上の場所が入ります。他に何も記入されていない。 – dragonmantank

0

あなたはインラインフレームアプリでFacebookアプリケーションを許可するために、サンプルコードを以下のことができ

<?php 
ob_start(); 
session_start(); 

/* 
* App Config 
*/ 
$config= array(
      'appId' => 'APPID', 
      'secret' => 'APPSECRET', 
      'canvas'=>"http://apps.facebook.com/sampleapp/"); 


$GRAPH_URL = "https://graph.facebook.com/"; 
$scope  = "publish_stream,email"; 
$auth_url = "https://www.facebook.com/dialog/oauth?client_id=".$config['appId']."&redirect_uri=".urlencode($config['canvas']). "&scope=" . $scope; 


$signed_request = $_REQUEST["signed_request"]; 

list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

if(is_array($data)){ 
    $authToken = $data['oauth_token']; 
    $userId  = $data['user_id']; 
    $_SESSION['auth_token'] = $authToken; 

    //check for permission// 
    $permissions = json_decode(curl_get_file_contents($GRAPH_URL . "me/permissions?access_token=" . $authToken), TRUE); 
    if(array_key_exists('publish_stream', $permissions['data'][0])) { 
     $post = array('client_id'=>$config['appId'],'redirect_uri'=>$config['canvas'].'','client_secret'=>$config['secret'],'type'=>'client_cred');  
     $token_url="https://graph.facebook.com/oauth/access_token"; 
     $response = curlpost($token_url,$post); 
     $params = explode('&',$response);  
     if(isset($params[0])){ 
      $token = explode('=',$params[0]); 
      if($token[0]=='access_token'){ 
       $access_token = $token[1]; 
       $_SESSION['access_token']=$access_token; 
       $_SESSION['authorized']=1;  
       echo("<script> top.location.href='" . $config['canvas']."home.php'; </script>");  
      } 
     }else{ 
      echo("<script> top.location.href='" . $config['canvas']."error.php'; </script>"); 
     } 


    }else{  
     $url='https://graph.facebook.com/oauth/authorize?client_id='.$config['appId'].'&redirect_uri='.urlencode($config['canvas']).'&display=page&scope=publish_stream,email&type=user_agent'; 
     echo("<script> top.location.href='" . $url. "'</script>");  
    } 


}else{ 
    echo("<script> top.location.href='" . $config['canvas']."error.php';</script>");   
} 


?> 

グラフAPIを使用してチェックこのリンクは詳細

http://forum.bharathlisting.com/showthread.php?tid=13&pid=20#pid20

関連する問題