Facebook:"此授权代码已被使用.","type":"OAuthException","code":100

 平凡天使zj 发布于 2023-01-11 17:24

我刚升级到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/上建议的解决方案并不完全正确.

无论如何,当我最终让它运行并在Facebook建议的应用程序高级设置选项卡下启用"App Secret Proof for Server API calls"时,我进入了一个问题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,我必须通过进行代码交换 GET https://graph.facebook.com/oauth/access_token? client_id={app-id} &redirect_uri={redirect-uri} &client_secret={app-secret} &code={code-parameter}.

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

因此出现两个问题:

1)除了通过代码交换,我还能如何获得access_token,以便我可以使用该令牌创建appsecret_proof并依次调用FacebookRequest?

2)在哪里/如何将appsecret_proof放入FacebookRequest?这可能是这样$request = new FacebookRequest($session, 'GET', '/me', array("appsecret_proof" => $appsecret_proof));吗?我似乎无法找到有关如何使用PHP API appsecret_proof的具体说明(很明显如何通过http与Graph API一起使用).

1 个回答
  • 女士们,先生们,我解决了这一切 - 我只需要使用$access_token = $session->getToken();.这帮助我否定了导致OAuthException的代码交换的要求,因为Facebook已经改变了他们对交换代码的策略不止一次使用.

    现在,根据Facebook的推荐,在App高级设置选项卡下正确启用了"App Secret Proof for Server API calls".

    所以完整的具体解决方案:

    $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>';
    }
    

    2023-01-11 17:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有