Php Facebook Graph API ile Üye Girişi

Php Facebook Graph API ile Üye Girişi

Facebook Developer bölümünde geliştiriciler için API ve bir çok sosyal eklenti sunuyor. Bu yazıda bir internet sitesinin üyelik sistemine Facebook üzerinden nasıl giriş yapılabileceğini anlatmaya çalışacağım.

İnternette bu konuda bir çok kaynak bulmanız mümkün. Bizim yapacağımız uygulamanın farkı ise mevcut makalelerin aksine Javascript ve Facebook PHP SDK kullanmadan sadece PHP kullanarak kullanıcıları mevcut üyelik sistemimize entegre etme mantığını görmek.

Uygulamamız 2 php dosyasından oluşuyor. Üzerinde çok fazla işlem yapmadığımız index.php ve Facebook bağlantısını gerçekleştiren connect.php.

index.php

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="tr" lang="tr">
    <head>
        <title>Facebook PHP</title>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <?php if (isset($_SESSION['me'])): ?>
        Facebook ile bağlanmışsınız.
            <pre><?php var_dump($_SESSION['me']); ?></pre>
        <?php else: ?>
            <a href="connect.php">Facebook ile bağlanmak için tıklayınız.</a>
        <?php endif; ?>
    </body>
</html>

Yukarıda da söylediğimiz gibi, bu dosyamızda çok fazla işlem yok. Anlamanızda yardımcı olması amacıyla ekledim. me anahtarlı session varsa içeriğini ekrana basıyor, yoksa kullanıcının giriş yapmasını sağlamak amacıyla connect.php dosyasına giden bir bağlantı gösteriyor.

Asıl işlemi yapan connect.php'de 3 adımda kullanıcıya giriş yaptırıp verilerini alarak index.php'ye geri göndereceğiz. Öncelikle Facebook uygulaması oluşturmamışsak Facebook Developer sayfasından bir uygulama oluşturduktan sonra Application ID ve Secret Key değerlerini alıyoruz.

connect.php

session_start();
//Facebook App ID ve App Secret
$app_id = '';
$secret = '';
$base_url = 'http://www.navruz.net/ornekler/facebook/';

Verileri geçici olarak sessionda tutacağımız için önce yeni bir session başlatıyoruz. Daha sonra App ID ve Secret Key değerlerini birer değişkene atıyoruz. Ayrıca tekrar tekrar yazmamak için site adresimizi $base_url değişkenini oluşturuyoruz.

$code = isset($_GET['code']) ? $_GET['code'] : FALSE;
$access_token = isset($_SESSION['access_token']) ? $_SESSION['access_token'] : FALSE;

Kullanıcı Facebook'a giriş yapıp gerekli izinleri vermişse (2. adımda) Facebook'tan code isimli bir değişken geliyor. Yine 2. adımın sonunda access_token verisi geliyor. PHP NOTICE hatası almamak için gelip gelmediklerini kontrol edip veri yoksa FALSE değerini veriyoruz

$login_url = 'https://graph.facebook.com/oauth/authorize?client_id=' . $app_id . '&redirect_uri=' . $base_url . 'connect.php&scope=email,user_about_me,user_birthday,user_photos';

