使用Facebook Graph API进行身份验证

问题描述 投票:2回答:1

我需要从Facebook页面上删除一些帖子并将其显示在我的网站上。我正在考虑使用Facebook Graph API,但我有点挣扎,文档和各种教程似乎假设我将设置一个登录流程,首先要求用户登录我的网站。但那不是我需要的。我需要我的服务器端应用程序(保持)与Facebook进行身份验证,并定期获取任何新帖子。

我发现应该可以通过使用页面令牌获得一个长期存在的令牌,但是现在我甚至无法弄清楚如何使用常规的短期令牌进行身份验证。

因此,我设置了一个测试应用程序以获取应用程序ID和密码,然后转到Facebook Graph API Explorer以获取我用于创建应用程序的用户的身份验证令牌。

这是我用来测试连接Graph Api的基本代码:

(...)
$fb = new \Facebook\Facebook([
    'app_id' => $app_id,
    'app_secret' => $app_secret,
    'default_graph_version' => '2.8',
    'default_access_token' => $app_access_token
]);

try {
    $response = $fb->get('/me');
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
    // When validation fails or other local issues
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

$me = $response->getGraphUser();

当我运行我的代码时,我收到此消息:

图表返回错误:API参数中提供的appsecret_proof无效

我已经三次检查$app_id$app_secret是我创建应用程序时给出的值,并且我已经三次检查了我的访问令牌(尝试使用我的个人用户令牌以及我能够通过图表获得的页面令牌API Explorer)。

我发现另一个SO线程建议我应该手动生成一个appsecret证明,所以我这样做:

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

$fb = new \Facebook\Facebook([
    'app_id' => $app_id,
    'app_secret' => $appsecret_proof,
    'default_graph_version' => '2.8',
    'default_access_token' => $app_access_token
]);

我不确定我是否应该将$appsecret_proof传递给app_secret或者我应该如何使用它。我仍然在上面的代码中得到了同样的错误。

php facebook-graph-api facebook-access-token
1个回答
0
投票
   get facebook mutual friend with app user or non app user

    $access_token = "facebook user token";
    $facebook_id = "friend id";
    $app_secret = "facebook secret";
    $appsecret_proof = hash_hmac('sha256', $access_token, 
    $app_secret);


    $graph_url = "https://graph.facebook.com/" . $facebook_id . "?fields=context.fields(all_mutual_friends.fields(id,name,picture.width(200).height(200)))" . "&access_token=" . $access_token . "&appsecret_proof=" . $appsecret_proof;


    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $graph_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $output = curl_exec($ch);
    return $response_mutual = json_decode($output, true);
    curl_close($ch);
© www.soinside.com 2019 - 2024. All rights reserved.