1

私は現在、zend フレームワークでソーシャル エンジンを開発しています。ソーシャル エンジンには、Facebook サイトにログアウトしていても Facebook に接続したままにできるプラグインが組み込まれています。私のソーシャル エンジン サイトにステータスを投稿すると、Facebook サイト (ここでは facebook.com を意味します) にログインしていなくてもウォールに投稿されますが、これを行う方法がわかりません。ソーシャル エンジンでカスタム ウィジェットを作成したので、Facebook SDK を使用する必要があると考えました。

私は Facebook SDK を使用して成功しましたが、問題は、ユーザーが facebook.com にログインしていないことをスクリプトが検出するたびに、ユーザーにログインを要求することです。これを解決するには??

openid、facebookemail などのユーザーの詳細を実際に取得できます。はい、それは私が知っていることだけです:(

4

1 に答える 1

1

Zend-Framework で同じ種類のアプリケーションを開発しました。oAuth 2.0 で Facebook/PHP-SDK を使用しました。

この場合、特定のユーザーのデータベースにアクセス トークンを保存する必要があります。そのアクセス トークンを使用して、任意のデータを取得したり、投稿したりできます。はい、そのためには、Facebook アプリに対してユーザーから必要な許可を与える必要があります。

アプリケーションでアクセス トークンを取得し、拡張してデータベースに保存するために使用した 2 つの関数を次に示します。

 /**
     * Getting User Acess Tocken , extended it and save it in to database......
     */
    public function getAccessToken($user_id,$fb_account_id)
    {
         $access_token=$this->facebook->getAccessToken();               
         $extended_access_token=$this->getExtendedAccessToken($access_token);                
        /** 
         * To save Access tocken and other necessary option
         */  
        $usr_bus_model = new Application_Model_UserBusinessAccounts;

        $usr_bus_model->loadAccount($user_id,'Facebook',(int)$fb_account_id);

        $usr_bus_model->details=$extended_access_token;
        $usr_bus_model->save();

        return $extended_access_token;
    }

     /**
     * Exrending User Acess Tocken.....
     */

    public function getExtendedAccessToken($access_token)
    {       

        $token_url="https://graph.facebook.com/oauth/access_token";
        $params=array('client_id'=>self :: appId,'client_secret'=>self :: appSecretId,'grant_type'=>'fb_exchange_token','fb_exchange_token'=>$access_token);

          $response = $this->curl($token_url,$params);
          $response = explode ('=',$response);
          $response = explode ('&',$response[1]);
          $response = $response[0];       
          return $response;

    }

それが役に立てば幸い。

于 2012-07-27T10:02:15.010 に答える