Facebook: сообщение на странице как вопрос страницы (токен доступа / php)

Я полностью разочарован моим первым проектом приложения facebook. У меня серьезные проблемы с тем, что кажется простой задачей.

Я хочу настроить работу cron на моем сервере (простое), которое опубликует что-то умное на странице facebook (не мой профиль), и оно должно быть опубликовано как страница. Я закодировал себя в угол и теперь совершенно смущен … Может ли кто-нибудь помочь, пожалуйста?

Я был почти через каждое сообщение об ошибке, и теперь я застрял на « OAuthException: ошибка проверки приложения ».

Вот что у меня есть сейчас:

First php -> Получает новый токен доступа для доступа к моей странице. Эта часть, похоже, работает нормально, так как я получаю следующую страницу и получаю новый токен доступа.

<?php require_once 'facebook.php'; $app_id = "1234...."; $app_secret = "5678...."; $my_url = "http://.../next.php"; $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); // known valid access token stored in a database $access_token = "abc...."; $code = $_REQUEST["code"]; // If we get a code, it means that we have re-authed the user //and can get a valid access_token. if (isset($code)) { $token_url="https://graph.facebook.com/oauth/access_token? client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code . "&display=popup"; $response = file_get_contents($token_url); $params = null; parse_str($response, $params); $access_token = $params['access_token']; } // Attempt to query the graph: $graph_url = "https://graph.facebook.com/me?" . "access_token=" . $access_token; $response = curl_get_file_contents($graph_url); $decoded_response = json_decode($response); //Check for errors if ($decoded_response->error) { // check to see if this is an oAuth error: if ($decoded_response->error->type== "OAuthException") { // Retrieving a valid access token. $dialog_url= "https://www.facebook.com/dialog/oauth?" . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url); echo("<script> top.location.href='" . $dialog_url . "'</script>"); } else { echo "other error has happened"; } } else { // success echo("success" . $decoded_response->name); } function curl_get_file_contents($URL) { $c = curl_init(); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($c, CURLOPT_URL, $URL); $contents = curl_exec($c); $err = curl_getinfo($c,CURLINFO_HTTP_CODE); curl_close($c); if ($contents) return $contents; else return FALSE; } ?> 

Следующий php -> Прочитайте токен доступа и разместите его на стене. Я получаю токен доступа из строки запроса, но почему я получаю сообщение об ошибке. Мой идентификатор, секрет и идентификатор страницы все в порядке …

 <?php require_once 'facebook.php'; $app_id = "1234...."; $app_secret = "5678...."; $page_id = "0909...."; $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); $access_token = $_GET['code']; echo($access_token); try { $attachment = array( 'access_token' => $access_token, 'message'=> "Hello World" ); $result = $facebook->api('/'.$page_id.'/feed','POST', $attachment); var_dump($result); } catch(Exception $e) { echo $e; } ?> 

Я уверен, что есть более простой способ сделать это … и способ заставить его работать! Любая помощь приветствуется!

Я выполнил этот сценарий. Обновите статус страницы facebook с этой страницы, и этот https://developers.facebook.com/blog/post/500

Спасибо.

Solutions Collecting From Web of "Facebook: сообщение на странице как вопрос страницы (токен доступа / php)"

Из вашего кода, похоже, вы не получаете токен доступа PAGE, который вам нужен, но вместо этого вы используете токен доступа USER, поэтому API ему это не нравится. Дополнительные сведения о том, как получить токен доступа PAGE от USER, см. В разделе входа в страницу https://developers.facebook.com/docs/authentication/.

 // firstly include the fb sdk $facebook = new Facebook(array( 'appId' => 'your app id', 'secret' => 'your app secret',`enter code here` 'cookie' => true, )); $session = $facebook->getUser(); $loginUrl = $facebook->getLoginUrl( array( 'scope' => 'user_status,publish_stream,email,user_location,user_birthday,friends_birthday,manage_pages', 'redirect_uri' => 'http://www.example.com/' ) ); $logoutUrl = $facebook->getLogoutUrl( array( // any url u want to redirsct onto 'redirect_uri' => 'http://www.example.com/' ) ); // when redirected from facebook get the code $code = $_GET['code']; // $my_url = 'http://www.example.com/'; $app_id = 'your app id '; $app_secret = 'your app secret '; // here we have the access token so we will play with it if (isset($code)) { $token_url="https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code ; $response = file_get_contents($token_url); $params = null; parse_str($response, $params); $user_access_token = $params['access_token']; } // here we got the access token of user over here in $user_access_token // now we will get for our page //------ get PAGE access token $attachment_1 = array( 'access_token' => $user_access_token ); $page_id = 'your page id '; $result = $facebook->api("/me/accounts", $attachment_1); foreach($result["data"] as $page) { if($page["id"] == $page_id) { $page_access_token = $page["access_token"]; break; } } // write to page wall try { $attachment = array( 'access_token' => $page_access_token, 'message'=> 'hello world posting like admin!', 'page_id'=> $page_id ); $result = $facebook->api('/'.$page_id.'/feed','POST',$attachment); //$result = $facebook->api('/me/feed','POST', $attachment); var_dump($result); } catch(Exception $e) { echo $e; } 

После многих часов проб и ошибок, вот мое решение, которое работает до сих пор.

 <?php require_once 'facebook.php'; //------ vars $app_id = "123..."; $app_secret = "abc..."; $page_id = "999..."; $my_url = "http://exactly the same as defined /"; //------ fb object $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie' => true )); //------ verification CODE // this is not pretty -> the code should be received with a another graph query... // but I couldn't get this to work. Thus I'm using my last known Verification Code $code = "ABC123..."; //------ get USER access token if (isset($code)) { $token_url="https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&client_secret=" . $app_secret . "&code=" . $code . "&redirect_uri=" . $my_url; $response = file_get_contents($token_url); $params = null; parse_str($response, $params); $user_access_token = $params['access_token']; } else { echo("No code"); } //------ get PAGE access token $attachment_1 = array( 'access_token' => $user_access_token ); $result = $facebook->api("/me/accounts", $attachment_1); foreach($result["data"] as $page) { if($page["id"] == $page_id) { $page_access_token = $page["access_token"]; break; } } //------ write to page wall try { $attachment = array( 'access_token' => $page_access_token, 'message'=> 'hello world!' ); $result = $facebook->api('/me/feed','POST', $attachment); var_dump($result); } catch(Exception $e) { echo $e; } ?>