为什么我会收到“API参数中提供的appsecret_proof无效”

时间:2013-09-08 11:58:03

标签: facebook facebook-graph-api app-secret

自Facebook上的最新更改以来,关于appsecret_proof:https://developers.facebook.com/docs/reference/api/securing-graph-api/,即使在我们的应用中启用/停用高级设置功能后,我们仍然无法下载效果报告,或者按照文档中的说明应用代码

我们不断收到此错误:

  

{“error”:{“message”:“API参数中提供的appsecret_proof无效”,“类型”:“GraphMethodException”,“code”:100}}

我打开了一个保密的错误,但没有人回答我的回答。

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

15 个答案:

答案 0 :(得分:44)

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

假设您在没有修改的情况下使用标准PHP SDK,最可能的原因是:

  • 您在SDK代码中配置了错误的应用ID
  • 您在SDK代码中配置了错误的应用密码
  • 您正在尝试使用来自错误/其他应用的访问令牌

答案 1 :(得分:18)

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

在我发现错误之前,我使用Python SDK filed a bug。图形用户界面是魔鬼。

答案 2 :(得分:10)

Facebook SDK中存在错误。经过20个小时尝试调试我自己的代码(没有问题!)后,我在base_facebook.php中对此进行了评论:

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

所有问题都消失了!

答案 3 :(得分:9)

最新版本的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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

此错误是设置错误访问令牌的结果。例如,使用用户(admin)的访问令牌发布到页面相册。我通过设置正确的访问令牌

几乎一直解决了这个错误

答案 6 :(得分:1)

如果此错误是意外行为,您可能已经检查了应用中的设置以要求它。取消选中它,您应该停止收到该错误。该设置位于设置中 - >高级,被称为“服务器API调用的App Secret Proof”。将其设置为NO。

截至目前,该设置位于此页面上(请务必将您的appId放入网址中):https://developers.facebook.com/apps/YOUR-APP-ID/settings/advanced/

请注意,这不是一个通用的解决方案,只是那些不想要这种行为的人的解决方案。

答案 7 :(得分:1)

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

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

Configuration Avanced options of your app

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

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

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

#include <iostream>

template <typename T>
void globalDoSomething(T &&data) {
    std::cout << "We're doing it!!" << std::endl;
}

template <typename T>
class A {
public:
    void doSomething(T &&data);
};

template <typename T>
void A<T>::doSomething(T &&data)
{
    std::cerr << "Ah, man. I won't compile." << std::endl;
}

template class A<int>;

int main()
{

    int b = 0;
    globalDoSomething(b);

    A<int> a;
    a.doSomething(b);

    return 0;
}

来自facebook graph api calls with appsecret_proof in python

答案 8 :(得分:0)

确保您的设置正确fbappid + fbappsecret

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

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

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

答案 9 :(得分:0)

仅适用于遇到同样问题的人;

在Facebook上将客户端OAuth登录设置为“是”时,您应该提供正确的有效OAuth重定向URI 。否则facebook会抛出完全相同的错误。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

enter image description here 可能您的访问令牌有问题,您需要业务管理器样式。 您可以使用正则表达式r'"accessToken":"([\d|\w]+)","context"'https://business.facebook.com/settings/system-users/ {sys_user_id}?business_id = {business_id}的内容中获取令牌

答案 13 :(得分:0)

为我工作:

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

facebook_page_token是我将页面与应用程序相关联时在数据库中存储的页面令牌。

答案 14 :(得分:0)

问题来自错误的平台访问令牌。 您应该检查您喜欢 API 的仪表板,并检查访问令牌的来源。