我在我的网站上使用下面的代码尝试在我管理的Facebook页面上发布消息。我正在使用Facebook PHP SDK v5。每当我跑我得到指示给Facebook与一个错误,指出窗口中的代码,Facebook PHP SDK v5 OAuth登录错误,当作为页面发布到页面时
“URL阻止:此重定向失败,因为重定向URI没有在应用程序的客户端的OAuth设置白名单确保客户端和Web的OAuth登录。开启并将所有应用程序域添加为有效的OAuth重定向URI。“
但是,如果我转到图形API资源管理器并请求用户访问令牌,那么将访问令牌硬编码到脚本中就行了。我将Facebook登录添加到了我的应用设置中的产品标签,因为这是您可以在“有效的OAuth重定向URI”中添加的唯一地方。我很确定问题来自设置区域中的“有效的OAuth重定向URI”字段。我不知道该在该领域投入什么,或者甚至是这个问题。目前,我已经尝试将下列内容放在“有效的OAuth重定向URI”字段中,但没有运气;
只是我的域名即www.my-domain.com
的完整路径调用脚本即www.my-domain.com/calling-script.php
的我的服务器上的空白页面的完整路径,即www.my-domain.com/blank.html
没有工作。这是我第一次尝试使用Facebook PHP SDK,所以我确信我做的一切都错了......想知道是否有人能够给我一些指导呢?
更新: 查看下面发布的修复与修复。我原来的帖子对我的意图不是很清楚。我的目标是成功地向Facebook页面发布消息,而不是作为个人用户。希望这可以帮助那些在路上的人。
这里是我使用的PHP脚本:
session_start();
$path = "path-to-Facebook-autoloader-on-my-server";
include_once $path;
$fb = new Facebook\Facebook([
'app_id' => 'app-id-from-app-settings',
'app_secret' => 'app-secret-number-from-app-settings',
'default_graph_version' => 'v2.7',
]);
/////////////////////////////////////////////////////////////////////////
// If I uncomment the below line the script works fine, but the token expires often
// and I do not want to have to keep updating it
// $_SESSION['facebook_access_token'] = "access-token-obtained-from-Graph-API-Explorer";
/////////////////////////////////////////////////////////////////////////
$helper = $fb->getCanvasHelper();
$permissions = ['email', 'publish_actions']; // optional
try {
if(isset($_SESSION['facebook_access_token'])){
$accessToken = $_SESSION['facebook_access_token'];
}else{
$accessToken = $helper->getAccessToken();
}
}catch(Facebook\Exceptions\FacebookResponseException $e){
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}catch(Facebook\Exceptions\FacebookSDKException $e){
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if(isset($accessToken)){
if(isset($_SESSION['facebook_access_token'])){
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}else{
$_SESSION['facebook_access_token'] = (string)$accessToken;
// OAuth 2.0 client handler
$oAuth2Client = $fb->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string)$longLivedAccessToken;
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
// validating the access token
try{
$request = $fb->get('/me');
}catch(Facebook\Exceptions\FacebookResponseException $e){
// When Graph returns an error
if($e->getCode() == 190){
unset($_SESSION['facebook_access_token']);
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
exit;
}
}catch(Facebook\Exceptions\FacebookSDKException $e){
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
try{
// message must come from the user-end
$data = ['message' => 'test message...'];
$request = $fb->post('/me/feed', $data);
$response = $request->getGraphNode();
}catch(Facebook\Exceptions\FacebookResponseException $e){
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}catch(Facebook\Exceptions\FacebookSDKException $e){
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
echo $response['id'];
}else{
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
}