我对facebook api感到困惑。 我有一个安装了基于PHP的CMS的网站。当文章发布在我的网站上时,我想在我的Facebook商业页面上创建一个帖子,其中包含一篇返回本文的链接。
现在,澄清一下:这是一个无头网络服务器,它将发布到Facebook。没有Facebook登录,没有Facebook用户 - 只有服务器和Facebook页面。目标是自我驱动。写入/配置一次,它无需任何手动更新令牌或诸如此类的东西。
如何以编程方式获取授权将帖子发布到我的Facebook页面的访问令牌?
首次通过(以用户身份验证,授予应用权限(弹出对话框),重定向回页面):
GET https://www.facebook.com/v2.9/dialog/oauth?client_id=$APP_ID&redirect_uri=$MY_URL&state=&scope=publish_pages
第二遍(获取应用的访问令牌,重定向回页面):
$CODE = $_REQUEST["code"]; // From facebook redirect process
GET https://graph.facebook.com/v2.9/oauth/access_token?client_id=$APP_ID&client_secret=$APP_SECRET&code=$CODE&redirect_uri=$MY_URL
但这会涉及用户,这是我服务器上没有的东西。 : - (
制作应用
Add a New app
按钮)。 Apps for Pages
下设置,并指向我的网站网址。App ID
和App Secret
位于您的应用的Settings
下。获取访问令牌
Application
下拉列表中选择了我新创建的应用。Access Token
的大型文本字段。在右侧的下拉列表中,我从Page access token
选择了我的Facebook页面。Request publish_pages
,在此时我收到了一个想要让我确认的对话框。Node: me
和搜索字段。我点击此处,然后再次选择access_token
。Submit
按钮为我提供了一个带有相关访问令牌的JSON字符串。现在,这是一个短命的令牌(大约一个小时)。但即使是长期存在的令牌也会在某个时刻到期。 目标必须是找到一种在代码实例化时以编程方式请求令牌的方法。
发布到Facebook
以下代码使用短期令牌。
$appId = 'xxxxxxxxxxxxxxxx';
$appSecret = 'yyyyyyyyyyyyyyyyyyyyy';
$accessToken = 'TheStringIGotFromGraphExplorer';
$fb = new \Facebook\Facebook([
'app_id' => $appId,
'app_secret' => $appSecret,
'default_graph_version' => 'v2.9'
]);
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post('/me/feed', [
'link' => $article->getUrl(),
'message' => $article->getHeader(),
'description' => $article->getIngress()
], $accessToken);
$graphNode = $response->getGraphNode();
$LOG->debug(__FILE__,__LINE__,"Posted with id: " . $graphNode['id']);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
$LOG->error(__FILE__,__LINE__,"Graph returned an error: " . $e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
$LOG->error(__FILE__,__LINE__,"Facebook SDK returned an error: " . $e->getMessage());
}
答案 0 :(得分:0)
问题解决了!!
Getting the access token
下的说明创建访问令牌,并具有在页面上发布的权限。Extend Access token
。此按钮随后提供的令牌是永远不会过期的令牌!将新的永久性令牌插入上面的代码中,世界上的一切都会对你微笑。
: - D< - 我开心