Сохранение/хранение долгоживущего токена Facebook

Я хотел бы получить долговечные токены доступа с моим приложением и сохранить их в таблице пользователей, чтобы я мог повторно использовать их позже. Я делаю этот звонок:

$urlLongLiveToken = "https://graph.facebook.com/oauth/access_token?
client_id=xxxxxx&client_secret=yyyyyy&grant_type=fb_exchange_token
&fb_exchange_token=zzzzzzzzz";

$facebook->api($urlLongLiveToken);

Обменный токен (zzzzzz) — это переменная «code», которую я получаю при первом вызове facebook:

$facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );

Вызов API для долгоживущего токена возвращает массив

array(17) { 'about' => string(108) "OAuth is a simple way to publish and interact with
 protected data. Learn more about OAuth: http://oauth.net/" 'awards' => string(160) "• 
CNET Webware 100 award in the Editors’ Choice Most Important Technology category • Best 
New/Improved Standard in IAM & GRC, European Identity Conference" 'can_post' => 
bool(true) 'category' => string(17) "Internet/software" 'description' => string(174) 
"OAuth is a simple way to publish and interact with protected data. It's also a safer 
and more secure way for people to give you access. We've kept it simple to save you 
time." 'founded' => string(4) "2007" 'is_published' => bool(true) 'mission' => 
string(1344) "In developing OAuth, we sought to invent as little as possible, following 
the Microformats approach to pave existing cowpaths and relying on conventions already 
established in protocols like Google’s AuthSub, aol’s OpenAuth, Yahoo’s BBAuth and 
FlickrAuth and Facebook’s FacebookAuth. While we wanted the best protocol we could 
design, we also wanted one that people would use and that would be compatible with 
existing authentication methods, inherit from existing RFCs and reuse web standards 
wherever "... 'products' => string(19) "OAuth 1.0 OAuth 2.0" 'talking_about_count' => 
int(49) 'username' => string(5) "oauth" 'website' => string(17) "http://oauth.net/" 
'were_here_count' => int(0) 'id' => string(11) "xxxxxxxxxxxx" 'name' => string(5) 
"OAuth" 'link' => string(30) "https://www.facebook.com/oauth" 'likes' => int(7165) }

Что я делаю неправильно? Как я могу получить долгоживущий токен?


person H.novaway    schedule 06.01.2014    source источник


Ответы (1)


Вы не должны передавать полный URL API Facebook Graph в функцию «api». Вам нужно только передать "/oauth/access_token?etc":

Потому что, если вы передаете полный URL-адрес, вы фактически делаете HTTP-запрос к этому https://graph.facebook.com/https://graph.facebook.com/oauth/.

So:

<?php
    $urlLongLiveToken = "/oauth/access_token?client_id=xxxxxx&client_secret=yyyyyy&grant_type=fb_exchange_token&fb_exchange_token=zzzzzzzzz";
    $facebook->api($urlLongLiveToken)
?>
person Bram Vandenbogaerde    schedule 06.01.2014
comment
Спасибо, вроде стало лучше, но теперь у меня проблема с неправильным токеном. - person H.novaway; 17.01.2014
comment
Я думаю, вы должны получить свой недолговечный токен доступа из кода, а затем с помощью этого токена доступа вы можете получить долгоживущий. Подробнее о процессе входа читайте здесь. - person Bram Vandenbogaerde; 18.01.2014
comment
Да, спасибо, вообще-то я делал ненужные звонки. SDK facebook предоставляет простые методы, такие как $fb-›setExtendedAccessToken(). - person H.novaway; 20.01.2014