Pepster
Pepster

Reputation: 2166

Facebook4J support for exchanging access-tokens

I'm looking for a way to exchange short-lived access tokens for long-lived access tokens in our backend as described by Facebook here. How to do this with facebook4j?

Upvotes: 3

Views: 2524

Answers (2)

Tomasz Luczynski
Tomasz Luczynski

Reputation: 34

I have done something like this to exchange old token for new token:

private AccessToken refreshToken(Facebook facebook, AccessToken currentToken) throws Exception {
    String clientId = configuration.getString(ConfigurationKeys.SOCIAL_FACEBOOK_CLIENTID);
    String clientSecret = configuration.getString(ConfigurationKeys.SOCIAL_FACEBOOK_CLIENTSECRET);

    Map<String, String> params = new HashMap<String, String>();
    params.put("client_id", clientId);
    params.put("client_secret", clientSecret);
    params.put("grant_type", "fb_exchange_token");
    params.put("fb_exchange_token", currentToken.getToken());

    RawAPIResponse apiResponse = facebook.callGetAPI("/oauth/access_token", params);

    String response = apiResponse.asString();
    AccessToken newAccessToken = new AccessToken(response);

    facebook.setOAuthAccessToken(newAccessToken);

    return newAccessToken;
}

I think this can be done after each login so the access token is refreshed even if it still valid - you will just get newer token with 60 days of validity.

What do you think?

Upvotes: 1

Muktadir
Muktadir

Reputation: 115

I am extending the Facebook class. The method they provided don't work. So I wrote another function which does gives a long lived token but it's somehow invalid ( I tried testing the new token with token_debug and tried to generate client_code with it)! I will update you if I get to work it out. If you can solve it, please update me.

Please remember I didn't clean up the code as I am still writing on it.

public function GetExtendedAccessToken()
{
    //global $CONFIGURATIONS;
    //$info=$this->api($path,'GET',$args);//doesn't work as api overrides method to post

    $string=file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$this->getAppId()
                            ."&client_secret=".$this->getAppSecret()
                            ."&fb_exchange_token=".$this->getAccessToken()
                            ."&grant_type=fb_exchange_token"
                            ."&redirect_uri=".$redirectUri);
    var_dump($string);
    $tokenInfo=explode('&',$string);

    $exAccessToken=str_replace('access_token=', '', $tokenInfo[0]);
    $expiresAt=str_replace('expires=', '', $tokenInfo[1]);
    echo "expires in ". (time()-$expiresAt);
    var_dump($exAccessToken);     
    return $exAccessToken;  
}

It works now. Some times I get an error for not providing redirect_uri.

Upvotes: 0

Related Questions