Toni Michel Caubet
Toni Michel Caubet

Reputation: 20163

App_access_token Always Returns False

According to the Facebook docs, using App_access_token is as simple as:

$appid = 'xxx';
$secret = 'yyyyyyyyy';
$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => $secret,
  'cookie' => true,
));

$session = $facebook->getUser()>0;
if($session){
  $access_token = 'access_token='.$facebook->getAccessToken();
  $app_access_token = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=$appid&client_secret=$secret&grant_type=client_credentials");
}

My problem is that $access_token is fine but $app_access_token always returns false, what am I doing wrong?

-EDIT-

If I open the app_access_token URL in my browser I can see the access token! It seems to fail the file_get_contents... ?

Upvotes: 0

Views: 164

Answers (2)

Prasanth Bendra
Prasanth Bendra

Reputation: 32740

I file_get_contents not working try this :

Enable php ini setting for allow_url_fopen, then restart the server.

Here is the working code :

<?php

$facebook_appid         = "facebook_appid";                                 // Facebook appplication id
$facebook_secret        = "facebook_secret";                // Facebook secret id
$redirect_uri           = "https://192.168.75.44/facebook_login/fb_login.php";   // return url to our application after facebook login ## should be SAME as in facebook application
//$cancel_url             = "";                                             // redirect url if user denies the facebook login ## should be SAME as in facebook application
$scope                  = "user_photos,email,user_birthday,user_online_presence,offline_access"; // User permission for facebook


$code                   = $_REQUEST["code"]?$_REQUEST["code"]:"";

if(empty($code)) {  
    $_SESSION['state']  = time(); // CSRF protection
    $dialog_url         = "https://www.facebook.com/dialog/oauth?client_id=". $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri) . "&state=". $_SESSION['state'] . "&scope=".$scope;
    header("location:".$dialog_url);
}

if($_SESSION['state'] && ($_SESSION['state'] == $_REQUEST['state'])) {
    $token_url          = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri). "&client_secret=" . $facebook_secret . "&code=" . $code;
    $response           = @file_get_contents($token_url);

    $params             = null;
    parse_str($response, $params);

    echo $params['access_token'];
}

?>

Upvotes: 1

Sahil Mittal
Sahil Mittal

Reputation: 20753

The file_get_contents could be creating problems, may be due to some php config settings. (Discussion here: file_get_contents returns empty string)

I'll recommend you to use cURL instead, something like that-

function get_content($URL){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $URL);
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
  }


echo get_content('http://example.com');

If the problem persists, re-check the values of app_id and secret in the url.

Upvotes: 1

Related Questions