51

由于 Facebook 上的最新更改,关于 appsecret_proof:https ://developers.facebook.com/docs/reference/api/securing-graph-api/ ,即使在高级启用/禁用功能后,我们仍然无法下载性能报告在我们的应用程序中设置,或应用他们文档中描述的代码。

我们不断收到此错误:

{"error":{"message":"API 参数中提供的 appsecret_proof 无效","type":"GraphMethodException","code":100}}

我打开了一个机密错误,但没有人回复我。

我真的不知道我们还能尝试什么?

4

15 回答 15

56

这个错误(根据我的经验)几乎肯定是正确的;这意味着您通过 API 调用证明了无效的 appsecret_proof

假设您使用的是标准 PHP SDK 而没有进行修改,最可能的原因是:

  • 您在 SDK 代码中配置了错误的应用 ID
  • 您在 SDK 代码中配置了错误的应用密码
  • 您正在尝试使用来自错误/另一个应用程序的访问令牌
于 2013-09-09T02:41:00.673 回答
19

“Invalid appsecret_proof ...”错误的另一个潜在原因是与应用程序不关联的用户访问令牌。如果您使用图形资源管理器生成用户访问令牌,请确保从右上角的下拉列表中选择一个应用程序。否则,您将生成仅在图形 API 资源管理器中工作的令牌。

在发现错误之前,我向 Python SDK提交了一个错误。GUI 是魔鬼。

于 2016-03-28T22:32:20.080 回答
10

最新版本的 facebook PHP SDK 中没有错误。您需要根据文档创建 appsecret_proof:

$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);

然后将其作为参数传递给您的 api 调用。

请参阅此处的文档:https ://developers.facebook.com/docs/graph-api/securing-requests/

一旦我这样做了,一切都很好,我不必破解 base_facebook.php

于 2014-01-29T10:46:50.320 回答
9

Facebook SDK 中有一个错误。在尝试了 20 个小时来调试我自己的代码(没有问题!)之后,我在 base_facebook.php 中对此进行了注释:

/* Commented out by SJ 
    if (isset($params['access_token'])) {
      $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);
    }
*/

所有的问题都消失了!

于 2013-09-25T21:14:24.733 回答
3

这是错误是因为令牌正确。这可能是因为您使用不同的帐户来配置 Facebook 配置的 Web 应用程序和移动应用程序。两个帐户应该相同。

您的移动应用和 Web 应用的应用 ID 必须相同。

于 2017-07-06T09:01:30.490 回答
1

此错误是设置不正确的访问令牌的结果。例如,使用用户(管理员)的访问令牌发布到页面相册。通过设置正确的访问令牌,我几乎一直都解决了这个错误

于 2013-11-23T08:36:16.633 回答
1

如果此错误是意外行为,您可能已检查应用程序中的设置以要求它。取消选中它,您应该停止收到该错误。该设置位于设置 -> 高级中,称为“服务器 API 调用的应用程序秘密证明”。将其设置为否。

截至目前,该设置在此页面上(确保将您的 appId 放在 URL 中): https ://developers.facebook.com/apps/YOUR-APP-ID/settings/advanced/

请注意,这不是通用解决方案,仅适用于不希望这种行为的人的解决方案。

于 2014-05-23T13:31:55.957 回答
1

对我来说,是三个修复使它起作用

  1. 为开发人员在 Facebook 应用程序的高级配置中激活 Secret 应用程序和 API 访问权限。虽然理论上我不需要它,但它总是提示需要 appsecret_proof,即使这两个选项都关闭了。

应用程序的配置高级选项

  1. 在创建 appsecret_proof 时,用于创建它的 access_token 应该与在请求中发送的 access_token 以及它的用户 access_token 相同,我的错误是我正在使用应用程序 access_token。使用用户 access_token。

  2. 将参数 appsecret_proof 作为 appsecret_proof 发送,而不是作为 app_secret_proof 发送。一个小细节,但发生在我身上。

额外:对于 python,您可以像这样创建 appsecret_proof:

import hmac
import hashlib

facebook_app_secret = '<your_app_secret>'
facebook_access_token = '<your_user_access_token>'
appsecret_proof = hmac.new(facebook_app_secret.encode('utf-8'),
                           msg=facebook_access_token.encode('utf-8'),
                           digestmod=hashlib.sha256).hexdigest()
print(appsecret_proof)

facebook graph api 调用中获得,在 python 中使用 appsecret_proof

于 2020-12-30T23:16:04.763 回答
0

确保您的设置正确fbappid + fbappsecret

当这些设置不正确时会发生此错误

就像你有 2 个应用程序,一个开发和一个生产

你把代码弄乱了,仔细检查这两个

于 2015-06-24T12:26:00.510 回答
0

只针对有同样问题的人;

当您在 facebook 上将Client OAuth Login设置为“yes”时,您应该提供正确的Valid OAuth redirect URIs。否则 facebook 会抛出完全相同的错误。

于 2015-10-28T09:57:22.623 回答
0

在我的情况下,我需要通过以下方法设置默认访问令牌:setDefaultAccessToken()

我使用了 GraphApi 开发工具中生成的令牌,但我没有切换到正确的应用程序。它是通过将应用程序更改为适当的应用程序并使用重新生成的令牌来解决的。

于 2017-03-15T11:00:31.753 回答
0

我知道这是一个老问题,但我通过将应用程序更改为我应该用来生成访问令牌的正确应用程序来解决我的问题。例如从Project1Project2

于 2018-11-19T07:25:21.873 回答
0

在此处输入图像描述 也许您的访问令牌有问题,您需要 Business Manager 风格。您可以使用正则表达式从https://business.facebook.com/settings/system-users/ {sys_user_id}?business_id={business_id}的内容中获取令牌r'"accessToken":"([\d|\w]+)","context"'

于 2018-12-07T01:00:14.920 回答
0

为我工作:

$appsecret_proof = hash_hmac('sha256', $facebook_page_token, $app_secret);

WHEREfacebook_page_token是将页面关联到应用程序时创建的存储在我的数据库中的页面令牌。

于 2019-07-31T01:14:10.670 回答
0

问题来自错误的平台访问令牌。

您应该检查您更喜欢 API 的仪表板,并检查您的访问令牌来自何处。

于 2021-05-10T12:56:56.020 回答