我有一個項目,我正在努力在哪裏我想使用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
以及頁面,使AJAX調用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>
?>
據對Facebook的網站documentstion這是Facebook如何說getAccessToken()
作品
嘗試從授權代碼獲取訪問令牌。此方法將向Graph API發出請求並返回響應。如果在該過程中出現錯誤,則會拋出FacebookSDKException。如果CSRF驗證失敗,也會拋出一個FacebookSDKException。
我遇到的問題是,當我的用戶是my-callback-url.php
並點擊#postButton
腳本,使一個AJAX調用facebook.php
如果facebook.php
無法獲得訪問令牌調用:
$redirect = $helper->getLoginUrl($callback, $permissions);
這將$redirect
值發送回my-callback-url.php
中的ajax函數,並且成功方法會將用戶發送到該重定向url。
一旦用戶進行身份驗證,Facebook的向用戶發送回my-callback-url.php
完整的URL回調看起來是這樣的:
https://www.my-domain.com/my-callback-url.php&fb=redirect?code=xxxxxxxxxx?state=xxxxxxxxxx
回調作出後,my-callback-url.php
與所獲得的代碼參數一起再次運行AJAX腳本從回調。我的問題是我如何將從回調獲得的代碼參數傳遞給facebook.php
中的getAccessToken()
函數?
似乎getAccessToken()
接受一個代碼參數。我想知道是否需要將代碼參數設置爲特定的會話變量,以便getAccessToken()
可以讀取它。有誰知道如何使這項工作?
_「在回調完成之後,my-callback-url.php再次運行ajax腳本以及從回調中獲得的代碼參數」_ - 那麼這對於......來說有什麼好處?你應該直接在你接收它的地方處理代碼參數 - 這就是你的'my-callback-url.php'腳本。在那裏直接獲取令牌 - 並且不涉及任何AJAX廢話。 – CBroe