<?php
session_start();
//included file and use
$app_id = 'xxx';
$app_secret = 'xxx';
FacebookSession::setDefaultApplication($app_id, $app_secret);
$helper = new FacebookRedirectLoginHelper("`http://example/facebook4.0`/", $app_id, $app_secret);
try
{
$session = $helper->getSessionFromRedirect();
}
catch(FacebookRequestException $ex) { }
catch(Exception $ex) { }
$loggedIn = false;
if (isset($session))
{
if ($session)
{
$loggedIn = true;
try { //logged here and get data
$user_profile = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
print_r($user_profile); //print data
}
catch(FacebookRequestException $e) {
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
}
if(!$loggedIn) //if user is not online // get link and add scope
{
$loginUrl = $helper->getLoginUrl(array('public_profile','email'));
echo "<a href='$loginUrl'>Login With Facebook</a>";
}
else
{
print_r($user_profile); //logout link is generated here
echo '<br><br><a href="index.php">Logout</a>'; //print to sceen
}
?>
我已经设置域名为localhost和站点URL为http://localhost/
。我也尝试过http://localhost:80
, http://mydomainname:80
(更换主机)
这是一个错误,我得到响应:
FacebookFacebookSDKException Object
(
[message:protected] => Failed to connect to graph.facebook.com port 443: Network unreachable
[string:Exception:private] =>
[code:protected] => 7
[file:protected] => C:xampphtdocsmyappFacebookHttpClientsFacebookCurlHttpClient.php
[line:protected] => 142
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => C:xampphtdocsmyappFacebookFacebookRequest.php
[line] => 248
[function] => send
[class] => FacebookHttpClientsFacebookCurlHttpClient
[type] => ->
[args] => Array
(
[0] => https://graph.facebook.com/v2.0/oauth/access_token?client_id='my key'&redirect_uri=http%3A%2F%2Flocalhost%3A80%2Fmyapp%2F&client_secret='mykey_secert'&code=AQCYmzsFNUIQG7gUAZ3y-YJHLeIGcF-xyqHotx31MCJGlm16fV9VbVSzlGlx5280-u0Ho3jFjg_REevN5J0LEIPHerY1QaaBYjpkkoIMf6PCwHGj2OIrQDvfyGcUJRK4cJP0YQ8H8HdYw86xEhlcdJHvnObkCU6tSBcVbDWM8uoXJlRqNl6o-IdxoSfbk6IjuCreyagMXvam4vgV0HKxn0nkWaV26k1P6kQP_L1LtXXx2UyUQ1i0jJGL9JiGr1gsUbf5drY_URIrEWzawumpnSWkuxln8hiOtAr_xwM_4cBZwxf3_pWq8YnUotpmzzM5sPhW_ERMYWAdovjZPHu7Xdgs&access_token=329734847193179%7Cd9e5cdb2d0c3cbe1e127827762e94284&appsecret_proof='key_proof'
[1] => GET
[2] => Array
(
)
)
)
[1] => Array
(
[file] => C:xampphtdocsmyappFacebookFacebookRedirectLoginHelper.php
[line] => 146
[function] => execute
[class] => FacebookFacebookRequest
[type] => ->
[args] => Array
(
)
)
[2] => Array
(
[file] => C:xampphtdocsmyappindex.php
[line] => 52
[function] => getSessionFromRedirect
[class] => FacebookFacebookRedirectLoginHelper
[type] => ->
[args] => Array
(
)
)
)
[previous:Exception:private] =>
)
我知道这是一个老问题,OP可能已经找到了解决方案。我在使用Laravel Socialite插件时也遇到了同样的问题。
为了子孙后代,我想把解决方案贴在这里。这个问题解释在这个问题:域名graph.facebook.com解析到IPV6地址,一些网络可能没有配置路由。您可以请求cURL将IP地址解析为IPV4值。设置"CURLOPT_IPRESOLVE
"选项为"CURL_IPRESOLVE_V4
"。
在socialite插件的情况下,我们必须修改FacebookProvider.php
以包含额外的选项。
编辑
更具体地说,Socialite使用GuzzleHttp,我们需要将其作为参数传递给GuzzleHttp Client方法:
'curl' => [ CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4]