1. Forum używa plików Cookies. Dowiedz się więcej o celu ich używania i możliwości zmiany ustawień Cookies w przeglądarce. Czytaj więcej...

[PHP] Integracja z Facebook

Dyskusja w 'Kursy i poradniki - twórczość własna' rozpoczęta przez użytkownika antyhelion, 2 Grudzień 2015.

  1. antyhelion

    antyhelion Nowicjusz

    Wiadomości:
    20
    Docenione treści:
    13
    Cześć!

    Skoro już było Google, było Live, to czas na Facebook :)
    Jak zawsze na przykładzie pobierania adresu e-mail, ale po ustawieniu odpowiednich uprawnień, można pobrać prawie wszystko.

    Do pliku Facebook_API.php, wrzucamy:
    PHP:
    <?php

        define
    ('FACEBOOK_CLIENT_ID''Twoje ID aplikacji z FB');
        
    define('FACEBOOK_CLIENT_SECRET''Twój sekretny kod');
        
    define('CONFIG_CURRENT_DOMAIN''twoja-strona.com');

        class 
    Facebook_API
        
    {
            public function 
    __construct($redirect_uri null)
            {
                
    $this->redirect_uri urlencode($redirect_uri);
                
    $this->client_id FACEBOOK_CLIENT_ID;
                
    $this->client_secret FACEBOOK_CLIENT_SECRET;
            }

            public function 
    Dialog($scope null)
            {
                
    $state uniqid();
                if (isset(
    $_COOKIE['facebook_access_state'])) {
                    
    setcookie('facebook_access_state'nulltime() - 3600'/''.' CONFIG_CURRENT_DOMAIN);
                }
                
    setcookie('facebook_access_state'$statetime() + 3600'/''.' CONFIG_CURRENT_DOMAIN);

                return 
    sprintf("https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s&state=%s&scope=%s",
                    
    $this->client_id$this->redirect_uri$state$scope
                
    );
            }

            public function 
    GetAccessToken()
            {
                
    $prepare_token sprintf("https://graph.facebook.com/oauth/access_token?client_id=%s&redirect_uri=%s&client_secret=%s&code=%s",
                    
    $this->client_id$this->redirect_uri$this->client_secret$_GET['code']
                );

                
    parse_str(file_get_contents($prepare_token), $params);
                return isset(
    $params['access_token']) ? $params['access_token'] : 0;
            }

            public function 
    OpenGraph($open_graph null$fields 'email')
            {
                
    $access_token $this->GetAccessToken();
                if (empty(
    $access_token)) {
                    return 
    false;
                }

                
    $open_graph sprintf("https://graph.facebook.com/v2.4/%s?access_token=%s&fields=%s"$open_graph$access_token$fields);
                return 
    json_decode(file_get_contents($open_graph), true);
            }
        }
    A w pliku facebook.php:
    PHP:
    <?php

        ob_start
    ();

        include_once(
    'Facebook_API.php');
        
    $oFacebook_API = new Facebook_API('http://twoja-strona.com/facebook.php');

        if (!isset(
    $_GET['code']) OR !isset($_GET['state'])) {
            
    $dialog $oFacebook_API->Dialog('public_profile,email');
            
    Header('Location: ' $dialog); exit;
        }

        
    $facebook_access_state = empty($_COOKIE['facebook_access_state']) ? $_COOKIE['facebook_access_state'];
        if (
    $_GET['state'] !== $facebook_access_state) {
            
    // Jakieś przekierowanie lub komunikat o błędzie
        
    }

        
    $graph $oFacebook_API->OpenGraph('me''name,email');

        if (!isset(
    $graph['email'])) {
            
    // Przekierowanie lub komunikat jeżeli nie pobrało maila
        
    }

       echo 
    $graph['email']; // lub np. ID profilu
    Tak, wiem - nudny jestem z tymi API, ale wiem, że bardzo często się tego szuka i potrzebuje :)

    Pozdrawiam,
    Rafał
     
    TheL i Mariusz lubią to.

Poleć forum znajomym