2

好吧,我一直在努力使 appsecret_proof 工作。

我在应用设置中启用了使用 app_secret。

PHP sdk中生成app secret的代码

$appsecret_proof= hash_hmac('sha256', APP_ID. "|" . APP_SECRET, APP_SECRET);

我将它与批处理请求中的 post 参数一起传递

$params['batch'] = json_encode($entries);
$params['appsecret_proof'] = $appsecret_proof;
$response = $facebook->api('/', "POST", $params);

我已经交叉检查了应用程序 ID 和应用程序密码。

使用这些设置,我得到以下错误。

API 参数中提供的 appsecret_proof 无效

任何帮助将不胜感激。

PS 在应用程序设置中禁用它可以正常工作。

4

2 回答 2

4

如果您在一个或多个子请求中使用用户访问令牌,则这些请求将需要自己的 appsecret_proof。否则,Facebook 会将用户的访问令牌与应用令牌的证明进行比较,检查将失败。

例子:

$proof1 = hash_hmac('sha256', [USER TOKEN 1], APP_SECRET);
$proof2 = hash_hmac('sha256', [USER TOKEN 2], APP_SECRET);


$requests = array(
   array(
       'relative_url' => "[USER ID 1]/permissions",
       'method' => "GET",
       'body' => "access_token=[USER TOKEN 1]&appsecret_proof=" . $proof1
   ),
   array(
       'relative_url' => "[USER ID 2]/permissions",
       'method' => "GET",
       'body' => "access_token=[USER TOKEN 2]&appsecret_proof=" . $proof2
   ),
);


$appToken = APP_ID. "|" . APP_SECRET;
$appsecret_proof= hash_hmac('sha256', appToken, APP_SECRET);
$params['batch'] = json_encode($requests);
$params['appsecret_proof'] = $appsecret_proof;
$response = $facebook->api('/', "POST", $params);
于 2015-02-10T02:55:53.757 回答
0

根据 facebook 文档,正确的语法是:

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

看这里:

https://developers.facebook.com/docs/graph-api/securing-requests/

为我解决了这个问题...

于 2014-01-29T10:43:10.370 回答