Facebook access token, jogosultsággal?
Sziasztok!
PHP-val, tárolt access token segítségével szeretnék postolni egy page falára.
Ezzel a kóddal megy is:Ha az access tokent a graph api explorer-rel kérem le, ott be lehet jelölni a jogosultságokat (permissions) és egy igen hosszú access tokent ad, ezzel működik a fenti kód.
Persze megpróbáltam én kérni az access tokent, ezzel a kóddal:...de amit így kapok, azzal a tokennel nem tudok a falra postolni, "The user hasn't authorized the application to perform this action" hibát kapok vissza. (A "&scope=publish_stream" paramétert próbálgatásképp tettem hozzá, semmi hatása)
Az így kapott token egyébként sokkal rövidebb is.
Már kutakodtam mindenhol, de nem jöttem rá, hogy mi hibádzik, hogyan lehet olyan tokent kérni, amivel postolni is lehet?
(Gondoltam, hogy firebuggal megnézem, hogy mit küldd el a FB amikor a graph api explorer-rel kérem a tokent, és azt leutánzom, de külön ablakban kéri és utána gyorsan becsukja, így nem tudom megnézni a forgalmat)
Tudnátok segíteni, mit rontok el?
Köszönöm!
■ PHP-val, tárolt access token segítségével szeretnék postolni egy page falára.
Ezzel a kóddal megy is:
$url = "https://graph.facebook.com/$pageid/feed";
$fields = array (
'message' => urlencode('teszt post'),
'access_token' => urlencode($access_token)
);
$fields_string = "";
foreach ($fields as $key => $value):
$fields_string .= $key . '=' . $value . '&';
endforeach;
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
Persze megpróbáltam én kérni az access tokent, ezzel a kóddal:
$app_token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
.$app_id.'&client_secret='.$app_secret
.'&grant_type=client_credentials'
.'&scope=publish_stream';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $app_token_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
parse_str($res, $token);
curl_close($ch);
if (isset($token['access_token']))
{
$access_token=$token['access_token'];
}
Az így kapott token egyébként sokkal rövidebb is.
Már kutakodtam mindenhol, de nem jöttem rá, hogy mi hibádzik, hogyan lehet olyan tokent kérni, amivel postolni is lehet?
(Gondoltam, hogy firebuggal megnézem, hogy mit küldd el a FB amikor a graph api explorer-rel kérem a tokent, és azt leutánzom, de külön ablakban kéri és utána gyorsan becsukja, így nem tudom megnézni a forgalmat)
Tudnátok segíteni, mit rontok el?
Köszönöm!
Long living tokens
Ilyet lehet kliens oldali vagy szerver oldali modon is szerezni, a doksi oldalak errol a temarol itt es itt, magarol a loginrol osszefoglalo oldal itt, egy szep szemlelteto oldal az kulombozo authentikacios modokrol itt.
Nagy vonalakban:
Ezeknek mind meg fogod tudni adni hogy szeretnel "publish_stream" permissiont is es ha a felhasznalo is ugy akarja (nem muszaj engedelyeznie a publish_stream -et de attolmeg telepitheti az appot es kapsz valid access_token -t) lesz egy tokened ami korulbelul egy oraig ervenyes az adott userhez.
Ezt a rovid lejaratu tokent kell becserelned facebooknal egy hosszu lejaratura ami jelenleg max 60 napig fog ervenyes maradni, ezt fogod tudni letarolni adatbazisban, errol itt irnak, illetve aktualis githubon elerheto php sdkban mar van - egyelore hivatalos doksiban nem dokumentalt - metodus is ra.
Ha nem a felhasznalo userevel akarsz az oldalra postolni, hanem mint az oldal maga (mert a felhasznalo admin az oldalon) akkor szukseged lesz a "manage_pages" extended permissionre, ha az megvan a felhasznalo /me/accounts graph api vegpontonjan talalhato page access tokeneket kell becserelni hosszu lejaratu tokenekre es azt hasznalni postolaskor. Bovebben az "Login as page" oldalon.
Köszönöm, többet, többet :-)
Rájöttem, hogy a problémafelvetésben kevés infót adtam meg: a lényeg, hogy az alkalmazás saját page-ének a falára szeretnék postolni.
Ezért is választottam azt, hogy nem user access tokent, hanem app access tokent használnék - gondoltam, ez elég az ilyen feladathoz.
Megnéztem a két access tokent -- amit a graph api explorer ad (ez hosszú, több karakterből álló), és a másikat, amit a kódommal kértem le (ez rövidebb).
Ezzel a kis kóddal írattam ki infót:
Jól következtettem?
Ha az is app tokent gyárt, akkor az miért hosszabb? Miért működik a hosszabb token és a rövidebb nem? ...és hogyan adható meg, hogy legyen hozzárendelve olyan jog, ami lehetővé teszi a postolást?
Köszi!
out of my depth
A tokenek hossza a bennuk tartolt extra infok mennyisegetol fugg, ha behajitod a debug tooljukba akkor szepen kiirja amit tudni lehet a tokenrol, ez alapjan ha csak "app name" -van benne akkor az app access token, user tokenekrol kiirja szepen hogy mikor jar le (persze epoc time -ban, mert mindenki tud 32bites integer timestampekbol kapasbol fejben atvaltani :P)
Amennyire meg tudtam allapitani, graph explorer user tokeneket general a kivalasztott apphoz (jobboldalt fent lehet valogatni), debug tool alapjan a mezok ugyanazok mint tobbi auth flow -al generalt user tokeneknel.
Ami eddigi tapasztalataim alapjan biztosank tunik, hogy page neveben page -re postolni csak page access tokennel lehet. App -al sajat maga neveben nem lehet sehova se postolni. Teszt appoldalam ugyanolyannak tunik mint barmilyen mas page (a dokumentacioban nem talaltam semmit ami appok community pageirol szolna azon tul, hogy leteznek): manage_pages permission mellett szepen megjelenik a /me/accounts alatt ahogy azt kell a page adminjainak. Mindebbol a kovetkezteteseim ezek:
Ezert a szokasos "login as page" modszerrel begyujtott tokenekkel fogsz tudni postolni. Ehez viszont szukseged lesz egy, az oldalon admin userre akitol kerhetsz manage_pages permissiont majd kinyerheted megfelelo access_token -t /me/accounts alol, majd lehet oket meghosszabbitani, hogy ne jarjanak le 1 ora alatt.
Ettol fuggetlenul kiserletezhetsz app access tokennel elerheto funkciokkal hatha van valami nem dokumentalt de egyebkent supportalt dolog.
(jo kerdes, hogy honnan lehet megmondani, hogy supportal-e ha nincs dokumentalva... :P)
app access token
Hasznos volt, amiket írtál, segített kizökkenni a problémából, user/page tokennel oldom meg a dolgot.
Most pillanatnyilag az FQL-lel vacakolok, le szeretném szűrni azokat a postokat, amikre még nincs komment, de mivel se join, se isnull nincs, a struct típusú mezőkre pedig nem sikerült szűrőt beállítanom (még nem jöttem rá), ezért nem is olyan egyszerű. De azért majd boldogulok valahogy :-)
Köszi ismét, jó hétvégét!
comments.count
(Gondoltam, hogy firebuggal
Hogy figyelni tudd a forgalmat van más eszköz is. Egyik ilyen a HttpFox. Ha szinte bármilyen HTTP forgalmat szeretnél figyelni, böngészőtől függetlenül, akkor tudom ajánlani a Fiddler2-t, illetve a sajnos fizetős, de annál többet tudó Charles Proxy-t.
Köszi