2011-06-23 17 views
0

私はPHP SDK 2.1.2を使用しており、JS SDKとして標準http://connect.facebook.net/en_US/all.jsを使用しています。 (電子メール、USER_LOCATION、user_birthday)とFacebookセッションjs-SDKからphp-SDKへ

1)初期JS SDK、コールFb.UIは、方法::

これは私が達成したいものです 'のOAuth'、応答では、成功したユーザーであればサーバーへのajax呼び出しを許可し、PHP-SDKを使用してGraph APIを呼び出し、必要なデータを取得します。 (まあ、あなたはJS SDK経由でAPIをグラフ化するための呼び出しを行うために主張するかもしれないが、現在のシナリオでは、PHP SDKを使用するために私が必要)

問題

AJAX経由で呼び出されたファイルが初期化されません。セッションと私はnullを取得する代わりに、Facebookのsdkは理想的にクッキーを読み込んで、クライアント側ですでに許可が与えられているのでアクティブなセッションを持つべきです。

マイコード

メインファイル

<?php 
session_start(); 
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
require 'src/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => 'xxxxxxxxxxxxxxxxxxxxxxxx', 
    'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyy', 
    'cookie' => true, 
)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 
     print_r($me); 
    } catch (FacebookApiException $e) { 
       error_log($e); 
    } 
} 

?>

<!doctype html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
<head> 
    <title>php-sdk</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">   
    </script> 
</head> 
<body> 

<input type="button" onclick="getpermission();"/> 
<!-- 
    We use the JS SDK to provide a richer user experience. For more info, 
    look here: http://github.com/facebook/connect-js 
--> 
<div id="fb-root"></div> 
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script> 
<script type="text/javascript"> 
    FB.init({ 
     appId : '<?php echo $facebook->getAppId(); ?>', 
     session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    }); 

function getpermission(){ 
     FB.ui({ 
     method: 'oauth', 
     client_id: <?php echo $facebook->getAppId(); ?>, 
     perms: 'email,user_location,user_birthday' 
     },function(permObj) { 
      if(permObj){ 
       $.ajax({ 
         type: "POST", 
         url: 'page2.php', 
         dataType:'text', 
         success: function(data) { 

           return; 
             }, 
         error:function (xhr, ajaxOptions, thrownError){ 
          alert(xhr.status); 
          alert(thrownError); 
         }  
         }); 

      } 
      }); 
     } 

</script> 
</body> 

AJAX

012を経由して呼ばれるファイル
<?php 
session_start(); 
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
require 'src/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
'appId' => 'xxxxxxxxxxxxxxxx', 
'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyy', 
'cookie' => true, 
)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 
     print_r($me); 
    } catch (FacebookApiException $e) { 
      error_log($e); 
    } 
} 

echo "hello"; 
?> 

上記の例に表示されている場合、警告ボックスに/ meオブジェクト全体が表示され、代わりに「hello」が表示されます。なぜこれが動作していないのか分かりません。私は何が欠けていますか?

シナリオ: - 私は、ページのリロード(top.location.href)を行う場合には権限が付与された後、私は希望のオブジェクトを取得しますが、我々は、このメカニズムでリロードを避けるためにしようとしています。私はクッキーの問題があるかもしれないと思っていたが、それでもロードに失敗したので、私はP3Pヘッダーを設定しようとしました。

また、私はPHP SDK 2.1.1,2.1.2,3.0.1でこれを試しましたが、新しいPHP-SDKがJS Sdkとまだ互換性がないと聞いたことがありますか?

ありがとうございます。

答えて

0

AJAX呼び出しを使用してCookieを設定することはできません。ドメインBでドメインAのサードパーティCookieを設定するには、ドメインBのページがドメインAのページを取得する必要があります。呼び出しが行われていません。

oauthダイアログ(permObj->access_token私が間違っていない限り、私はそうでない限り)からの応答からアクセストークンをフェッチし、あなたのリクエストパラメータとして投稿することをお勧めしますAJAX呼び出し。その後、トークン値を使用して$facebook->setAccessTokenメソッドを呼び出すことができ、すべて設定する必要があります。

関連する問題