- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚升级到 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/
我是一名优秀的程序员,十分优秀!