У меня есть следующий код, который, как мне кажется, очень близок к работе, но я продолжаю получать следующую ошибку:
{"error":{"message":"(#324) Requires upload file","type":"OAuthException"}}
но я не могу понять, как указать файл загрузки … Я пробовал как изображение, так и источник, оба дают ту же ошибку. Любые мысли, помощь, предложения были бы очень благодарны, поскольку я боролся с этим в течение нескольких дней, и кажется, что это не должно быть так сложно …
<html> <head> <title>Photo Upload</title> </head> <body> <?php $app_id = "MY APP ID GOES HERE"; $app_secret = "MY APP SECRET GOES HERE"; $post_login_url = "MY URL GOES HERE"; $album_name = "Test Album"; $album_description = "Blah Blah event Photos"; $photo_source = realpath("C:\\Users\\Public\\Pictures\\Sample Pictures\\Lighthouse.jpg"); $photo_message = 'Here is the lighthouse'; $code = $_REQUEST["code"]; echo "code ==>" . $code . '<br/><br/>'; //Obtain the access_token with publish_stream permission if(empty($code)){ $dialog_url= "http://www.facebook.com/dialog/oauth?" . "client_id=" . $app_id . "&redirect_uri=" . urlencode($post_login_url) . "&scope=publish_stream,user_photos"; echo("<script>top.location.href='" . $dialog_url . "'</script>"); } else { $token_url= "https://graph.facebook.com/oauth/" . "access_token?" . "client_id=" . $app_id . "&redirect_uri=" . urlencode( $post_login_url) . "&client_secret=" . $app_secret . "&code=" . $code; $response = file_get_contents($token_url); $params = null; parse_str($response, $params); $access_token = $params['access_token']; echo "access_token ==>" . $access_token . '<br/><br/>'; // Create a new album $graph_url = "https://graph.facebook.com/me/albums?" . "access_token=". $access_token; $postdata = http_build_query( array( 'name' => $album_name, 'message' => $album_description ) ); $opts = array('http' => array( 'method'=> 'POST', 'header'=> 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = json_decode(file_get_contents($graph_url, false, $context)); // Get the new album ID $album_id = $result->id; //upload photo echo "album_id ==>" . $album_id . '<br/><br/>'; // Upload the photo $args = array( 'message' => $photo_message, 'image' => $photo_source ); $ch = curl_init(); $url = 'https://graph.facebook.com/'.$album_id.'/photos? access_token='.$access_token; echo "url ==>" . $url . '<br/><br/>'; 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); $data = curl_exec($ch); echo "data ==>" . $data . "<br>"; } ?> </body> </html>
Вам нужно установить config var fileUpload
в true
при создании нового экземпляра класса Facebook, как описано в документации здесь и здесь . И вам также нужно разрешение photo_upload 😉
require_once("facebook.php"); $config = array(); $config['appId'] = 'YOUR_APP_ID'; $config['secret'] = 'YOUR_APP_SECRET'; $config['fileUpload'] = true; // <-- set this to 'true' otherwise it won't work $facebook = new Facebook($config);
Вы используете имя файла вместо самого файла в вызове Graph API.
Вы должны префикс имени файла с помощью @
$args = array( 'message' => $photo_message, 'image' => '@'.$photo_source );