Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
125 lines (102 sloc) 9.47 KB
ID post_title author post_excerpt layout permalink published post_date
407
PHP ile IPN Kontrollü PayPal Ödeme Butonu
Oral ÜNAL
Bu makalede PayPal ile sitenize nasıl ödeme butonu ekleyeceğinizi ve IPN(instant payment notification) ile bu gelen ödemeyi nasıl doğrulayacağınızı anlatıyorum. Bu işlemler için paypal hesabınız olmalıdır. Eğer yoksa nasıl açmanız gerektiğini yine makalede anlatıyorum.
post
true
2012-03-26 06:44:03 -0700

Merhaba arkadaşlar, bu yazımda hep beraber bir paypal hesabı açacağız ve sitemize bir ödeme yap butonu koyacağız. Daha sonra PayPal IPN ile bu ödemenin gerçek olup olmadığını göreceğiz.

Adım 1 - PayPal Hesabı Açma

PayPal hesabı açmak için www.paypal.com adresine giriyoruz. Buradan Hesap Açın butonuna tıklıyoruz.

Karşımıza gelen ekranda Bireysel başlığı altındaki Hesap açın butonuna tıklıyoruz.

Daha sonra üyelik formunu dolduruyoruz. Üyelik formunu doldurun ve email hesabınızı onaylayın. İşte bu kadar şu anda sizin de bir PayPal hesabınız var.

Adım 2 - PayPal Ödeme Butonumuzu Oluşturalım

Şimdi bir satın alın butonu oluşturalım. Bu butonu oluşturmak için PayPal'a giriş yaptıktan sonra "Kullanıcı Profili" linkine tıklamanız gerekiyor. Bu linke tıkladıktan sonra "Satış Araçlarım" linkine tıklayın ve "Online Satış Yapma" altında "Paypal düğmeleri" karşısındaki "Güncelle" linkine tıklayalım.

Karşınıza gelen sayfada "Hemen Satın Alın Düğmesi Örneği" karşısında "İşlem" linkine tıklayın ve açılan pencereden "Düğmeyi düzenle" yi seçin.

Şimdi formumuzu oluşturmaya başlayalım. Form alanlarını şu şekilde yapalım:

  1. Öğe Adı: TR Kodlama PayPal Denemesi
  2. Fiyat: 5,00
  3. Mağaza Hesap Numaraları: Ana e-posta adresimi kullan xxx@xxx.com'u seçin
Kalan yerlere dokunmanıza gerek yok. Daha sonra kendiniz kurcalarken karıştırabilirsiniz. Şimdi Adım 3 linkine tıklayalım.

Bu adımı da şu şekilde dolduralım:

  1. Müşteriniz bir iletide size özel talimatlar bildirebilir mi? Hayır
  2. Müşterinizin gönderim adresine ihtiyacınız var mı? Hayır
  3. Satın alma işlemini iptal ederlerse müşterileri bu URL'ye yönlendirin kutucuğunu aktifleştirin ve müşteri siparişden vazgeçtiği zaman gideceği adresi tanımlayın
  4. Satın alma işlemini tamamladıktan sonra müşterileri bu URL'ye yönlendirin kutucuğunu aktifleştirin ve müşteri satın alma işlemini tamamladığı zaman gideceği sayfayı tanımlayın.
  5. Son olarak önemli kısıma geldik: Gelişmiş değişkenler tanımla kutucuğunu seçin ve kutucuğun içine şunu yazın
notify_url=http://www.trkodlama.com/paypal/ipn.php
ipn.php dosyamızın içeriğini ilerleyen adımlarda tanımlayacağız.

En son olarak "Değişiklikleri Kaydet" butonuna tıklayalım. Karşımıza HTML bir kod gelecek. Bu kodu kaybetmeyelim. Hemen http://www.sizindomaininiz.com/paypal/index.html isimli bir dosya oluşturalım ve bu dosyanın içine sadece bu HTML kodu yapıştıralım. Tarayıcı aracılığı ile açalım index.html dosyasını. Şimdi şöyle bir görüntü elde etmeniz gerekiyor:

