HomeBackend Geliştirme

PHP ile IPN Kontrollü PayPal Ödeme Butonu

PHP ile IPN Kontrollü PayPal Ödeme Butonu

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 [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:

  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

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:

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:

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

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

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

TOPLAM 25
  • comment-avatar
    Batuhan Küçükali 13 yıl önce

    güzel anlatım olmuş teşekkürler.

  • comment-avatar
    Ali İhsan 12 yıl önce

    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.

    • comment-avatar

      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,

    • comment-avatar
      haifisch 12 yıl önce

      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

  • comment-avatar
    serhat 12 yıl önce

    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

    • comment-avatar
      haifisch 12 yıl önce

      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.

  • comment-avatar
    haifisch 12 yıl önce

    her şekilde 0 değeri dönüyor hocam.

  • comment-avatar
    haifisch 12 yıl önce

    ödeme yapıldığında durum pending sonuc ise boş dönüyor

  • comment-avatar

    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…

  • comment-avatar
    MERT DOĞAN 12 yıl önce

    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?

    • comment-avatar
      Savaş Türk 9 yıl önce

      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.

      • comment-avatar
        MERT DOĞAN 9 yıl önce

        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.

  • comment-avatar

    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?

  • comment-avatar

    kimse yok mu???

  • comment-avatar

    Yukarıdaki kodda

    kısmı tam olarak senin dediğin işe yarıyor.

  • comment-avatar
    MERT DOĞAN 12 yıl önce

    Paypal’dan IPN sayfamıza özel bir parametre gönderilmesini sağlayabilir miyiz? Mesela urun_kodu=12 gibi

  • comment-avatar

    doğruya o tabloyu çekip karşılaştırırım =)

  • comment-avatar

    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

  • comment-avatar
    Ahmet Uğur 12 yıl önce

    Merhabalar , cok işime yaradı . Paylasım için teşekür ederim .

  • comment-avatar
    Mineturk 11 yıl önce

    Yazı için teşekkürler. Paypal IPN hakkında fazla örnek yok. Çok yardımcı oldu.

  • comment-avatar
    yüksel 11 yıl önce

    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

  • comment-avatar
    emir yusuf 10 yıl önce

    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ı

    • comment-avatar

      “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.

DISQUS: 0