私は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とまだ互換性がないと聞いたことがありますか?
ありがとうございます。