私はFacebookのPHP SDK v5を使ってFacebookページにデータを投稿したいところですが、私はajaxを作るのに問題があります私のFacebookスクリプトを呼び出します。Facebook PHP SDK v5 getAccessToken()関数はどのように動作しますか
これは私のfacebook.php
ファイルです:
<?php
session_start();
echo facebook();
function facebook(){
include_once $_SERVER['DOCUMENT_ROOT']."/Facebook/autoload.php";
$permissions = ['manage_pages', 'publish_pages'];
$callback = "https://www.my-domain.com/my-callback-url.php?fb=redirect";
$fb = new Facebook\Facebook([
'app_id' => 'xxxxxxxxxxx',
'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
'default_graph_version' => 'v2.10',
]);
$helper = $fb->getRedirectLoginHelper();
try {
if (isset($_SESSION['facebook_access_token'])) {
$accessToken = $_SESSION['facebook_access_token'];
} else {
$accessToken = $helper->getAccessToken();
}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
$res['error'] = 'Error: Graph returned a session error: ' . $e->getMessage();
return json_encode($res);
} catch(Facebook\Exceptions\FacebookSDKException $e) {
$res['error'] = 'Error: Facebook SDK returned a session error: ' . $e->getMessage();
return json_encode($res);
}
if (!isset($accessToken)) {
$redirectUrl = $helper->getLoginUrl($callback, $permissions);
$res['login'] = $redirectUrl;
return json_encode($res);
}else{
// rest on the script to post to a page
}
}
?>
これはmy-callback-url.php
だけでなく、これはFacebooksのウェブサイト上でdocumentstionによるとfacebook.php
ファイル
<?php
if(isset($_GET['fb'])){
$code = $_GET['code'];
}else{
$code = '';
}
<script type="text/javascript">
jQuery(document).ready(function($) {
var code = "<?php echo $code; ?>";
if(code !== ''){
postToFB(code);
}
$('#postButton').on('click',function(){
postToFB(code);
}
function postToFB(code){
$.ajax({
type: "POST",
url: 'facebook.php',
data: {"somePostData": "someValue", "redirectCode":code},
success: function (data) {
var json = $.parseJSON(data);
if(json.hasOwnProperty('login')){
window.location.replace(json.login);
}
}
});
}
});
</script>
?>
にAjaxの呼び出しを行うページですどのようにFacebookはgetAccessToken()
作品を言う
認証コードからアクセストークンを取得しようとします。このメソッドは、Graph APIに要求を行い、応答を返します。そのプロセスにエラーがあった場合、FacebookSDKExceptionがスローされます。 CSRFの検証に失敗した場合にも、FacebookSDKExceptionがスローされます。
私はに実行している問題は、私のユーザーがmy-callback-url.php
にあり、#postButton
をクリックしたときにfacebook.php
は、それが呼び出したアクセストークンを取得できない場合、スクリプトがfacebook.php
へのAJAX呼び出しを行います:
$redirect = $helper->getLoginUrl($callback, $permissions);
これはmy-callback-url.php
に戻っAJAX機能に$redirect
値を送信し、成功の方法は、そのリダイレクトURLにユーザーを送信します。
ユーザーが認証されると、Facebookは戻っmy-callback-url.php
にユーザーを送信し、完全なURLコールバックは、次のようなものになります。コールバックが行われた後、my-callback-url.php
が得られたコードのパラメータと一緒に再びAjaxのスクリプトを実行します
https://www.my-domain.com/my-callback-url.php&fb=redirect?code=xxxxxxxxxx?state=xxxxxxxxxx
をコールバックから。私の質問は、facebook.php
の内部のgetAccessToken()
関数にコールバックから取得したコードパラメータを渡す方法はありますか?
getAccessToken()
はコードパラメータを受け入れていないようです。 getAccessToken()
を読むためにコードパラメータを特定のセッション変数に設定する必要があるかどうかは疑問です。誰もこの仕事をする方法を知っていますか?
_ "コールバックが行われた後、my-callback-url.phpは、コールバック" _ - から得られたコードパラメータと一緒にajaxスクリプトを再実行します。コードパラメータは、受け取ったところで直接処理する必要があります。これは 'my-callback-url.php'スクリプトにあります。そこにトークンを直接取得し、その時点でAJAXナンセンスは使用しないでください。 – CBroe