【问题标题】:Facebook Graph API: Can't access the authorization tokenFacebook Graph API:无法访问授权令牌
【发布时间】:2013-12-04 00:31:03
【问题描述】:

我想要的是使用公共页面获取数据。 我尝试了文档,但无法找到该信息。然后我用谷歌搜索并在 stackoverflow 上找到了这个Can you get a public Facebook page's feed using Graph API without asking a user to allow? 问题,这完美地解释了我想用 PHP 做什么。我在 McNab 的回答 中读到,我需要 facebook 上的应用程序来获取该数据(以检索访问令牌)。我创建了一个应用程序,它把我带到了基本设置页面,它为我提供了 AppIdAppSecret。现在,从 McNab 的答案来看,我只需要 AppId 和应用程序机密来获取 auth_token,我使用了以下代码,但由于某种原因,我得到了 false 而不是 AuthToken。我在这里做错了什么?我没有向应用程序添加任何更多详细信息,是否会导致此问题,我是否需要向应用程序添加更多详细信息,还是有其他原因导致此问题?

P.S 我也在我的 PC 上的 localhost 上尝试这个。

function fetchUrl($url){

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_TIMEOUT, 20);

 $feedData = curl_exec($ch);
 curl_close($ch); 

 return $feedData;

}

$profile_id = "100002138417834";

// App info needed for auth.
$app_id = "--------------";
$app_secret = "-=-=-=-=-=-=-=-=-=-=-=-";

$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}");

var_dump($authToken);

更新:

当我执行var_dump(curl_error($ch));(如 cmets 中的建议)时,它给了我这个错误:

string 'SSL证书问题,验证CA证书是否正常。 详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败' (长度=146)

【问题讨论】:

  • 它返回 false 意味着 cUrl 失败,而不是 FB Api。错误报告是否开启?在 curl_exec 之后尝试var_dump(curl_error($ch));
  • 如果返回值为bool(false),则有错误,所以你应该使用curl_error($ch)找出它是什么。或者,使用curl_setopt(CURLOPT_VERBOSE, 1); 启用调试。
  • 这是否意味着你解决了它?
  • @JaapMoolenaar 没有。我很忙。我现在要测试错误。
  • @JaapMoolenaar 请检查问题。我已经用我得到的错误更新了它。

标签: php facebook facebook-graph-api


【解决方案1】:

ssl 证书未正确验证。当与 CA 证书捆绑在一起时,Curl 曾经能够正确执行此操作。要么将 curl 指向正确的证书(此处为信息 http://curl.haxx.se/docs/sslcerts.html),要么一起禁用验证。

您可以使用以下方法禁用 ssl 证书验证:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

这是一个很常见的 curl 问题,这个问题的答案大概是这样的 ;-)

【讨论】:

  • 我用我对这个问题的回答解决了这个问题,但你的回答也很有效(而且似乎更容易)谢谢:)
  • 谢谢!你有一个处理问题和答案的好方法。继续努力:-)
【解决方案2】:

我试图输出错误(感谢@Jack),我得到了这个:

string 'SSL证书问题,验证CA证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败'(长度=146)

似乎是 SSL 证书的问题。所以我所做的是:

  1. here 下载了一个 ca 包。
  2. 将该包放在我拥有此 index.php 文件的同一目录中,即包含代码的文件。
  3. 然后使用 curl_setopt() 设置 CURLOPT_CAINFO 选项以指向该文件(它必须是绝对路径)。
  4. 刷新了页面,它正在工作:)
  5. 这是要添加的行:

    curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__). '/cacert.pem');

感谢@Jack,他在聊天中帮助了我 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多