0

我有 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}}
4

2 回答 2

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&expires=11111

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

于 2013-05-20T14:21:33.013 回答
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

谷歌:SEM Labs CURL 类的包装器。

于 2013-05-18T18:56:59.073 回答