Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][facebook] Graph API nie zwraca urodzin mimo prawidłowego tokenu
LamaMASTER
post
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Korzystam z wywołań graph API u siebie w projekcie PHP.

Przy każdym logowaniu generuję też access token aplikacji. Logowanie przez aplikację wymaga zgody na udostępnienie daty urodzenia (bez tego aplikacja nie przepuszcza do logowania).

Po logowaniu dodaję info o użytkownikach do bazy i później na podstawie ich FB_USER_ID mogę pobierać informacje/wykonywać akcje.

Wszystkie opcje mi działają prócz daty urodzin. Próbuję ją pobrać tak:

$fbf = file_get_contents('https://graph.facebook.com/'.$fb_id.'/?access_token='.$appaccesstoken);
$fbf = json_decode($fbf);

print_r($fbf);
echo $fbf->birthday;

Dostaję tablicę danego użytkownika z podstawowymi danymi, ale daty urodzin (birthday, wg dokumentacji), tam nie ma.

Konfiguracja zezwoleń w aplikacji:

http://i.imgur.com/xxWEPEw.jpg

SCOPE przy logowaniu przez FB:

scope=publish_actions,share_item,status_update,email,user_likes,user_birthday

Wszystkie inne rzeczy dostaję bez problemu (email, mogę publikować informacje, lajkować itp., ale nie dostaję daty urodzenia...).

Co robię źle?
Go to the top of the page
+Quote Post
ssstrz
post
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 17
Dołączył: 15.12.2012

Ostrzeżenie: (0%)
-----


nie wykonujesz zapytania o pole urodzin. przetestuj sobie zapytania tutaj https://developers.facebook.com/tools/explorer potem jak bd ok uzyskaj nowy token
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #3





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Dzięki za ten debugger. Wybierając birthday mam "field is empty or disallowed by the access token".

Rozumiem, że mój AT nie uwzględnia tego pola, ale generuję go przy każdym logowaniu z określonym SCOPE, więc powinien się odświeżać.

Generując nowy access token z poziomu tego debuggera dla mojej aplikacji wszystko jest OK, ale przecież nie wkleję tego tokena na sztywno w kod. Jak zrobić, by taki też generował się u mnie?

Robię to tak:

Kod
$appaccesstoken = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id='.$fb['client_id'].'&client_secret='.$fb['client_secret'].'&grant_type=client_credentials');


Coś tutaj jeszcze muszę zmienić?

Ten post edytował LamaMASTER 2.06.2013, 18:29:33
Go to the top of the page
+Quote Post
ssstrz
post
Post #4





Grupa: Zarejestrowani
Postów: 103
Pomógł: 17
Dołączył: 15.12.2012

Ostrzeżenie: (0%)
-----


Ja to robię w ten sposób:
  1. $redirectLink='https://www.facebook.com/dialog/oauth?client_id='.$appId.'&redirect_uri='.urlencode($urlHost).'&state='.$_SESSION['state']
  2. .'&scope=user_birthday,read_stream,email';

i np link albo od razu przekierowanie:
  1. header('Location: '.$redirectLink);

i teraz na podstawie tokena pobierasz dane z json

//
$appId - chyba wiadomo
$urlHost - np localhost
$_SESSION['state'] - $_SESSION['state']=md5(uniqid(rand(),true));
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #5





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Tak mam jak loguję usera i wtedy na jego access tokenie mogę pobrać dane bez problemu.

Chodzi o to, że jak już usera dodałem do bazy to generuję app access token, który jest używany np. w cronie, który z kolei sprawdza czy user zalajkował stronę i takie tam. Teraz chcę uzupełnić daty urodzin (wcześniej nie było tej opcji) i też cron ma przelecieć po użytkownikach i to sprawdzić (użytkownicy już zezwolili na to info), ale tutaj już nie wiem jak wygenerować sensowny access token aplikacji z danymi uprawnieniami . Mój fragment kodu jest wzięty z dokumentacji FB:

https://developers.facebook.com/docs/facebo...ens/#generating

Oczywiście mógłbym pobrać daty zaraz po zalogowaniu usera, ale musiałbym czekać, aż każdy znowu się zaloguje (IMG:style_emoticons/default/smile.gif) Poza tym to samo będzie ze sprawdzaniem lajków, jak ktoś odlajkuje stronę to chcę mu wyłączyć pewne profity, a takie sprawdzanie chciałem robić raz dziennie cronem właśnie jako pętla z appaccesstoken, która sprawdzi każdego usera od razu, nawet jeśli nie logował się od dawna na stronie.
Go to the top of the page
+Quote Post
ssstrz
post
Post #6





Grupa: Zarejestrowani
Postów: 103
Pomógł: 17
Dołączył: 15.12.2012

Ostrzeżenie: (0%)
-----


ale jak aktualny access token nie udostępnia w scope daty urodzin to nie ma opcji aby tak o sobie dopisać birthday, musisz chyba aktualizować te tokeny, ja innej opcji nie widze

Ten post edytował ssstrz 2.06.2013, 19:25:09
Go to the top of the page
+Quote Post
LamaMASTER
post
Post #7





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


OK, mam rozwiązanie.

Niepotrzebnie generuję APP Access Token. Wydawało mi się, że tego typu TOKEN generuje wszystkie uprawnienia aplikacji i pozwala na pokazywanie wszystkiego, a tak naprawdę on służy tylko do zarządzania aplikacją i nie jest potrzebny (nazwa jest myląca).

Zamiast tego wystarczy generować zwykły access token, ten sam co przy logowaniu użytkowników (ze scope), ale nie trzeba do niego robić logowania. Token uwzględnia wszystkie uprawnienia i możemy używać po prostu $_SESSION['access_token'] do autoryzowania sprawdzania urodzin, lajków itp.

Teraz wszystko śmiga (IMG:style_emoticons/default/smile.gif)

Dzięki za nakierowanie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:10