1

FacebookPHPSDKを使用してFacebookからユーザーデータを取得しようとしています。(私はcodeigniterでサイトを開発しています)。すべての基本データを取得できます。しかし、アクセストークンが必要なデータを取得できません。URLを解析して、ログアウトURLからアクセストークンパラメータを取得しています。しかし、そのトークンは機能していません。メインアクセストークンとは違いますか?

これは私のコントローラーファイルです

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class UserRegistration2 extends CI_Controller { 
function __construct() {
    parent::__construct(); 
    $this->load->model('test/Facebook_model');
}

function index() {

    $fb_data = $this->Facebook_model->get_data();

    if((!$fb_data['uid']) or (!$fb_data['me'])) {

        echo "<a href='" .$fb_data['loginUrl']. "'>Login</a>";
    }
    else {
        $params = null;
        parse_str($fb_data['logoutUrl'], $params);
        $graph_url = "https://graph.facebook.com/me/music?access_token=" . $params['access_token'];
        //$user = json_decode(file_get_contents($graph_url));

        echo "<pre>";

        print_r($fb_data);

        //print_r($user);
        //print_r($params);
        echo "</pre>";
        echo "<a href='" .$graph_url. "'>Get Music</a>";
        echo "<a href='" .$fb_data['logoutUrl']. "'>Logout</a>";

    }
}
}

これは私のモデルファイルです

public function __construct() {
    parent::__construct();

    $config = array(
                    'appId'  => '130090207121542',
                    'secret' => 'xxxxxxxxxxxxxxxxxxxxx',
                    'fileUpload' => true
                    );

    $this->load->library('facebook/Facebook', $config);

}

function get_data() { 
    $user = $this->facebook->getUser();
    $profile = null;
    if($user)
    {
        try {
            $profile = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
        }
    }

    $fb_data = array(
                    'me' => $profile,
                    'uid' => $user,
                    'loginUrl' => $this->facebook->getLoginUrl(
                        array(
                            'scope' => 'email,user_interests,user_birthday,publish_stream',
                            'redirect_uri' => 'http://herle.in/flutter/index.php/test/userRegistration2.html'
                        )
                    ),
                    'logoutUrl' => $this->facebook->getLogoutUrl(),
                );

    return $fb_data;
}
}

編集:

Facebook OAuth 2.0を使用してこの質問へのリンクを見つけました -アクセストークンを取得するにはどうすればよいですか?

しかし、それが機能するかどうかはわかりません。CODE(THE_CODE_YOU_GOT_FROM_THE_SERVER)を取得してURLに渡す方法がわからないためです。それが機能する場合、どうすればこのコードを取得できますか?

更新18/04/12

現在動作しています。スコープ内では、ユーザーから「user_likes」の許可を得ていませんでした。

4

3 に答える 3

0
    public function __construct() {
        parent::__construct();

        $config = array(
                        'appId'  => '130090207121542',
                        'secret' => 'xxxxxxxxxxxxxxxxxxxxx',
                        'fileUpload' => true
                        );

        $this->load->library('facebook/Facebook', $config);

    }
   $access_token = $_SESSION['fb_130090207121542_access_token'];
    function get_data() { 
        $user = $this->facebook->getUser();
        $profile = null;
        if($user)
        {
            try {
                $profile = $this->facebook->api('/me');

    // replace app id, gets user token 
            } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
            }
        }

        $fb_data = array(
                        'me' => $profile,
                        'uid' => $user,
                        'loginUrl' => $this->facebook->getLoginUrl(
                            array(
                                'scope' => 'email,user_interests,user_birthday,publish_stream',
                                'redirect_uri' => 'http://herle.in/flutter/index.php/test/userRegistration2.html'
                            )
                        ),
                        'logoutUrl' => $this->facebook->getLogoutUrl(),
                    );

        return $fb_data;
    }

    //
    // gets app access token in the form of access_token=xxxxxxxxxxxxxx
    $app_access_token = GetCH();
    function GetCH(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=135669679827333&client_secret=xxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    //curl_setopt($ch,CURLOPT_CONNECTTIMEOUT_MS,20000);
    if(substr($url,0,8)=='https://'){
        // The following ensures SSL always works. A little detail:
        // SSL does two things at once:
        //  1. it encrypts communication
        //  2. it ensures the target party is who it claims to be.
        // In short, if the following code is allowed, CURL won't check if the 
        // certificate is known and valid, however, it still encrypts communication.
        curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    }
    $sendCH = curl_exec($ch);
    curl_close($ch);
    return $sendCH;
    };

