OAuthException:已使用此授权代码

时间:2013-05-18 10:11:25

标签: php facebook-graph-api curl facebook-authentication facebook-access-token

我有facebook应用程序,我使用php CURL进行授权并获取访问令牌和Facebook用户ID。 我有以下代码允许用户访问:

function AlowUserAccess()
 {
    include "config.php"; 
    error_reporting(0);
    if($_REQUEST['code'])
    {
        $returnurl = $fbconfig['baseUrl'];
        $url = "https://graph.facebook.com/oauth/access_token?client_id=".$fbconfig['appid']."&client_secret=".$fbconfig['secret']."&grant_type=fb_exchange_token&fb_exchange_token=".$_REQUEST['code'];
        $ch = curl_init();
        curl_setopt_array($ch, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_VERBOSE => true
            ));
        $result = curl_exec($ch);
        curl_close($ch);
            return $result;
}

我打印了上面函数的返回值$ result并返回以下错误:

 {"error":{"message":"Malformed access token AQxxxxxxxxxGypoLOAjcig9qSai_MuNna8marHxuddddCno6T_NqqD19zzzzzzzGNy_FJbcK9heZKPCSysXBYHFTD_AgzMxwE5BqIEHvyK-QGl5kv1R0bPOUx7V0xs5-OQdsfddsRc0uoR_y1ElTlY4YCrWr5dfssdfsdfdsITrXezhcv1S_pu-3g0Kx8v-VtsvMI6oVYlC0J4eogSL6yhIsWrNS6uuTZIWwE0BGWJCjVieU-BbCPLsqkasdVFjnPz489xdb2_bSfVBKvsdfsdfaefYtn3luygCs","type":"OAuthException","code":190}}

2 个答案:

答案 0 :(得分:1)

您正在使用Facebook发送给您的代码来尝试获取长期访问令牌。

您必须先获得一个短期访问令牌。然后将长期访问令牌交换为长期访问令牌(这是您尝试在上面进行的调用)。

获取短期访问令牌:

https://graph.facebook.com/oauth/access_token?client_id={client_id}&redirect_uri={your redirect uri}&client_secret={client_secret}&code={code}

代码是您当前使用的代码。不确定是否需要redirect_uri,但我使用它。

这将返回一个表单编码的字符串,如

=的access_token&AQADEADBEEF放大器;期满= 11111

然后您可以使用此访问令牌(AQADEADBEEF)代替上面的fb_exchange_token

答案 1 :(得分:0)

尝试以下选项:

CURLOPT_USERAGENT       => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
CURLOPT_COOKIEFILE      => 'anc.tmp',
CURLOPT_COOKIEJAR       => 'anc.tmp',
CURLOPT_FOLLOWLOCATION  => 1,
CURLOPT_RETURNTRANSFER  => 1,
CURLOPT_SSL_VERIFYHOST  => 0,
CURLOPT_SSL_VERIFYPEER  => 0,
CURLOPT_TIMEOUT         => 120

Google:SEM Labs用于包装的CURL类。