在我的应用程序中,我正在尝试测试过期的访问令牌。在提出要求时
https://graph.facebook.com/1234?access_token=xxxxxxxxxx
它始终返回FALSE
奇怪的是,当复制网址并在网络浏览器中使用它时,它会返回预期结果而不是false。似乎无法在facebook文档中找到有关它为什么会返回FALSE
以及如何解决它的文档。
我在stackoverflow上找到另一个问题“回答”问题,但答案不是很明确,我无法评论询问它。这是链接Facebook Graph API returns false
任何建议或帮助都将不胜感激。
编辑:
向Facebook发出请求时,它意味着返回JSON对象。我向网址0
发出请求时收到的响应代码为https://graph.facebook.com/1234?access_token=xxxxxxxxxx
,响应正文为FALSE
,如上所述。我使用的代码如下:
$url = "https://graph.facebook.com/{user_id}?access_token=xxxxxxxxxx";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
$curl_response = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($curl_response, 0, $header_size);
$body = substr($curl_response, $header_size);
$response_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
运行上面的代码时,我收到FALSE响应,http代码为0。
当我将网址复制并粘贴到任何浏览器时,会发生以下情况:
如果访问令牌有效,则返回JSON格式的用户数据。 $response_code
为200
,$body
的值应如下所示:
{
id: "1234",
first_name: "Name",
gender: "male",
last_name: "Surname",
locale: "en_US",
middle_name: "Middle Name",
name: "Name Middle Name Surname",
username: "name.surname"
}
如果访问令牌无效,则以JSON格式返回错误。 $response_code
取决于错误,但在大多数情况下都是403.示例数据($body
的值:
{
error: {
message: "Error validating access token: The user has not authorized application xxxxxxxxxxxxxx.",
type: "OAuthException",
code: 190,
error_subcode: 458
}
}
我知道响应代码0通常意味着从未发出过请求或者不支持curl或类似的情况但是,当我使用相同的代码$url = "http://www.google.co.za";
时,我得到的响应代码为{{1}返回的响应主体是网站的html代码。所以我知道它有效,我用3个不同的网址测试了它。