Facebook API sdk 4.0 – publique uma foto no Facebook

Estou tentando criar um aplicativo onde o usuário pode navegar e enviar uma foto do seu computador para o seu facebook. Para isso, eles primeiro terão que carregar sua foto no servidor e depois usar uma solicitação do Facebook, publicar esta imagem no Facebook. Estou usando multipart / form-data.

Isto é o que eu tenho até agora para isso, supondo que eu tenha uma session válida, meu pedido de api:

$request = new Facebook{ $session, 'POST', '/me/photos', array ( 'source' => '{image-data}', ) ); $response = $request->execute(); $graphObject = $response->getGraphObject(); /* handle the result*/ 

Não tenho certeza do que replace os dados de imagem.

Para a foto de upload, meu código é o seguinte:

  if(isset($_POST['submit'])){ $file_type = $_FILES['file']['type']; //returns the file type $allowed = array("image/jpeg", "image/gif", "image/png", "image/jpg"); //specifies allowed file types if(!in_array($file_type, $allowed)) { $error_message = 'Only jpeg, jpg, gif, and png files are allowed. 
Please click back and try again.'; echo $error_message; exit(); } $name = $_FILES['file']['name']; //original path of the uploaded file $temp_name = $_FILES['file']['tmp_name']; //contains the path to the temporary file that resides on the server if(isset($name)){ if(!empty($name)){ $location = 'uploads/'; //save photo to the folder: uploads if(move_uploaded_file($temp_name, $location.$name)){ echo 'Photo was successfully uploaded.'; } } } else { echo 'Photo was unsuccessfully uploaded, click back and try again.'; } }

Eu sou novo no facebook api, e um novato na codificação. Qualquer ajuda ou conselho será muito apreciado. Obrigado.

Código inteiro:

  validate() ) { $session = null; } } catch ( Exception $e ) { // catch any exceptions $session = null; } } if ( !isset( $session ) || $session === null ) { // no session exists try { $session = $helper->getSessionFromRedirect(); } catch( FacebookRequestException $ex ) { // When Facebook returns an error // handle this better in production code print_r( $ex ); } catch( Exception $ex ) { // When validation fails or other local issues // handle this better in production code print_r( $ex ); } } // see if we have a session if ( isset( $session ) ) { // save the session $_SESSION['fb_token'] = $session->getToken(); // create a session using saved token or the new one we generated at login $session = new FacebookSession( $session->getToken() ); // graph api request for user data $request = new FacebookRequest( $session, 'GET', '/me' ); $response = $request->execute(); // get response $graphObject = $response->getGraphObject()->asArray(); // print logout url using session and redirect_uri (destroy the session) echo 'getLogoutUrl( $session, 'http://localhost/app/index.php', session_destroy() ) . '">Logout'; } else { // show login url echo 'getLoginUrl( array( 'email', 'user_friends', 'publish_actions' ) ) . '">Login'; } ?>    My App   
Please select a photo to upload

<?php if(isset($_POST['submit'])){ $file_type = $_FILES['file']['type']; //returns the file type $allowed = array("image/jpeg", "image/gif", "image/png", "image/jpg"); //specifies allowed file types if(!in_array($file_type, $allowed)) { $error_message = 'Only jpeg, jpg, gif, and png files are allowed.
Please click back and try again.'; echo $error_message; exit(); } $name = $_FILES['file']['name']; //original path of the uploaded file $temp_name = $_FILES['file']['tmp_name']; //contains the path to the temporary file that resides on the server if(isset($name)){ if(!empty($name)){ $location = 'uploads/'; //save photo to the folder: uploads if(move_uploaded_file($temp_name, $location.$name)){ echo 'Photo was successfully uploaded.'; } } } else { echo 'Photo was unsuccessfully uploaded, click back and try again.'; } $session = new FacebookSession( $_SESSION['fb_token']); $request = new FacebookRequest( $session, 'POST', '/me/photos', array ( 'source' => file_get_contents($location.$name), ) ); $response = $request->execute(); $graphObject = $response->getGraphObject(); print_r($response); } $token = $_GET['code']; echo $token; ?>

    OK, existem dois problemas principais com seu código.

    PRIMEIRO :

    Remova session_destroy() do seu código. É a razão pela qual a session está sendo excluída. Você pode então remover o segundo uso de $session = new FacebookSession( $_SESSION['fb_token']); do seu código. Você só precisa fazer esse bit uma vez!

    Mudança:

     echo 'Logout'; 

    para

     echo 'Logout'; 

    SEGUNDO :

    Anexe @ à sua source e você verá que a imagem é carregada corretamente. Por exemplo:

     $request = new FacebookRequest( $session, 'POST', '/me/photos', array ( 'source' => new CURLFile( $location.$name ), ) ); 

    CURLFile só funciona no PHP 5.5+. Para a versão anterior do PHP, configure a origem para:

     'source' => '@' . $location.$name 

    Supondo que o usuário tenha carregado corretamente a imagem e $location.$name é o caminho:

      $request = new FacebookRequest( $session, 'POST', '/me/photos', array ( 'source' => file_get_contents($location.$name), ) ); $response = $request->execute(); $graphObject = $response->getGraphObject(); 

    Ou outra possibilidade é via URL:

      $request = new FacebookRequest( $session, 'POST', '/me/photos', array ( 'url' => $the_url_to_the_image, ) ); $response = $request->execute(); $graphObject = $response->getGraphObject(); 

    E a chamada de API que você faz APÓS o upload é feito pelo usuário, mas isso não é mais do que lógico.