質問

I would like to get long lived access tokens with my app, and store them in the users table, so I can reuse it later. I'm making this call :

$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);

The exchange token (zzzzzz) is the variable "code" I get from the first call to facebook:

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

The API call for the long lived token returns an array

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) }

What do I do wrong ? How can I get the long lived token ?

役に立ちましたか?

解決

You should not pass the full Facebook Graph API url to the function "api". You only need to pass "/oauth/access_token?etc":

Because, if you pass the full URL you're actually making an HTTP request to this 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)
?>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top