2012-07-09 4 views
1

J'ai cherché sur ce site pour la réponse pendant un certain temps et je n'ai pas été en mesure d'en trouver un pour ce problème, donc j'espère que quelqu'un peut me donner un coup de main. Je ne suis pas vraiment un programmeur PHP expérimenté, donc il pourrait y avoir quelque chose de grave avec ce que je fais.Facebook PHP SDK Connection

De toute façon je travaille avec un autre développeur qui ne code pas du tout en PHP et qui a besoin d'accéder aux informations de Facebook. Cela étant dit, j'essaie de développer une classe facebook qui encapsule tous les appels de graphs sur Facebook, permettant à mon pote d'appeler une seule fonction et d'obtenir toutes les informations dont il a besoin sans avoir à se soucier des fonctions du Facebook SDK PHP. du tout. Cette classe j'ai mis dans un fichier séparé appelé CFacebook.php. Le code pour cette classe peut être trouvé ci-dessous (j'ai simplement copié l'exemple sur le site web facebook)

<?php 
require_once 'facebook.php'; 
class CFacebook 
{ 

//private variables 
private $Config = ""; 
private $FBObject = ""; 
private $Code = ""; 
private $Session = ""; 
private $AppId = '*************'; 
private $ApiSecret = '*******************'; 
//I have the API secret and AppID in 
//here but for privacy reasons I've taken them out 
//constructor 
public function CFacebook() 
{ 
    $this->FBObject = new Facebook(); 
    $this->FBObject->setApiSecret($this->ApiSecret); 
    $this->FBObject->setAppId($this->AppId); 
} 

//Get profile information 
public function GetFBProfileInformation() 
{ 
    $FBProfile = ""; 
    $ID = $this->FBObject->getUser(); 
    echo "<br />"; 
    if($ID) 
    { 
     try { 
      $FBProfile = $this->FBObject->api('/me','GET'); 
      return $FBProfile; 
     }catch (FacebookApiException $e) 
     { 
      //send back to UI to have user sign in 

      // If the user is logged out, you can have a 
    // user ID even though the access token is invalid. 
    // In this case, we'll get an exception, so we'll 
    // just ask the user to login again here. 
    echo "has ID <br />"; 
    $login_url = $this->FBObject->getLoginUrl(); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 
    echo $this->FBObject->getAccessToken()."<br />"; 
    echo $this->FBObject->getApiSecret()."<br />"; 
    error_log($e->getType()); 
    error_log($e->getMessage()); 
     } 
    }else 
     { 
      //return to UI taht user isn't logged in and have user re-sign in 

      //If the user is logged out, you can have a 
    // user ID even though the access token is invalid. 
    // In this case, we'll get an exception, so we'll 
    // just ask the user to login again here. 
    $Page = "http://fratlabs.com/FacebookTest.php"; 
    $login_url = $this->FBObject->getLoginUrl(array('scope'=>'email,publish_stream,user_likes,user_hometown','redirect_uri'=>$Page)); 
    //$logout_url = $this->FBObject->getLogoutUrl(array('next'=>'http://fratlabs.com/FacebookTest.php')); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 
    //echo 'Logout Url: <a href="'. $logout_url.'">Logout</a>'; 
    error_log($e->getType()); 
    error_log($e->getMessage()); 

     } 

    //echo $this->FBObject->getLogoutUrl(array('next'=>'http://fratlabs.com/FacebookTest.php')); 
} 

};

?>

Cette classe est inclus et instancié dans une page de test qui est l'endroit où la connexion Facebook est retourné aussi. Peut-être que j'ai besoin d'inclure tous ces appels dans la même page que celle à laquelle le login facebook est retourné? La seule chose qui me dérange, c'est que chaque fois que le code fonctionne, je crée un lien vers Facebook, mais toutes les autres fois, je regarde la page de connexion avec le lien "please login".

Merci pour votre aide, j'apprécie vraiment!

-Brett

Répondre

1

Bien que je ne suis pas moi-même expert en php, je crois qu'il est conseillé d'utiliser essayer/objets de capture pour attraper des exceptions généralement que la production de messages non comme un opérateur logique (comme if/else) avec bien chemins définis du script comme vous semblez le faire. Considérons une approche différente comme l'initialisation de la session fb et l'authentification de l'utilisateur dans la première classe et la présentation des informations de l'utilisateur dans une seconde classe. Mais pour votre partenaire qui ne veut que des informations sur l'utilisateur fb, un message peut être délivré en deuxième classe si l'utilisateur ne s'est pas connecté ou authentifié avec succès. Pour l'illustration (sans fonctions), j'utilise le code here inclus.