class UserRegistration2 extends CI_Controller { 
function __construct() {
    parent::__construct(); 
    $this->load->model('test/Facebook_model');
}

function index() {

    $fb_data = $this->Facebook_model->get_data();

    if((!$fb_data['uid']) or (!$fb_data['me'])) {

        echo "<a href='" .$fb_data['loginUrl']. "'>Login</a>";
    }
    else {
        $params = null;
        parse_str($fb_data['logoutUrl'], $params);
        $graph_url = "https://graph.facebook.com/me/music?access_token=" . $access_token;
        //$user = json_decode(file_get_contents($graph_url));

        echo "<pre>";

        print_r($fb_data);

        //print_r($user);
        //print_r($params);
        echo "</pre>";
        echo "<a href='" .$graph_url. "'>Get Music</a>";
        echo "<a href='" .$fb_data['logoutUrl']. "?access_token=" .$access_token. "'>Logout</a>";

    }
}
}
于 2012-04-17T14:51:37.533 に答える
0

これは、ユーザーとアプリケーションのaccess_tokensを要求する方法です。ここで必要な他の回答を編集します。


$access_token = $_SESSION['fb_135669679827333_access_token']; 
// replace app id, gets user token

// gets app access token in the form of access_token=xxxxxxxxxxxxxx
$app_access_token = GetCH();
function GetCH(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=135669679827333&client_secret=xxxxxxxxxxxxxxxxxxxx&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//curl_setopt($ch,CURLOPT_CONNECTTIMEOUT_MS,20000);
if(substr($url,0,8)=='https://'){
    // The following ensures SSL always works. A little detail:
    // SSL does two things at once:
    //  1. it encrypts communication
    //  2. it ensures the target party is who it claims to be.
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication.
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
}
$sendCH = curl_exec($ch);
curl_close($ch);
return $sendCH;
};

さらに:ユーザートークンを取得するには、最初にユーザーから少なくとも基本的な権限を持っている必要があります。

于 2012-04-17T14:36:05.900 に答える
0

変更を加えました。そしてそれは今働いています

これは私のコントローラーファイルです

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class UserRegistration2 extends CI_Controller { 
function __construct() {
    parent::__construct(); 
    $this->load->model('test/Facebook_model');
}

function index() {

    $fb_data = $this->Facebook_model->get_data();

    if((!$fb_data['uid']) or (!$fb_data['me'])) {

        echo "<a href='" .$fb_data['loginUrl']. "'>Login</a>";
    }
    else {
        $params = null;
        parse_str($fb_data['logoutUrl'], $params);
        $graph_url = "https://graph.facebook.com/me/music?access_token=" . $params['access_token'];
        //$user = json_decode(file_get_contents($graph_url));

        echo "<pre>";

        print_r($fb_data);

        //print_r($user);
        //print_r($params);
        echo "</pre>";
        echo "<a href='" .$graph_url. "'>Get Music</a>";
        echo "<a href='" .$fb_data['logoutUrl']. "'>Logout</a>";

    }
}
}

これは私のモデルファイルです

public function __construct() {
    parent::__construct();

    $config = array(
                    'appId'  => '130090207121542',
                    'secret' => 'xxxxxxxxxxxxxxxxxxxxx',
                    'fileUpload' => true
                    );

    $this->load->library('facebook/Facebook', $config);

}

function get_data() { 
    $user = $this->facebook->getUser();
    $profile = null;
    if($user)
    {
        try {
            $profile = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
        }
    }

    $fb_data = array(
                    'me' => $profile,
                    'uid' => $user,
                    'loginUrl' => $this->facebook->getLoginUrl(
                        array(
                            'scope' => 'email,user_interests,user_birthday,publish_stream,user_likes',
                            'redirect_uri' => 'http://herle.in/flutter/index.php/test/userRegistration2.html'
                        )
                    ),
                    'logoutUrl' => $this->facebook->getLogoutUrl(),
                );

    return $fb_data;
}
}
于 2012-04-18T11:04:45.533 に答える