Kullanıcıyı Facebook üzerinden giriş yapması için yönlendireceğimiz adres. Buradaki scope parametresinde kullanıcıdan almak istediğimiz verileri belirliyoruz. (Detaylar için: http://developers.facebook.com/docs/authentication/permissions/ sayfasını ziyaret ediniz.)

/*
 * Adım 1
 */
if (!$access_token && !$code)
{
    header('Location:' . $login_url);
}
/**
 * Adım 2
 */
elseif (!$access_token && $code)
{
    $furl = make_request('https://graph.facebook.com/oauth/access_token?'
            . 'client_id=' . $app_id . '&'
            . 'redirect_uri=' . $base_url . 'connect.php&'
            . 'client_secret=' . $secret . '&'
            . 'code=' . $code);
    parse_str($furl, $response);
    if (isset($response['access_token']))
    {
        //Sonraki sayfalarda tekrar tekrar istek yapmamak için $_SESSION'a kaydetmekte yarar var.
        $_SESSION['access_token'] = $response['access_token'];
        /* 
         * Adım 3
         */
        $me = json_decode(make_request('https://graph.facebook.com/me?fields=id,first_name,last_name,location,picture,email,birthday,gender&access_token=' . $response['access_token']));
        if (isset($me->id))
        {
            //Burada gelen verileri istediğimiz şekilde kullanabiliriz.
            $_SESSION['me'] = $me;
        }
        header('Location:' . $base_url . 'index.php');
    }
    else
    {
        echo 'access token error';
    }
}

1. Adım: $code ve $access_token yoksa kullanıcı yeni gelmiş demektir. Bu durumda login_url'ye yönlendiriyoruz. Kullanıcı giriş yaptıktan sonra Facebook code isimli bir değer gönderiyor.

2. Adım: Bu adıma geçtiğimizde kullanıcı giriş yapmış ve code değerimiz gelmiş demektir. Şimdi Facebook üzerinden access_token değerimizi almamız gerekiyor. make_request * fonksiyonu yardımıyla isteğimizi yapıyoruz ve Facebook'tan API isteği yaparken kullanacağımız access_token verisi geliyor. Her ihtimale karşı gelen veriyi kontrol edip hata varsa ekrana access token error yazdırıyoruz.

3. Adım:  Bu adıma geldiğimiz zaman neredeyse tüm işlemleri halletmiş oluyoruz. Geriye sadece Facebook ile giriş yapan kullanıcının verileri için istek yapmak kalıyor. Buradaki fields parametresinde almak istediğimiz verileri belirliyoruz ve Facebook verileri json formatında bize gönderiyor. Bizde decode ederek me isimli değişkene atıyoruz. Her ihtimale karşı kontrol ederek me session'una atayıp kullanıcıyı index.php'ye geri gönderiyoruz.

Gelen veriler index.php dosyasında var_dump aracılığı ile tarayıcıda gözüküyor. Tabi burada siz ekrana yazmak yerine mevcut üyelik sisteminize kullanıcıyı otomatik olarak kaydedebilirsiniz. Uygulamanın çalışan halini buradan görebilir, buradan kaynak kodlarını indirebilirsiniz. (Bilgilerinizi bir yere kaydetmiyorum, gönel rahatlığıyla test edebilirsiniz smile )

Not: Eğer Error Validating Verification_code hatasıyla karşılaştıysanız login_url ve 2. adımda istek yaparken kullandığınız redirect_uri değerleri farklı demektir. Hata almamak için bu değerlerin birebir aynı olması gerekiyor. (Hayır sonuna ? bile koyamazsınız.)

* make_request fonksiyonunu uygulama'nın connect.php dosyasında bulabilirsiniz.

Bu yazı en son 05 Aralık 2011 tarihinde düzenlenmiştir ve güncelliğini yitirmiş olabilir.

  • Yakup Çetin

    Teşekkürler kardeşim ilk fırsatta deneyecem bakalım baaşrabilirmiyiz. :D

  • Emre

    Peki güzel kardeşim üyeyi bu bilgiler ile kendi sitemize üye edeceğiz, ama parola üyenin parolasını çekmemizin yolu yokmu, yani facebook üyenin parolasını md5 gibi bir algoritma ile veriyormu ? 

  • Mustafa Navruz

     Hayır, Facebook gibi bir site hangi algoritma ile şifrelerse şifrelesin kesinlikle üye şifrelerini paylaşmaz.
    Kullanıcı Facebook üzerinden izin verip uygulamaya geri döndüğü zaman bir defalığına mahsus şifre belirlemesini isteyebilir veya rastgele bir şifre üretip mail adresine gönderebilirsiniz.
    Ama buradaki asıl amaç kullanıcıya sadece kayıt bölümünde değil siteye giriş bölümünde de Facebook'u kullanabilme imkanı sunmak. Sitenizde Facebook ile giriş yapma imkanı sunarsanız bir çok üyeniz normal giriş formunu kullanmak yerine Facebook ile giriş yapacaktır.

  • Emre Erbakılı

    {
    "error": {
    "type": "OAuthException",
    "message": "Invalid redirect_uri: Verilen URL'ye Uygulama yap\u0131land\u0131rmas\u0131 izin vermiyor."
    }
    }Bu şekilde bir hata alıyorum sizce nasıl kurtulurum bundan?

  • Mustafa Navruz

    redirect_uri değerinde problem var galiba. Yukarıda verdiğim kodlardamı oluştu bu hata?

  • Bahadır

    peki çıkış işlemi için nasıl bir yöntem uygulamamız gerekiyor?

  • Mustafa Navruz

    Kullanıcıyı aşağıdaki url'ye yönlendirin. Kullanıcı çıkış yaptıktan sonra next parametresine yazdığınız url'ye geri dönecektir. Tabi bu arada session'daki access_token değerini de unset etmelisiniz.

    $logout_url = 'http://www.facebook.com/log... . $base_url. '/logout.html&access_token=' . $access_token;
    unset($_SESSION['access_token']);
    header('Location:' . $logout_url);

  • Anıl Şenocak

    bende en yakın zamanda deneyeceğim. inşallah çalışır...

  • Engin Gül

    çalışmıyor malesef. error diyor.

  • Zafer

    10 numara çalışıyor sağol kardeş paylaşım için, Emre Erbaklı ile aynı sorunu yaşayanlar o adrese uygulama açsın facede, o yüzden olmuyor.

  • Ali

    o adrese derken hangi adrese acaba  biraz ayrıntılı anlatabilirmisniz zahmet olmazsa?  bende sorun yaşıyorum aynı konuda :(

  • Gökhan

    Teşekkür ederim bu paylaşım için. ben aynen connect yaptım hiçbir sorun yok facebook ile giriş ve kayıtları alıyorum. Yalnız kayıt olduğunda ya da uygulamaya izin verdiğinde veya siteye her giriş yaptığında o kişinin duvarında bunu duyursun istiyorum. open graph dan nesne ve eylem türü yarattım. kodu aldaki bilgileri make_request le atıyorum ama olmuyor test yapmak için. bununla da ilgili bir yazı yazar yardımcı olursanız sevinirim.

  • Özgür Ataman

    teşekkürler emeğinize sağlık

    güncel facebook login işlemi için suradan yararlanabilrsiniz :
    http://www.turkceteknik.com...

  • Özgür Ataman

    facebook parola vermez. sadece temel bilgiler. ve sonra izin alırsan diğer özel bilgiler. ama parola vermez.

  • Özgür Ataman

    o adres dediği : facebook developer sayfası.

    facebook 2012 php baglanma login işlemleri için :
    http://www.turkceteknik.com...

    bir bakmanı öneririm.

    Uygulama açmalısın dediği, Facebook uygulama geliştirmelisin:
    http://www.turkceteknik.com...

    kolay gelsin

  • abdulk

    Çok teşekkürler çok güzel anlatmışsınız..

  • muhsed

    ya iyide tek tek nasıl alıcaz bu verileri.

  • mert

    peki bloggera da facebook ile giris mumkun mu

  • Gökhan Gunes

    Mustafa bey verdiginiz bilgiler için çook teşekkür ederim. Peki Bişey sorucam Kullanıcı Adına Paylasım Yapma imkanımız varmı ?

  • Guest

    bu uygulamada graph api yani dizi olarak değil de isim=zz soyisim=sss diye çekebilirmiyiz?

  • Anıl Şenocak

    bu uygulamada graph api yani dizi olarak değil de isim=zz soyisim=sss diye çekebilirmiyiz?

  • husnu

    merhaba,

    mevcut üye veritabanımda kullanıcı adı email şifre alanları var.
    facebook logşn uygulaması ile bu bilgileri veritabanına yazıp
    session değeri alarak index sayfamıza yönlendirebilmek mümkün mü?

    selamlar

  • kuzeys

    merhaba ben facebook üzerinden bir uygulama oluşturdum. Uygulama çalışıyor. login sırasında ben ziyaretçiden doğum günü ve lokasyon bilgisinide paylaşmasını istiyorum. Bu ayarı facebook uygulama kısımında mı yoksa oluşturduğumuz kodlarda mı yapmamız gerekiyor acaba?

  • Kurtar Karakuş

    Şifreyi alamzsın ama mümkün. Ben şuanda bu şekilde kullanıyorum. Face ile login deniyor. Kayıtlarım arasında varsa oturum açtırıyorum. Kayıtlarım arasında yokse yeni üye kaydediyorum.

blog comments powered by Disqus

© Mustafa Navruz 2011 0.0186 sn.

^ Başa Dön