如何通过curl获取facebook令牌代码?

时间:2011-08-16 17:30:56

标签: php facebook curl

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

一些错误返回:

Method Not Implemented

Invalid method in request

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

access_token

编辑:

$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

2 个答案:

答案 0 :(得分:5)

尝试使用这些辅助方法,这些方法将对图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');

那样调用方法

答案 1 :(得分:2)

他们真的应该在FB指南中更清楚,但这对我有用。不像许多人在网上说的那样,你不做GET卷曲通话,但你仍然进行POST通话。

那么,你发布的网址是“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中指定),它失败了。真的很烦人。