【问题标题】:Generate Facebook access token with ads_read使用 ads_read 生成 Facebook 访问令牌
【发布时间】:2017-02-15 14:53:44
【问题描述】:

我想使用 Facebook 广告 API (https://github.com/facebook/facebook-php-ads-sdk) 获取有关活动和广告的 Facebook 统计信息。

我创建了一个应用程序(带有 ID 和密码),添加了营销 API,现在我可以生成一个具有 ads_read 权限的访问令牌,有效期为 2 个月。

有什么方法可以避免每隔一个月手动点击该按钮的过程?

我试过这个电话:

$tokenUrl = 'https://graph.facebook.com/v2.8/oauth/access_token?client_id=' . $app_id . '&client_secret=' . $app_secret . '&grant_type=client_credentials&scope=ads_read';

这给了我一个看起来像这样的访问令牌:680012345678976|aIDrLVvFqHXDzl6538RLUF4S9C4,但它不起作用(不支持的获取请求)。

手动生成的令牌长度为 164 个字符。

【问题讨论】:

  • 这太令人沮丧了。同样的问题。我必须创建一个具有关联用户的令牌,即我(因为这是你应该做的)。但这意味着如果我退出 Facebook,在为我的网站测试 Facebook 登录时,它会破坏营销 API 的服务器端访问令牌。我应该做一个假用户吗?
  • 我也没有看到 2 个月的到期。我看到Never。您还有这个过期问题吗?
  • 我最终做的是为营销 API(而不是 Facebook 登录按钮 + 营销 API)创建一个新应用程序。不得不再次通过 Facebook 的所有授权。现在我有了一个显然应该永远存在的令牌。

标签: php facebook facebook-ads-api


【解决方案1】:

我所做的是:

1.通话

https://www.facebook.com/v2.8/dialog/oauth?client_id=
<APP_ID>&redirect_uri=<REDIRECT_URI>&scope=ads_read

然后点击“允许”后,我会被重定向到

<REDIRECT_URI>/?code=<AUTHORIZED_CODE>

2.用授权码换取访问令牌

https://graph.facebook.com/v2.8/oauth/access_token?client_id=<APP_ID>&redirect_uri=<REDIRECT_URI>&client_secret=<CLIENT_SECRET>&code=<AUTHORIZED_CODE>

您的重定向 uri 应以 / 结尾,例如http://localhost:3000/

我通过手动复制并粘贴到浏览器中进行了尝试,但自动请求/响应应该给出相同的结果。

参考:https://developers.facebook.com/docs/marketing-api/access

【讨论】:

  • 注意:这仍然与用户相关联。因此,如果该用户与应用程序关联和取消关联,这可能是在测试您网站的“Facebook 登录”期间 - 那么该访问令牌将无效。
  • 你也可以在这里验证最终令牌的“所有者”developers.facebook.com/tools/debug/accesstoken
  • 我想这意味着如果你在服务器端访问ads_read,你应该创建一个单独的服务器端和客户端应用程序。
【解决方案2】:

您可以通过向您的服务器发出请求,将短期令牌用于长期令牌(即使没有过期)

GET https://graph.facebook.com/oauth/access_token?  
   grant_type=fb_exchange_token&         
   client_id={app-id}&
   client_secret={app-secret}&
   fb_exchange_token={short-lived-token} 

请注意,即使设置为永不过期的令牌也可能被用户无效,例如,如果他更改 FB 密码或完全删除您的应用。

更多详情请参考the docs

【讨论】:

  • 好像不行:No user access token specified
  • 短期令牌在大约两个小时后到期。如果您的令牌在 60 天后到期,则该令牌已经是一个扩展/长期存在的令牌。
  • 没有。我仍然相信答案是正确的,因为我使用此请求将登录令牌交换为具有“过期:从不”的令牌。我现在手动完成请求只是为了检查它并按预期工作。 @allanth,您是否尝试过使用 PHP 之外的一些 REST 客户端而不使用 FB SDK 来执行请求?
  • @David,我在浏览器中试过了。这是错误类型的访问令牌。很混乱。无论如何,我真的不在乎到期。如果可能,我对以编程方式获取/生成令牌更感兴趣。
  • @David,您能详细介绍一下吗?我能够获取 60 天的访问令牌,但我想延长它也是因为我想通过 cron 下载带有访问令牌的用户广告洞察。
猜你喜欢
  • 2015-09-27
  • 1970-01-01
  • 2017-02-09
  • 2012-12-13
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多