【问题标题】:Publish article to facebook from headless website using Facebook PHP SDK (for dummies)使用 Facebook PHP SDK 将文章从无头网站发布到 facebook(对于傻瓜)
【发布时间】:2017-09-29 23:49:23
【问题描述】:

我真的对 facebook api 感到困惑。 我有一个安装了基于 PHP 的 CMS 的网站。当文章在我的网站上发布时,我想在我的 Facebook 业务页面上创建一个帖子,其中包含返回该文章的链接。

现在,澄清一下:这是一个无头网络服务器,用于发布到 facebook。没有 facebook 登录,没有 facebook 用户 - 只有一个服务器和一个 facebook 页面。目标是实现自我驱动。编写/配置一次,无需手动更新令牌或其他任何东西即可工作。

问题(已编辑和重提)

如何以编程方式获取授权以将帖子发布到我的 Facebook 页面的访问令牌?

程序I've seen proposed是:

第一次通过(以用户身份验证,授予应用权限(弹出对话框),重定向回页面):

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

但这将涉及一个用户,这是我的服务器上没有的。 :-(

这是我到目前为止所做的,一步一步的

创建应用

  • 我需要create a Facebook AppAdd a New app 按钮)。
  • 该应用设置在Apps for Pages 类别下,并指向我的网站网址。
  • App IDApp Secret 位于您的应用的 Settings 下。

获取访问令牌

  • 创建应用后,我去了Facebook Graph Explorer
  • 在图形资源管理器的标题栏中,我从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());
}

【问题讨论】:

  • fb page的用户账号和fb app的用户账号是否相同?
  • 是的,你当然需要一个应用程序。但是您不需要将页面“连接”到应用程序;相反,您只需在登录期间向页面管理员询问必要的权限。
  • @CBroe 你能详细说明一下吗?特别是“在登录期间向页面管理员询问必要的权限”部分(因为我是页面管理员,并且不知道如何在技术上向自己询问权限)。也许把它作为一个答案?
  • 如果您只需要这个,您也可以从其他地方获取令牌,例如 Graph API Explorer。无需实际编码即可对其进行扩展,然后您只需在浏览器中手动执行请求即可。
  • 不,它并不能消除对应用程序的需求。没有应用程序就无法与 API 对话。 “如果是这样,我怎样才能让它成为一个长期存在的令牌或永久令牌?”——这在文档中也有详细的解释。

标签: php facebook facebook-graph-api


【解决方案1】:

问题解决了!!

  1. 转到Graph API Explorer
  2. 按照原帖中Getting the access token 中所述创建访问令牌,并具有在页面上发布的权限。
  3. 复制您的访问令牌,并将其粘贴到Access token debugger 并点击调试。
  4. 在这个屏幕的底部,有一个按钮Extend Access token

此按钮随后传递的令牌是永不过期的令牌!将新的永久令牌插入上面的代码中,世界上的一切都会对你微笑。

:-D

【讨论】:

  • 在我看来,新令牌将在 2 个月后到期。猜猜他们改变了它。
猜你喜欢
  • 2011-11-04
  • 2012-06-19
  • 2012-12-01
  • 2014-06-21
  • 1970-01-01
  • 2016-12-16
  • 2012-01-16
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多