您知道Facebook在2018年7月26日推出了新的Graph API v3.1,这为开发人员带来了许多变化。我现在的问题之一是如何使用Facebook Graph API v3.1 PHP SDK在Facebook个人资料/页面时间线上共享/发布?
提醒:Graph API v2.7将在2018年10月5日弃用。请使用API Upgrade Tool来了解这可能会对您的应用产生影响。有关更多详细信息,请参见changelog
为此,我创建了一个具有某些设置的新应用,如以下屏幕截图所示。
为此,我将下面提到的代码与facebook-php-graph-sdk-5.x一起使用。
<?php
if(!session_id()){
session_start();
}
// Include the autoloader provided in the SDK
require_once __DIR__ . '/facebook-php-graph-sdk-5.x/autoload.php';
// Include required libraries
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
/*
* Configuration and setup Facebook SDK
*/
$appId = 'APP_ID'; //Facebook App ID
$appSecret = 'APP_SECRET'; //Facebook App Secret
$redirectURL = 'MAIN_PAGE_URL_SAME_AS_IN_APPS_SETTING'; //Callback URL
$fbPermissions = array('publish_actions'); //Facebook permission
$fb = new Facebook(array(
'app_id' => $appId,
'app_secret' => $appSecret,
'default_graph_version' => 'v2.6',
));
// Get redirect login helper
$helper = $fb->getRedirectLoginHelper();
// Try to get access token
try {
if(isset($_SESSION['facebook_access_token'])){
$accessToken = $_SESSION['facebook_access_token'];
}else{
$accessToken = $helper->getAccessToken();
}
} catch(FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
?>
<?php
// Include FB configuration file
require_once 'fbConfig.php';
if(isset($accessToken)){
if(isset($_SESSION['facebook_access_token'])){
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}else{
// Put short-lived access token in session
$_SESSION['facebook_access_token'] = (string) $accessToken;
// OAuth 2.0 client handler helps to manage access tokens
$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;
// Set default access token to be used in script
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
//FB post content
$message = 'Test message from stackoverflow.com website';
$title = 'Post From Website';
$link = 'http://www.stackoverflow.com/';
$description = 'stackoverflow is simply awesome.';
$picture = 'https://i.stack.imgur.com/MybMA.png';
$attachment = array(
'message' => $message,
'name' => $title,
'link' => $link,
'description' => $description,
'picture'=>$picture,
);
try{
// Post to Facebook
$fb->post('/me/feed', $attachment, $accessToken);
// Display post submission status
echo 'The post was published successfully to the Facebook timeline.';
}catch(FacebookResponseException $e){
echo 'Graph returned an error: ' . $e->getMessage();
exit;
}catch(FacebookSDKException $e){
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
}else{
// Get Facebook login URL
$fbLoginURL = $helper->getLoginUrl($redirectURL, $fbPermissions);
// Redirect to Facebook login page
echo '<a href="'.$fbLoginURL.'"><img src="https://www.freeiconspng.com/uploads/facebook-login-button-png-11.png" /></a>';
}
?>
我的文件级别如以下屏幕截图所示。
最后,在完成所有上述设置和代码后,当我尝试运行页面时,我得到了登录脸部按钮,然后单击此处,出现了以下屏幕截图错误。
我想要的是简单地发布我想要的内容,而不显示任何POPUP或对话框,以便我可以通过我的PHP代码轻松使用它。
我试图在Internet上找到任何可行的解决方案,但是它们都已经过时了,新的Facebook Graph API v3.1都无法使用。
答案 0 :(得分:3)
我想要的是简单地发布我想要的内容,而不显示任何POPUP或对话框
对于用户个人资料而言,这不再可行。您必须改为使用“共享对话框”。 10
被删除,没有替代品或解决方法。
对于页面,您可以使用publish_actions
和manage_pages
将具有页面令牌的页面发布到页面上。
答案 1 :(得分:0)
是的,您应该在页面供稿而不是个人供稿上发布。
正如luschn所说,您需要manage_pages
和publish_pages
权限才能获取正确的页面访问令牌。
首先,您必须以开发人员模式开发应用程序,然后需要使用这些权限提交以供App Review使用。
此过程要求您上载带有演示的截屏视频,并将该应用程序放置在公共场所,以便Facebook Review团队可以访问并对其进行测试。
还有很长的路要走。