我有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}}
答案 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类。