Adım 3 - ipn.php Dosyasını Oluşturalım

ipn.php dosyasını oluşturmadan önce "PayPal" isimli bir veritabanı oluşturun ve şu komutu çalıştırın:
CREATE TABLE paypal(
    id int(255) AUTO_INCREMENT,
    durum int(1),
    veri text,
    PRIMARY KEY (id)
)
Veritabanında paypal isimli bir de tablo oluşturduk bu komut sayesinde.

Önceki adımda notify_url isminde bir parametre ile ipn.php dosyamızın adresini vermiştik. Satın alma işlemi tamamlandığında PayPal arka planda ipn.php dosyanıza bir kaç veri POST eder. Siz bu verileri tekrar GET ile paypal'a yönlendirirsiniz. Eğer gönderdiğiniz veriler ilk başta POST ile gelen verilerle aynı ise VERIFIED yazılacak. Eğer farklıysa INVALID yazdırır. Bizde buna göre kontrol ederiz.

Ayrıca gelen verileri JSON formatında veritabanında saklayacağız.

Şimdi ipn.php dosyamızın içeriğini verelim:

<?php
header("Content-type: text/html; charset=utf-8");

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("paypal") or die(mysql_error());

// PayPal tarafından POST eden verileri toplayalım ve işleyelim
// Paypal'a geri gönderirken parametrelerin en başına cmd=_notify-validate ekliyoruz
$req = 'cmd=_notify-validate';
$json = array();
foreach ($_POST as $key => $value) {
	$value = urlencode(stripslashes($value));
	if($key=="payment_status") $durum = $value; // Burada ödeme durumunu yakaladık.
	$req .= "&$key=$value";
	$json[$key] = $value;
}

// Şimdi PayPal'a gidelim.
$sonuc = file_get_contents("https://www.paypal.com/cgi-bin/webscr?$req");

if ($sonuc=="VERIFIED" && $durum=="Completed") {
	$json = json_encode($json);
	mysql_query("INSERT INTO paypal VALUES(NULL, 1, '$json')");
} else {
	mysql_query("INSERT INTO paypal VALUES(NULL, 0, '$json')");
}
?>

Bu şekilde satın alma işlemi tamamlandıktan sonra herşeyi yani bütün verileri de inceleyebilirsiniz.

Adım 4 - PayPal Sandbox

Kendi kendinize test edebilmeniz için PayPal'ın sandbox isimli bir hizmeti var. Bu hizmet sayesinde ipn.php dosyanıza POST edilecek bütün verileri siz belirliyorsunuz. Mesela "Status" değeri "Completed" veya "Failed" olsun şeklinde. Eğer completed dışında bir değer yollarsanız ipn dosyası veri tabanınıza durum kısmında 0 olarak ekler. 0'lar başarısız olanlardır.

PayPal Sandbox'ı kullanabilmek için üye olmanız gerekmektedir. Ekstra bir üyelik. Ayrıca PayPal Sandbox ile test yaparken ipn.php dosyamızdaki

$sonuc = file_get_contents("https://www.paypal.com/cgi-bin/webscr?$req");

kısmını aşağıdaki şekilde değiştirmelisiniz:

$sonuc = file_get_contents("https://www.sandbox.paypal.com/cgi-bin/webscr?$req");

PayPal Sandbox'a girmek için buraya tıklayın.

Sonuç

Lütfen sorularınızı sormaktan çekinmeyin. Herkes için faydalı olacağını düşündüğüm bir konuydu bu. Nette bulunan kaynaklar hep eski. Güncel kaynak yokluğunda iyi gider bu makale.

Kolay gelsin,

Son Güncelleme: 19 Kasım 2012 10:18 (Mert Doğan'a teşekkürler.)