Я получаю мучительно близко к завершению этого сценария. Цель состоит в том, чтобы отправить событие на одну из моих стен фан-страниц. Скрипт эффективно захватывает правильный токен доступа к PAGE и эффективно публикует событие, но он находится на моей личной стене, а не стене страницы, к которой я пытаюсь ее получить.
Что мне не хватает? Кажется, все там, но, очевидно, что-то внутри или снаружи.
Любая помощь приветствуется! Вот код:
<?php $app_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $app_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $my_url = "http://xxxxxxxxxxxxxxxxxxxxxx.com/testfiles/fbeventform.php"; //Going to get the PAGE access code //First to get USER Access Code session_start(); $code = $_REQUEST["code"]; if(empty($code)) { $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state=" . $_SESSION['state'] . "&scope=create_event&scope=manage_pages"; echo("<script> top.location.href='" . $dialog_url . "'</script>"); } if($_REQUEST['state'] == $_SESSION['state']) { $token_url = "https://graph.facebook.com/oauth/access_token?" . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; $access_token = @file_get_contents($token_url); $params = null; parse_str($access_token, $params); $graph_url = "https://graph.facebook.com/me?access_token=" . $params['access_token']; $user = json_decode(file_get_contents($graph_url)); echo("Hello " . $user->name); } else { echo("The state does not match. You may be a victim of CSRF."); } echo '<hr />' . $access_token; //Now, getting the PAGE Access token, using the user access token $page_token_url = "https://graph.facebook.com/" . $page_id . "?fields=access_token&" . $access_token; $response = file_get_contents($page_token_url); // Parse the return value and get the Page access token $resp_obj = json_decode($response,true); $page_access_token = $resp_obj['access_token']; echo '<hr />' . $page_access_token; //Post the event--here's the form function if( !empty($_POST) && (empty($_POST['name']) || empty($_POST['start_time']) || empty($_POST['end_time'])) ) { $msg = "Please check your inputs!"; } elseif(!empty($_POST)) { $url = "https://graph.facebook.com/" . $page_id . "/events?" . $access_token; $params = array(); // Prepare Event fields foreach($_POST as $key=>$value) if(strlen($value)) $params[$key] = $value; // Check if we have an image if( isset($_FILES) && !empty($_FILES['picture']['name']) ) { $uploaddir = './upload/'; $uploadfile = $uploaddir . basename($_FILES['picture']['name']); if (move_uploaded_file($_FILES['picture']['tmp_name'], $uploadfile)) { $params['picture'] = "@" . realpath($uploadfile); } } // Start the Graph API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); $result = curl_exec($ch); $decoded = json_decode($result, true); curl_close($ch); if(is_array($decoded) && isset($decoded['id'])) { // Event created successfully, now we can // a) save event id to DB AND/OR // b) show success message AND/OR // c) optionally, delete image from our server (if any) $msg = "Event created successfully: {$decoded['id']}"; } } ?> <form enctype="multipart/form-data" action="" method="post"> <p><label for="name">Event Name</label><input type="text" name="name" value="a" /></p> <p><label for="description">Event Description</label><textarea name="description"></textarea></p> <p><label for="location">Location</label><input type="text" name="location" value="" /></p> <p><label for="">Start Time</label><input type="text" name="start_time" value="<?php echo date('Ymd H:i:s'); ?>" /></p> <p><label for="end_time">End Time</label><input type="text" name="end_time" value="<?php echo date('Ymd H:i:s', mktime(0, 0, 0, date("m") , date("d")+1, date("Y"))); ?>" /></p> <p><label for="picture">Event Picture</label><input type="file" name="picture" /></p> <p> <label for="privacy_type">Privacy</label> <input type="radio" name="privacy_type" value="OPEN" checked='checked'/>Open <input type="radio" name="privacy_type" value="CLOSED" />Closed <input type="radio" name="privacy_type" value="SECRET" />Secret </p> <p><input type="submit" value="Create Event" /></p> </form> </body> </html>