我总是得到:“提供的appsecret_proof无效”

时间:2013-08-29 17:30:33

标签: php facebook facebook-graph-api facebook-php-sdk

我知道在Facebook API的最后一次更新中,有可能提供appsecret_proof,这是使用app_secret签名的访问令牌。

现在的问题是,无论我在我的Facebook应用程序上设置的选项(启用\禁用:Require AppSecret Proof for Server API calls),我总是得到:

Invalid appsecret_proof provided in the API argument

我发现php-facebook-sdk的最后一个版本总是在参数appsecret_proof

之间插入
...
if (isset($params['access_token'])) {
    $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);
}
...
protected function getAppSecretProof($access_token) {
    return hash_hmac('sha256', $access_token, $this->getAppSecret());
}
...

如果我禁用对我的应用程序的检查,并注释插入参数的行,一切正常,否则我收到错误。

现在,我哪里错了? 我三重检查了$access_token$this->getAppSecret()和文档,看起来都是正确的。 有线索吗?

2 个答案:

答案 0 :(得分:0)

我终于能够通过授予对所有内容的权限来摆脱错误。

答案 1 :(得分:0)

从容易解决问题的复杂解决方案开始。在这个特定情况下,我首先要做的是双重(三重)检查我: App-ID App-Secret API-Version (App Dashboard中提供的所有3个)和访问令牌(工具和支持> Graph API Explorer)。

对我来说,缺少的部分是访问令牌。确保在Graph API资源管理器下,找到右侧的下拉列表和选择已注册的应用程序名称,而不是默认值“Graph API Explorer”。

所以你的代码看起来应该是这样的(Graph v2.4):

$fb = new Facebook\Facebook([
  'app_id' => $app_id,
  'app_secret' => $app_secret,
  'default_graph_version' => $api_version
]);