gpt4 book ai didi

php - Facebook : "This authorization code has been used.","type":"OAuthException","code":100

转载 作者:可可西里 更新时间:2023-11-01 13:41:21 25 4
gpt4 key购买 nike

我刚刚升级到 PHP 5.4.19 和 facebook-php-sdk-v4。

是我的问题还是 FB 故意让整合变得困难?!例如,我不使用 Composer(无法将其安装在我的共享主机上),因此加载新类需要特定的(自行发现)顺序——这已经够头疼了!建议的解决方案在 http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-get-started/不完全正确。

无论如何,当我终于让它运行并在应用程序高级设置选项卡为 recommended by Facebook我陷入了困境 22。

就是这样:

1) 从我的服务器进行 FB API 调用,例如$request = new FacebookRequest($session, 'GET', '/me'); 我现在必须提供一个 appsecret_proof 参数。

2) 要创建一个 appsecret_proof,我需要一个 access_token 即 $appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);

3) 此时要获得只有 $_GET['code'] 的 access_token,我必须通过以下方式进行代码交换获取 https://graph.facebook.com/oauth/access_token?
client_id={app-id}
&redirect_uri={redirect-uri}
&client_secret={应用程序 secret }
&code={code-parameter}
.

4) 调用 FB 进行代码交换时出现错误 {"error":{"message":"This authorization code has been used.","type":"OAuthException","code": 100}.

因此出现两个问题:

1) 除了通过代码交换,我还能如何获得 access_token,以便我可以使用该 token 创建 appsecret_proof,然后调用 FacebookRequest?

2) 我在哪里/如何将 appsecret_proof 放入 FacebookRequest?也许是这样 $request = new FacebookRequest($session, 'GET', '/me', array("appsecret_proof"=> $appsecret_proof));?我似乎找不到关于如何将 appsecret_proof 与 PHP API 结合使用的具体说明(很清楚如何通过 http 与 Graph API 进行结合)。

最佳答案

女士们先生们,我解决了所有问题 - 我只需要使用 $access_token = $session->getToken();。这帮助我否定了导致 OAuthException 的代码交换调用,因为 Facebook 从那以后改变了他们关于交换代码的政策,禁止多次使用。

现在,“应用服务器 API 调用的应用 secret 证明”已按照 Facebook 的建议在“应用高级设置”选项卡下正确启用。

那么完整的具体解决方案:

$app_id = 'APPID'; $app_secret = 'APPSECRET';
FacebookSession::setDefaultApplication($app_id, $app_secret);
$redirect_url = "https://mydomain.com/login";
$helper = new FacebookRedirectLoginHelper($redirect_url);

try {
$session = $helper->getSessionFromRedirect();
} catch (FacebookRequestException $ex) {
} catch (Exception $ex) {
}

if (isset($session)) {
$access_token = $session->getToken();
$appsecret_proof = hash_hmac('sha256', $access_token, $app_secret);
$request = new FacebookRequest($session, 'GET', '/me', array("appsecret_proof" => $appsecret_proof));
$response = $request->execute();
$graphObject = $response->getGraphObject();

echo print_r($graphObject, 1);
} else {
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}

关于php - Facebook : "This authorization code has been used.","type":"OAuthException","code":100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com