将照片作为页面本身上传到Facebook页面,以PHP编程方式


Uploading photos to a Facebook Page as the Page itself, programmatically in PHP

Background

我在了解如何以编程方式将照片发布到 Facebook 页面时遇到了一些麻烦。我已经通读了关于作为页面进行身份验证的Facebook文档,但所有示例都涉及Facebook用户。到目前为止,我刚刚使用Facebook的Graph API Explorer手动生成了所需的访问令牌。(三)

我尝试过什么

使用这个简单的代码,我成功地上传了图片,但是它被张贴在我自己的墙上,以我自己的名字在我自己的相册中,而不是在Facebook页面上,在Facebook页面的相册中以Facebook页面名义。我需要将其作为Facebook页面本身发布到特定的Facebook页面上(1)

<?php
require 'facebook-php-sdk/src/facebook.php';
require 'config.php';
$facebook = new Facebook(array(
    'appId' => $config['facebook_appId'],
    'secret' => $config['facebook_appSecret'],
    'fileUpload' => true
));
$facebook->setAccessToken($config['facebook_pageAccessToken']);
$args = array(
    'message' => 'Facebook API test',
    'source' => '@'.realpath(__DIR__.'/404.jpg')
);
$data = $facebook->api('/'.$config['facebook_pageId'].'/photos', 'post', $args);

关于代码

  • $config['facebook_appId']来自我创建的虚拟测试应用程序
  • $config['facebook_appSecret']来自我创建的虚拟测试应用程序
  • $config['facebook_pageAccessToken']是使用范围从图形 API 资源管理器生成的 manage_pagespublish_streamphoto_uploadoffline_access (3)
    • 作为对潜在未来访问者的旁注,事实证明我生成了一个用户访问令牌而不是页面访问令牌,这就是它被张贴在我自己的墙上的原因,在我自己的相册中。
  • $config['facebook_pageId']是页面的 ID(我也使用图形 API 资源管理器找到它)
  • 成功完成后$data包含图像的ID和墙柱(?

问题摘要

  1. 如何将照片作为脸书主页本身发布到脸书主页?
  2. 这是针对开发人员来来去去的项目。有没有办法让我拥有一个独立于特定 Facebook 用户的不可变页面访问令牌,或者依赖于(虚拟)Facebook 应用程序以某种方式动态生成一个?
  3. 我如何(如有必要)作为 Facebook 页面进行身份验证 - 在 PHP 中以编程方式为我提供页面访问令牌?
代码示例或

指向简明文档和/或教程的链接(最好带有示例)将不胜感激。

这三个问题的答案是:

  • 获取作为页面管理员的用户授予应用manage_pages权限

  • 如果执行了此客户端(即 Javascript SDK),则需要使用方案 4 的说明扩展其访问令牌 https://developers.facebook.com/roadmap/offline-access-removal/

  • 通过调用/me/permissions或调用/[PAGE_ID]/?fields=access_token检索页面的access_token。如果在检索页面访问令牌之前扩展了页面管理员的access_token,则页面访问令牌不会过期,除非用户不再是页面管理员或更改其密码、撤销对应用的权限等(上述文档中的方案 5)

  • 使用该访问令牌将照片上传到页面的墙上。

我认为这些步骤中的大多数都在这里得到澄清:https://developers.facebook.com/docs/authentication/pages/(以页面身份登录)或在此页面文档中