几周前我创建了一个简单的 Facebook 应用程序。我通过征求用户的许可通过 Facebook API 获取用户信息。但它上周无故停止工作,从那时起我一直在寻找答案。
基本上我曾经使用 file_get_contents 从 Facebook API 获取用户信息。但是我尝试在它开始失败后将其更改为 cURL,但仍然无法正常工作。我尝试使用 Facebook PHP-SDK,甚至调试了 makeRequest 方法的代码,但我在所有方法中都得到了相同的返回。
当向 Facebook Open Graph URL 发出 cURL 请求时,请求失败,错误号为 7 或 28。它们都是无法连接到站点或超时的错误代码。
我的网站位于共享主机上,我尝试使用 cURL 获取其他网站,并且效果很好。但是当我尝试获取http://www.facebook.com时,cURL 返回 FALSE。
主机有 SSL 证书,启用了 cURL 等。它在一段时间前工作正常。我已经阅读了有关此的各种线程和帖子,尝试了许多不同的 cURL 选项,但似乎没有一个有效。
有任何想法吗?
索引.php
$auth_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($GLOBALS['canvas_page']) . "&scope=publish_stream,email";
$signed_request = $_POST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
if (empty($data["user_id"])) {
echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
$_SESSION['oauth_token'] = $data['oauth_token'];
$_SESSION['user_id'] = $data["user_id"];
$user = new User($_SESSION['user_id'], $_SESSION['oauth_token']);
用户类
function __construct($fid, $at) {
$this->facebook = new Facebook(array(
'appId' => "<APP_ID>",
'secret' => "<FACEBOOK_SECRET_ID>",
));
$this->fid = $fid;
$this->token = $at;
if ($data = $this->getGraph()) {
...
}
}
public function getGraph() {
$session = $this->facebook->getUser();
if ($session) {
try {
$access_token = $this->facebook->getAccessToken();
$attachment = array('access_token' => $access_token);
//$result = $this->facebook->api('/' . $this->fid, 'GET', $attachment);
$result = $this->facebook->api('/' . $this->fid, 'GET');
return $result;
} catch (FacebookApiException $e) {
return false;
}
}
}
笔记:
- 检查 Facebook PHP SDK 方法后,我意识到我不需要发送访问令牌,因为如果访问令牌不在 $params 中,它将设置它。
- 它下降到 sdk 中的 makeRequest() 方法,并从 curl_exec 中返回 false。