0

wordpressでoauthを使用してFacebookからユーザーデータを取得しようとしています。プラグインファイルに以下のコードがあります。

class fb{
    function authenticate($req){
define('FACEBOOK_APPID','xxxxx'); // replace 123 with your app id
define('FACEBOOK_APPSECRET','xxxxxx'); // replace abc with your app secret
define('REDIRECTURI','http://test.name.com/index.php?request=facebookdata_Action'); 
   if ($_REQUEST['code'] != '') {
    if ($_REQUEST['state'] != '' && wp_verify_nonce($_REQUEST['state'], 'my-nonce')) {

        $api_url = sprintf("https://graph.facebook.com/oauth/access_token?client_id=%s&redirect_uri=%s&client_secret=%s&code=%s",
            urlencode(FACEBOOK_APPID),
            urlencode(REDIRECTURI),
            urlencode(FACEBOOK_APPSECRET),
            urlencode($_REQUEST['code'])
        );

        $response = wp_remote_request($api_url, array(
            'timeout' => 60,
            'sslverify' => false,
            'method' => 'GET'
        ));

        if( is_wp_error( $response ) ) {
          $messages['error'] = "There was an error.";
        } else {
            $args = wp_parse_args( wp_remote_retrieve_body($response), array() );
            //echo $args['access_token'];
            $messages['userdata'] = $args;
        }
    }
} else {
     $facebook_dialog_url = sprintf("https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s&state=%s&scope=user_photos,email,user_birthday,user_online_presence",
        FACEBOOK_APPID,
        urlencode(REDIRECTURI),
        wp_create_nonce ('my-nonce')
     );
  $messages['url'] = trim($facebook_dialog_url);

}
     echo json_encode($messages);
       exit();
    }
}

// AJAX リクエストを処理する関数

function Request_handler() {
if (isset($_REQUEST['request']) && ($_REQUEST['request'] == 'facebook_Action')) {
        // Otherwise display an error and exit the call
        $obj = new fb();
        echo $obj->authenticate($_REQUEST);
        exit();
    }   
}

// ハンドラーを init() に追加します

add_action('init', 'Request_handler');

ボタンをクリックすると、この関数facebook_Actionを呼び出す ajax を使用してこれを呼び出し、最後に. window.location を使用して、facebook のログイン ページにリダイレクトします。authenticatefacebook url

ログイン後、自分のページにリダイレクトされました。そこで、応答としてアクセストークンを取得しました。email,gender,phone number応答としてユーザーデータを取得するという私の要件。

これについての親切なアドバイス

4

1 に答える 1

0

これを参照しましたhttp://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/

access_token を使用して解決策を見つけました

// Attempt to query the graph:
  $graph_url = "https://graph.facebook.com/me?"
    . "access_token=" . $access_token;
  $response = curl_get_file_contents($graph_url);
  $decoded_response = json_decode($response);

function curl_get_file_contents($URL) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_URL, $URL);
    $contents = curl_exec($c);
    $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
    curl_close($c);
    if ($contents) return $contents;
    else return FALSE;
  }
于 2012-06-29T07:25:06.700 に答える