15

我正在尝试按照此处的示例开发一个示例 facebook php 登录示例

我在这里托管了我的应用程序,但是每当我尝试访问该链接时,都会收到问题中的错误消息。这是引发错误的代码段

try {
  $e = new FacebookApiException(array(// LINE 887
             'error_code' => curl_errno($ch),
             'error' => array(
             'message' => curl_error($ch),
             'type' => 'CurlException',
        ),
  ));
  curl_close($ch);
}

// edit suggested by Kneel-before ZOD
catch(FacebookApiException $e) {
  $result = $e->getResult();
  echo 'Got an : ', $e->getType(),' while posting';
  echo(json_encode($result));
}

catch(Exception $e){
  echo 'Caught exception: ',  $e->getMessage(), "\n";
}

我很确定我已经在 index.php 中正确设置了 APP ID 和密码。

这是我在 facebook 上的应用程序设置的屏幕截图应用程序设置

任何帮助,将不胜感激。谢谢!

4

11 回答 11

1

您可能需要为 curl 提供一个 Facebook 证书文件,您可以这样做:

从https://github.com/facebookarchive/facebook-php-sdk/blob/master/src/fb_ca_chain_bundle.crt下载证书文件

并在尝试任何 Facebook 通话之前添加此内容

facebook::$CURL_OPTS[CURLOPT_CAINFO] = 'path/to/fb_ca_chain_bundle.crt';

你也可以试试

facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
于 2014-12-05T11:31:18.347 回答
0

设置代理以连接 Facebook.com

## 在 base_facebook.php 中查找代码##

public static $CURL_OPTS = array(
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 60,
        CURLOPT_USERAGENT      => 'facebook-php-3.2',
      );

并添加选项

  public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
    CURLOPT_USERAGENT      => 'facebook-php-3.2',
    CURLOPT_PROXY      => '199.200.120.140:8089',
  );
于 2014-11-04T11:11:08.663 回答
0

如果您使用免费托管,我认为它可能无法正常工作,主要是因为他们通常禁用传出连接。我在付费托管(或启用传出连接)上运行顺利的代码也遇到了这个问题。

于 2014-01-08T10:57:51.693 回答
0

它与您的代码无关。Curl 根本无法连接到 facebook graph API。这可能是因为您的主机阻止了与其他主机的传出连接,或者 facebook 阻止了您的主机。

如果您有 ssh 访问权限,您可以尝试访问 http://graph.facebook.com和/或检查您的 php 日志。否则你应该问你的主人。

于 2014-09-05T15:16:09.203 回答
0

为什么要在 try 块上创建异常?

我当前的工作登录功能是这样的:

public function login()
{               
    $this->load->library('facebook/facebook',$config);
    $uid = $this->facebook->getUser();

    if ($uid) 
    {           
      try 
      {             
        $user_profile = $this->facebook->api('/' . $uid);  

        //then redirect to whatever you need..
      } 
      catch (FacebookApiException $e) 
      { error_log($e);
        $uid = null;
        $this->facebook->destroySession();
      }
    }
    else 
    {
        $params = array(
            'canvas'    => 1,
            'fbconnect' => 0,
            'scope' => 'email',
        );
        echo "<script>top.location.href='" . $this->facebook->getLoginUrl($params)."'</script>";            
        exit();
    }
}
于 2013-09-23T19:40:15.320 回答
0

您正在 try ... catch 块中创建异常。你不需要做这样的事情。try-catch 块旨在处理可能在应用程序中引发异常的代码段。您需要在此块内放入可以引发异常的代码段。在您的情况下,它可能是对 Facebook API 的 cURL 请求。

于 2014-06-20T14:31:36.087 回答
0

检查您的php.ini允许 curl 功能。

对于 ubantu,请尝试在您的终端中使用此代码

sudo apt-get install php5-curl

在它使用重启你的apache服务器之后

sudo service apache2 restart

于 2015-03-13T13:40:26.157 回答
0

我和你有同样的问题。

我之前curl_exec()在 base_facebook.php 中添加了这个选项

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
于 2013-09-26T01:10:57.673 回答
0

正如 Ashutosh Bajpay 所建议的,您的 Web 服务器可能无法根据错误消息进行连接。如果您使用的是共享主机提供商,或者启用了 SELinux,那么您的代码很可能无法发起新的连接。

您可以编写一个快速而肮脏的脚本来测试这个理论:

$page = file_get_contents('http://google.com');
(!empty($page)) ? var_dump($page) : print_r(error_get_last());

如果脚本可以连接,您将获得页面的转储,否则您应该会看到尝试访问主机的错误。

如果您确实控制了该机器,并且它恰好在运行 SELinux,这里有一些有用的提示

于 2015-02-28T04:39:47.560 回答
0

链接是 https,您可能必须提供证书信息,否则如果您无权访问证书然后添加,curl 通常会抛出错误

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

将允许访问任何证书。

于 2014-10-04T10:28:06.620 回答
0

您正在捕获两种异常类型,“抛出”的异常也不是。尝试捕获抛出的异常,在该异常块中,您将能够进一步调试您的问题(例如在异常期间显示正在运行的变量......)然后您可以构建一个简单的页面来测试每个部分拼图,直到你修复它。

于 2015-05-21T04:03:12.063 回答