【问题标题】:How to get facebook token code via curl?如何通过 curl 获取 facebook 令牌代码?
【发布时间】:2011-08-16 17:30:55
【问题描述】:

我尝试使用简单的 curl 通过 curl 获取 facebook codeaccess_token。这样我就可以将消息发布到我的墙上。我知道sdk,但如果我只使用简单的curl 方式?

一些故障返回:

Method Not Implemented

Invalid method in request

这是我的代码。顺便说一句:如果access_token 在 1 小时内仍然有效,如何记住它?谢谢。

$code_url = "https://graph.facebook.com/oauth/authorize?client_id=".$app_id."&redirect_uri=".urlencode($canvas_page_url)."&type=client_cred&display=page&scope=user_photos,publish_stream,read_stream,user_likes";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$code_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($ch, CURLOPT_HEADER      ,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER  ,1);
$fb_code = curl_exec($ch); // get code
curl_close($ch);

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&client_secret=".$app_secret."&redirect_uri=".urlencode($canvas_page_url)."&code=".$fb_code."";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$token_url);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION  ,1);
curl_setopt($curl, CURLOPT_HEADER      ,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER  ,1);
$result = curl_exec($curl);
curl_close($curl); 
echo $result; //get token for post to wall

编辑:

   $app_id = "14XXXXXXXX";
   $app_secret = "77XXXXXXXXXXXXXXXXXXXXXXX";
   function get_app_access_token($app_id, $secret) {
    $url = 'https://graph.facebook.com/oauth/access_token';
    $token_params = array(
        "type" => "client_cred",
        "client_id" => $app_id,
        "client_secret" => $app_secret
        );
    return str_replace('access_token=', '', post_url($url, $token_params));
  }
  $token = get_app_access_token($app_id,$app_secret);
  echo $token;

【问题讨论】:

  • 在您的编辑中,您没有显示 post_url 方法 - 您是否也将其复制/粘贴到您的示例中?
  • @DSchultz,是的,我做到了,粘贴您给定的所有代码。返回400 bad request

标签: php facebook curl


【解决方案1】:

试试这些辅助方法,它们将对图形 API 进行 cURL 调用并返回应用程序 access_token。

这个函数接受一个 url 和一个参数数组,并通过 cURL 进行 POST:

  function post_url($url, $params) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, null, '&'));
    $ret = curl_exec($ch);
    curl_close($ch);
    return $ret;
  }

此函数获取您在 developer app 中提供的应用 ID 和密码,并为您的应用返回一个活动的 access_token:

  function get_app_access_token($app_id, $secret) {
    $url = 'https://graph.facebook.com/oauth/access_token';
    $token_params = array(
        "type" => "client_cred",
        "client_id" => $app_id,
        "client_secret" => $secret
        );
    return str_replace('access_token=', '', post_url($url, $token_params));
  }

你可以像$token = get_app_access_token('APP_ID','SEKRET');这样调用方法

【讨论】:

  • 我已将app_idapp_secrect 放入其中,我尝试了$token = get_app_access_token('APP_ID','SEKRET'); echo $token,得到400 bad request 我在我的问题中编辑代码
  • 你能在不提供全部秘密的情况下准确地发布你的称呼吗?我刚刚使用两个单独的应用程序进行了尝试,它按预期工作。
  • 这是哪个令牌?这是 oAuth 吗?
  • 我在 $token 变量中得到一个空字符串
【解决方案2】:

他们确实应该在 FB 指南上更清楚地说明这一点,但这对我有用。与网上很多人所说的不同,您不会执行 GET curl 调用,但仍会执行 POST 调用。

所以,您发布到的 URL 将是“https://graph.facebook.com/oauth/access_token?”

然后,您将提供给 CURLOPT_POSTFIELDS 的 POST 变量将类似于:

"client_id=YOUR_CLIENT_ID&redirect_uri=" . urlencode("YOUR_URL") . "&client_secret=YOUR_CLIENT_SECRET&code=YOUR_RECEIVED_CODE"

我确实尝试了至少 1.5 个小时才能让它发挥作用。每次我在浏览器中访问 URL 时都很好,每次我尝试运行 GET curl 命令或 POST 命令时,所有变量仍然在 url 中(并且未在 POSTFIELDS 中指定)它失败了。真的很烦。

【讨论】:

  • 感谢更多建议,acebook access_token 将每 2 小时更改一次。这真的很烦人。很久以前,我在网上搜索,看到有人说,他每小时运行一次他自己帐户的登录脚本,将access_token保存到数据库中,然后将access_token分享给他网站上的所有自定义。做搜索,发布和任何其他事情。这不是一个完整的方法,但它确实有一些效果。我很高兴与这个话题的所有人交谈。谢谢,圣诞快乐
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2012-06-19
  • 2017-04-21
  • 2017-08-04
  • 1970-01-01
  • 2017-10-19
  • 2017-10-27
相关资源
最近更新 更多