自Facebook上的最新更改以来,关于appsecret_proof:https://developers.facebook.com/docs/reference/api/securing-graph-api/,即使在我们的应用中启用/停用高级设置功能后,我们仍然无法下载效果报告,或者按照文档中的说明应用代码
我们不断收到此错误:
{“error”:{“message”:“API参数中提供的appsecret_proof无效”,“类型”:“GraphMethodException”,“code”:100}}
我打开了一个保密的错误,但没有人回答我的回答。
我真的不知道我们还能尝试什么?
答案 0 :(得分:44)
错误(根据我的经验)几乎肯定是正确的;这意味着您通过API调用证明了无效的appsecret_proof
假设您在没有修改的情况下使用标准PHP 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)
对我来说是三个修复使它起作用
在创建 appsecret_proof 时,用于创建它的 access_token 应该与在请求中发送的 access_token 以及它的用户 access_token 相同,我的错误是我使用的是应用程序 access_token。使用用户 access_token。
将参数 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;
}
答案 8 :(得分:0)
确保您的设置正确fbappid + fbappsecret
当这些错误设置不正确时会发生此错误
就像你有两个应用程序一个开发和一个生产
你弄乱了代码,仔细检查那两个
答案 9 :(得分:0)
仅适用于遇到同样问题的人;
在Facebook上将客户端OAuth登录设置为“是”时,您应该提供正确的有效OAuth重定向URI 。否则facebook会抛出完全相同的错误。
答案 10 :(得分:0)
在我的情况下,我需要通过以下方法设置默认访问令牌:setDefaultAccessToken()
我使用了GraphApi开发工具生成的令牌,但我没有切换到正确的应用程序。它通过将应用程序更改为正确的并使用重新生成的令牌来解决。
答案 11 :(得分:0)
我知道这是一个老问题,但是我通过将Application更改为应该用来生成访问令牌的适当应用程序来解决了我的问题。例如。从Project1
到Project2
。
答案 12 :(得分:0)
可能您的访问令牌有问题,您需要业务管理器样式。
您可以使用正则表达式
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 的仪表板,并检查访问令牌的来源。