我一直在努力使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);
我已经交叉检查了app id和app secret。
使用这些设置我会收到以下错误。
API参数
中提供的appsecret_proof无效任何帮助将不胜感激。
P.S在应用设置中禁用它可以使其正常工作。
答案 0 :(得分:3)
如果您在一个或多个子请求中使用用户访问令牌,那么这些请求将需要自己的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);
答案 1 :(得分:0)
根据facebook文档,正确的语法是:
$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);
见这里:
https://developers.facebook.com/docs/graph-api/securing-requests/
为我解决了这个问题...