FB App 必须使用页面访问令牌调用此方法

Posted

技术标签:

【中文标题】FB App 必须使用页面访问令牌调用此方法【英文标题】:FB App This method must be called with a Page Access Token 【发布时间】:2018-03-09 13:49:38 【问题描述】:

当我使用此代码时:

<?php 

require_once "vendor/autoload.php";

$config = ...;

use FacebookAds\Api;
use FacebookAds\Object\Page;

Api::init(
    $config['facebook']['app_id'], //APP_ID
    $config['facebook']['app_secret'], //APP SECRET
    $config['facebook']['app_access_token'] //Token generated by https://developers.facebook.com/tools/explorer for app
);

$page = new Page($config['facebook']['page_id']);
$leadgen_forms = $page->getLeadgenForms(); //heres an error

我得到错误: Fatal error: Uncaught FacebookAds\Http\Exception\AuthorizationException: (#190) This method must be called with a Page Access Token in ...

但是当我将 page_access_token 代替 app_access_token(来自https://developers.facebook.com/tools/explorer)时,我得到错误:Uncaught FacebookAds\Http\Exception\AuthorizationException: Invalid appsecret_proof provided in the API argument in ...。当我删除行时:

【问题讨论】:

向我们展示您在哪里/如何“使用 page_access_token 代替 app_access_token” @CBroe,我只是从资源管理器复制并粘贴到配置中代替 app_access_token; 【参考方案1】:

您似乎正在处理仅用于页面的潜在客户表单。您的个人资料必须分配有管理员/开发者角色。您肯定似乎错过/复制了以下其中一项的错误值。 下面的细节是从https://developers.facebook.com/docs/marketing-api/guides/lead-ads/retrieving复制过来的,方便理解

人们可以通过以下方式阅读线索或实时更新:

使用页面访问令牌,即页面管理员的页面访问令牌。页面访问令牌还允许您读取广告特定字段 例如 ad_id、campaign_id 等,如果您至少有广告客户级别 对与线索广告关联的广告帐户的权限。

使用用户访问令牌属于页面管理员。要访问所有潜在客户数据和广告级别数据,访问令牌应该具有 manage_pages 和 ads_management 范围。

您可以使用主页角色管理用户权限。此外,如果您需要 要允许在页面上为具有非管理员角色的用户下载线索,您 可以使用leadgen_whitelisted_users 端点将其列入白名单。

【讨论】:

如何获得这些令牌? 在这里查看developers.facebook.com/docs/marketing-api/access 我对页面和潜在客户请求使用了不同的 API 对象。我仍然不确定为什么现在不一样了。【参考方案2】:

其他答案并未显示如何实际发送页面访问令牌而不是应用访问令牌或用户访问令牌。

require_once "vendor/autoload.php";

$config = ...;

use FacebookAds\Api;
use FacebookAds\Object\Page;
use FacebookAds\Session;

$api = Api::init(
    $config['facebook']['app_id'], //APP_ID
    $config['facebook']['app_secret'], //APP SECRET
    $config['facebook']['app_access_token'] //Token generated by https://developers.facebook.com/tools/explorer for app
);
$page_api = $api->getCopyWithSession(new Session(
    $config['facebook']['app_id'], //APP_ID
    $config['facebook']['app_secret'], //APP SECRET
    $page_access_token  // <-- You can get this by accessing 'me/accounts' w/ the initial API
));
$page = new Page($config['facebook']['page_id'], null, $page_api); // <-- use the api with the Page Access Token here
$leadgen_forms = $page->getLeadgenForms(); //heres an error

【讨论】:

以上是关于FB App 必须使用页面访问令牌调用此方法的主要内容,如果未能解决你的问题,请参考以下文章

无法再从 http 页面调用方法 FB.getLoginStatus

用于服务器拉取 FB 页面信息的持久 FB 访问令牌

扩展 Facebook 页面访问令牌

FB.logout() 调用时没有访问令牌错误

通过Console App C#将照片发布到Facebook页面

facebook:永久页面访问令牌?