Я полностью разочарован моим первым проектом приложения 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
Спасибо.
Из вашего кода, похоже, вы не получаете токен доступа 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; } ?>