1

しばらくこのサイトで答えを探していましたが、この問題の答えを見つけることができなかったので、誰かが私に手を差し伸べてくれることを願っています. 私はPHPプログラマーの経験がまったくないので、私がやっていることに深刻な問題がある可能性があります。

とにかく、私は PHP でまったくコーディングせず、Facebook 情報にアクセスする必要がある別の開発者と協力しています。そうは言っても、私はすべての Facebook グラフ呼び出しをカプセル化する Facebook クラスを開発しようとしています。これにより、友人が単一の関数を呼び出して、Facebook PHP SDK 関数を気にすることなく必要なすべての情報を取得できるようになります。まったく。このクラスは、CFacebook.php という別のファイルに入れました。このクラスのコードは以下にあります (Facebook の Web サイトから例をコピーしただけです)。

<?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'));
}

};

?>

このクラスは、Facebook ログインも返されるテスト ページに含まれてインスタンス化されます。Facebookログインが返されるページと同じページにこれらすべての呼び出しを含める必要があるのでしょうか? 私を混乱させている唯一のことは、ブルームーンごとにコードが機能し、実際にFacebookへのリンクを作成することですが、1回おきに「ログインしてください」リンクが表示されたログインページを見つめたままになることです。

4

1 に答える 1

1

私自身はphpの専門家ではありませんが、例外をキャッチするためにtry/catchオブジェクトを使用することをお勧めします.行う。最初のクラスで fb セッションを初期化し、ユーザーを認証し、2 番目のクラスでユーザー情報を提示するなど、別のアプローチを検討してください。ただし、fb ユーザー情報のみが必要なパートナーの場合、ユーザーがログインまたは認証に失敗した場合、メッセージは 2 番目のクラスで配信されます。

説明のために (関数なしで)、ここに含まれるコードを使用します。

于 2012-08-09T20:49:18.310 に答える