2009-10-05 4 views
1

질문 : FB API를 통해 내 웹 서버에서 Facebook으로 이미지를 업로드하는 방법은 무엇입니까?facebook API로 이미지 업로드

사용자의 사진 앨범에서 이미지를 검색하고 수정 (예 : 워터 마크 추가) 한 다음 사진 앨범으로 다시 보내는 응용 프로그램을 작성 중입니다.

그냥 작동하지 않습니다

<?php 
include_once("api/facebook.php"); 
include_once("config.php"); 
include_once("utils.php"); 
include_once("bemyfans.php"); 
$facebook=new Facebook($api_key,$app_secret); 
$facebook->require_frame(); 
$user=$facebook->require_login(); 
echo "<p>Hello <fb:name useyou='false' uid=\"$user\"/></p>"; 
$args = array(
    'api_key' => $api_key, 
    'call_id'=>microtime(true), 
    'v'=>'1.0', 
    'format' => 'JSON' 
); 
$args['Lenna.png']="@/home/thoai/htdocs/apps/bemyfans/Lenna.png"; 
signRequest($args,$secret); 
$ch = curl_init(); 
$url = 'http://api.facebook.com/restserver.php?method=photos.upload'; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
if ($data = curl_exec($ch)) echo "done"; 
echo $data; 

function signRequest(&$args, $secret){ 
    ksort($args); 
    $sig = ''; 
    foreach($args as $k => $v){ 
    $sig .= $k . '=' . $v; 
    } 
    $sig .= $secret; 
    $args['sig'] = md5($sig); 
} 
?> 

을 다음과 같이 내가 사진을 업로드하는 데 사용하는 코드입니다. 더 구체적으로, 나는 "잘못된 서명"메시지를 계속받습니다.

코드에 무슨 문제가 있습니까 ???

+0

기억 apps/bemyfans/Lenna.png "; '? –

+0

그래, 그게 뭐야? – timdev

+0

cURL은 파일 이름이 아닌 파일의 내용을 보냅니다. – thoaionline

답변

0

오류로 판단하여 요청에 제대로 서명하지 않았습니다.

facebook API 문서를 빠르게 살펴 봤는데 signRequest() 함수가 나에게 맞는 것처럼 보였다.

그래서 분명히 $ 비밀이 맞는지 확인해 보시기 바랍니다.

편집 : 의견에있는 당신의 대답은 지금 그것을 보게합니다. 페이 스북 서버가 바이너리 데이터 및 서명을 처리하는 방법을 모르지만 서명은 @ -prefixed 경로 이름을 기반으로합니다. cURL이 파일 내용을 전송하기 때문에 Facebook은 경로 이름을 보지 못합니다. 따라서 페이스 북이 서명을 재구성하고 검증 할 수있는 방법은 없습니다.

페이스 북 문서에서 매우주의 깊게 작성한 전화를 확인하십시오. 서명 생성에서 파일을 생략하거나 base64로 인코딩하거나 누가 무엇을 압니까?

하지만 요청에서 "@/home/thoai/htdocs/apps/bemyfans/Lenna.png"와 원격으로 닮은 것을 볼 수 없으므로 코드가 페이스 북에서 확인할 수없는 서명을 보내는 것이 분명합니다.

0

파일 인수를 포함한 모든 인수를 사용하여 요청을 서명하고 있습니다. 올바른 서명을 얻으려면 없이 args에 파일 인수를 서명해야합니다.

+0

답변을 확장하십시오. –

-1

나는 나를

2

이 질문의 코드가 곧 중단 될 오래된 REST API를를 사용하기위한

$appapikey = 'keykeykey'; 
$appsecret = 'secretcesret'; 
$facebook = new Facebook($appapikey, $appsecret); 
$user=$facebook->require_login() 

$facebook->api_client->photos_upload($file, null, "A test Photo", $user); 

이 작동 당신이 내 코드에서 모든 잘못 찾는 일을 생각 .

올바른 방법은 지금 :

$fbk = new Facebook(/* conf */); 
$fbk->setFileUploadSupport(true); 

//If you are executing this in a script, and not in a web page with the user logged in: 
$fbk->setAccessToken(/* access token from other sources */); 

//To add to an album: 
$fbk->api("/$albumId/photos", "POST", 
      array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo")); 

//To upload a photo directly (the album will be created automatically): 
$fbk->api("/me/photos", "POST", 
      array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo")); 

는 [ 'Lenna.png'] = "@/홈/thoai/htdocs에 /`$ 인수에서의`@를`의 무엇 $fbk->setFileUploadSupport(true);