2011-08-16 3 views
3

컬을 사용하여 페이스 북 codeaccess_token을 얻으려고 쉬운 컬을 사용해 보았습니다. 그래서 나는 내 벽에 메시지를 올릴 수있다. 내가 sdk을 알고 있지만 쉽게 사용하는 경우에만 curl 방법?컬을 통해 facebook 토큰 코드를 얻는 방법?

일부 오류 반환 :

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; 
+0

수정시 post_url 메소드가 표시되지 않습니다.이 메소드를 샘플에 복사/붙여 넣기 했습니까? – DSchultz

+0

@DSchultz, 예, 주어진 코드를 모두 붙여 넣습니다. '400 나쁜 요청'을 반환합니다. –

답변

5

그래프 API에 컬을 호출하고 응용 프로그램 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)); 
    } 

당신은 FB 가이드에이 명확를 만들기 위해 그들은 정말한다고 그렇게 $token = get_app_access_token('APP_ID','SEKRET');

+0

나는'app_id'와'app_secrect'를 넣었습니다.'$ token = get_app_access_token ('APP_ID', 'SEKRET');''echo $ token','400 bad request'를 입력하십시오. 내 질문 –

+0

당신은 당신이 전체 비밀을 밝히지 않고 그것을 어떻게 부르고 있는지 정확하게 게시 할 수 있습니까? 난 그냥 두 개의 별도의 응용 프로그램과 이것을 시도하고 예상대로 작동합니다. – DSchultz

+0

어떤 토큰입니까? 이게 뭐야? –

2

같은 메소드를 호출 할 수 있지만, 그 나는 나를 위해 일한 것이지. 많은 사람들이 온라인에서 말하는 것과는 달리 GET 컬 호출을하지는 않지만 여전히 POST 호출을 수행합니다.

그래서 내가 게시하는 URL은 "https://graph.facebook.com/oauth/access_token?"이됩니다. 말 그대로이 작업을 얻으려고 노력 적어도 1.5 시간 동안 노력했다

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

: 같은

그리고, 당신은 CURLOPT_POSTFIELDS를 공급 것이다 당신의 POST 변수가 될 것입니다 뭔가. 브라우저에서 URL에 갈 때마다 괜찮 았고 GET curl 명령을 실행하려고 할 때마다 또는 모든 변수가 여전히 URL에 있고 POSTFIELDS에 지정되지 않은 POST 명령이 실패했습니다. 그것은 정말로 고민 거리였다.

+0

에 빈 문자열이 표시되어 더 많은 제안을 보내 주시면 2 시간마다 acebook access_token이 변경됩니다. 그것은 정말로 고민 거리였다. 오래 전, 나는 웹을 검색했고, 어떤 사람은 그가 자신의 계정의 로그인 스크립트를 매 시간마다 실행한다고 말했고, 데이터베이스에'access_token '을 저장하고, 그의 사이트의 모든 사용자 정의에'access_token'을 공유했다. 검색, 게시 및 다른 일을하십시오.이것은 무결성 방법은 아니지만 실제는 약간의 효과가 있습니다. 이 주제와 관련된 모든 사람들과 이야기하는 것이 즐겁습니다. 감사와 메리 x'mas –

관련 문제