2011-09-30 12 views
9

Uaktualniam moje istniejące aplikacje FB i robię absolutne obrażenia próbując uzyskać prostą aplikację Canvas iframe w PHP, aby autoryzować i uwierzytelniać (jak również używać SSL) . Nigdy nie przeglądałem tylu przykładów ...Facebookowa aplikacja na płótnie "redirect_uri" zrywa się z elementu iframe po autoryzacji i uwierzytelnieniu

Oto, gdzie utknąłem: Po autoryzacji aplikacji przez użytkownika, a aplikacja uwierzytelnia użytkownika (jestem w stanie wykonać żądanie wykresu z tokenem w porządku), redirect_uri dzieje się, a cała strona odświeża się, pozostawiając Facebooka, a następnie po prostu pokazuje mi zawartość mojej strony "Canvas URL" (z domeną mojego serwera), zamiast iframed na Facebooku.

Obecnie mam to w postaci surowego procesem dwuetapowym ...

Oto co mój kod wygląda na pierwszej stronie (index.php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 

$code = $_REQUEST['code']; 

if(!$code){ 
$display= 'page'; 
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$oauth_url = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope; 
$config = array('appId' => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true); 
$facebook_client = new Facebook($config); 

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>"; 
} 
?> 

i drugiej strony (Krok 2 .php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 


if($_REQUEST['code']){ 
$code=$_REQUEST['code']; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code; 
$string = file_get_contents($link); 
$auth_token=substr($string, 13, 150); 

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token; 
$user = json_decode(file_get_contents($graph_url)); 
echo("Hello " . $user->name); 
} 

Ponownie, gdy użytkownik autoryzuje aplikację, a aplikacja uwierzytelniła użytkownika, działa połączenie graficzne.

Wszelkie pomysły?

+0

możliwy duplikat [Dlaczego dostaję niezdefiniowany indeks dla signed_request w mojej aplikacji na Facebooku?] (Http://facebook.stackoverflow.com/questions/7534241/why-do-i-get-an-undefined-index -for-signed-request-in-my-facebook-app) – ifaour

Odpowiedz

1

Dobrze, że to działa. W aplikacji> ustawienia> podstawowe nie ustawiłem przestrzeni nazw, więc adres URL, który dałem mi dla aplikacji na Facebooku, wyglądał następująco: https://apps.facebook.com/123456789/, a teraz z przestrzenią nazw zmienili ją na: https://apps.facebook.com/myappname. Tak mogło być. Starałem się uważnie śledzić proste demo autoryzacji PHP na tej stronie: https://developers.facebook.com/docs/appsonfacebook/tutorial/ i wygląda na to, że działa teraz dobrze.

Dzięki za pomoc!

+0

Zauważyłem to samo. Kiedy używam adresu URL z przestrzenią nazw, to działa. Kiedy używam adresu URL z identyfikatorem aplikacji, nie działa. WTH? – hekevintran

6

Podczas przechodzenia do okna dialogowego OAuth strona internetowa (a nie ramka, w której znajduje się aplikacja) jest kierowana do adresu URL OAuth. Aby powrócić do elementu iframe Facebooka po uwierzytelnieniu, musisz ustawić adres URL przekierowania OAuth na adres URL canvas_page. Powyższy kod wyświetla adres URL serwera myserver po przekierowaniu, więc Twoja aplikacja zajmuje całą stronę (ponieważ po przejściu do okna dialogowego OAuth opuściłeś ramkę iframe na Facebooku). Twój kod w canvas_url musi określić, czy jest wprowadzany z autoryzacji (sukces lub niepowodzenie) lub czy jest wprowadzany z ważnym tokenem dostępu po uwierzytelnieniu.

Adres URL strony canvas_page wydaje się składać z hosta aplikacji Facebook i identyfikatora aplikacji. Powinien to być host aplikacji Facebook i nazwa aplikacji (adres URL przekierowania powinien być taki sam jak URL strony "Strona Canvas" na stronie programisty Twojej aplikacji).

+0

Próbowałem tego, ale dostałem błąd API mówiący, że domena Facebooka nie była dozwolona. – jonkeegan

+0

Myślę, że URL strony canvas_page jest nieprawidłowy, patrz wyżej. –

+0

na końcu canvas_url musisz dodać "/" .. zamiast "http://apps.facebook.com/my_canvas_name" użyj "http://apps.facebook.com/my_canvas_name/" – mjs

Powiązane problemy