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

时间:2018-03-09 13:49:39

标签: php facebook fbsdk

当我使用此代码时:

<?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 ...。当我删除行:

2 个答案:

答案 0 :(得分:5)

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

  

可以通过以下方式阅读潜在客户或实时更新:

     

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

     属于页面管理员的

使用用户访问令牌。要访问所有潜在客户数据和广告级数据,访问令牌应该具有   manage_pages和ads_management范围。

     

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

答案 1 :(得分:1)

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

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