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:
- Öğe Adı: TR Kodlama PayPal Denemesi
- Fiyat: 5,00
- Mağaza Hesap Numaraları: Ana e-posta adresimi kullan [email protected]’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:
- Müşteriniz bir iletide size özel talimatlar bildirebilir mi? Hayır
- Müşterinizin gönderim adresine ihtiyacınız var mı? Hayır
- 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
- 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.
- 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
1 |
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:
1 2 3 4 5 6 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?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
1 |
$sonuc = file_get_contents("https://www.paypal.com/cgi-bin/webscr?$req"); |
kısmını aşağıdaki şekilde değiştirmelisiniz:
1 |
$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.)
Yorumlar
güzel anlatım olmuş teşekkürler.
Merhaba aynı tarz bir uygulama yaptım. Ancak ben düğmeyi paypal tarafında oluşturmadım. Sabit bir değer değilde her seferinde farklı tutarlar gönderiyorum. Burada bir class kullandım ben.ancak sizin dediğiniz gibi ipn işlemini yapamadım. Müşteri ödeme yaptıktan sonra ancak benim sayfama dönerse ben işlemi algılayabiliyorum ve ödeme onayı verebiliyorum. Burda ne yapmam gerekiyor size.
Anladım, fakat PayPal ile ilgili şu anda tek bildiğim budur. Diğer işlemler nasıl sağlanır, nasıl edilir bir bilgim yok ne yazık ki. Fakat dediğiniz durumu anlatan benzer bir yazı ile karşılaşırsam sizi bilgilendiririm.
Kolay gelsin,
birde paypaldan kod alın Gelişmiş değişkenler tanımlayı kesinlikle doldurun. Kodu aldıktan sonra elinizdeki kod ile aldığınız kodu karşılaştırın ve Gelişmiş değişkenler tanımla ya yazdığınız kodu arayın. bulunca sizin yazdığınız koda ekleyin
Hocam şimdi bende bunun gibi bir uygulama yapmak istiyorum yanlız benim yapacağımda para miktarı değişebiliyor yani sabit para birimi değil php koduyla butonu php sayfasnda oluştururken değiştirmek istiyorum. acil cevaba ihtiyacım var teşekkürler
paypaldan aldığınız kodda name değeri currency_code olan textin valuesinden değiştirebilirsiniz. Türkiye için try sandbox için usd dir hocam.
her şekilde 0 değeri dönüyor hocam.
ödeme yapıldığında durum pending sonuc ise boş dönüyor
Yapılan ödeme işleminde kullanıcının hangi ürünü satın aldığını ve gerçekde ödeme yapıp yapmadığını algılıyor yalnız session değerini yani hangi kullanıcının satın aldığını algılatamıyorum sebebi ne olabilir.
teşekkürler…
Birşey dikkatimi çekti de:
$json[“key”] = $value;
şeklinde array değişkenlerini kaydetmişsiniz ama bu durumda sürekli aynı array elemanına value değerini kayıt yapar gibi duruyor. Doğrusunun
$json[$key] = $value;
şeklinde olması gerekmiyor mu?
Hayır gerekmiyor. Nedeni ise sizin dediğiniz gibi yapılırsa $json[‘121314131232’] Gibi bir değişken olacağından dolayı bizde bu değişkeni alamayız. Çünkü ne geleceğini bilmiyoruz. Ama yazarın yazdığın kodda ise $json[‘key’] = ‘121314131232’; dönüyor.
arkadaşım kodu ben düzeltme önerdikten sonra düzelttiler. Şu anda bir sorun yok. Benim düzeltme önerim kodun eski hali içindi. Orada key’in başında $ yoktu ve devamlı ‘key’ dizi anahtarına aynı değer yazılıyordu; anlamsızdı. Bu hali ile düzeltildi.
merhaba burdan sayfama olumlu ise bir sonuç bastırabilir miyim. çünkü olumlu ise kullanıcının db sindeki puana+5 puan ekleteceğim nasıl yaparım?
kimse yok mu???
Yukarıdaki kodda
kısmı tam olarak senin dediğin işe yarıyor.
Paypal’dan IPN sayfamıza özel bir parametre gönderilmesini sağlayabilir miyiz? Mesela urun_kodu=12 gibi
doğruya o tabloyu çekip karşılaştırırım =)
Pardon. bu dosya sadece paypal erişecek. satın alma işlemi tamamlanırsa bu sayfaya yönlendir demişiz. nasıl bir şey uygulayabiliriz ki o sayfaya yönlendiğinde ben o kişiye veri işleyim. çünkü o sayfaya dışardan giren bir başka üye kendisine işler
Merhabalar , cok işime yaradı . Paylasım için teşekür ederim .
Rica ederim :)
Yazı için teşekkürler. Paypal IPN hakkında fazla örnek yok. Çok yardımcı oldu.
Sanırım artık gereksiz durumda :)
Merhabalar paylaşım için teşekkürler,
Benim şöyle bir sorunum var; buradaki herşeyi dediğiniz gibi yapıyorum ama benim ipn php de kaydetme işlemi olmuyor. ödeme gerçekleşiyor,sayfama tx=xxxxx&st=completed gibi url değerleri geliyor. Yukardaki gibi kaydetmek istiyorum db ye. Neden olabilir yardımlarınızı bekliyorum
benim hostum localhost kullanmayın diyen yazıyor localhost yerine veritabanı adını yazsam olurmu?
mysql_select_db(“paypal”) or die(mysql_error());
burada yazan paypal veritabanı adı mı tablo adımı
“localhost” veritabanı adı değildir, veritabanı host adresidir.. Eğer hizmet aldığınız yer localhost kullanımına izin vermiyorsa host için ne kullanmanız gerektiğini mutlaka paylaşmışlardır.