【发布时间】:2018-09-21 14:54:39
【问题描述】:
如您所知,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。
fbConfig.php
<?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;
}
?>
index.php
<?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>';
}
?>
我的文件级别如下图所示。
最后在完成上述所有设置和代码后,当我尝试运行我的页面时,我得到了 LOGIN FACEBOOK BUTTON,然后点击那里,我得到了下面的屏幕截图错误。
我想要的是简单地发布我想要的内容而不显示任何弹出窗口或对话框,以便我可以通过我的 PHP 代码轻松使用它。
我试图在互联网上找到任何可行的解决方案,但现在都已经旧了,现在没有任何东西可以使用新的 Facebook Graph API v3.1。
【问题讨论】:
标签: php facebook facebook-graph-api facebook-php-sdk