• Bu site çerezler kullanır. Bu siteyi kullanmaya devam ederek çerez kullanımımızı kabul etmiş olursunuz. Daha fazla bilgi edin.

PHP Paypal Entegrasyonu

Konuyu Okuyan Kişiler (0)

inforesim

webmaster.tc
Katılım
4 Ağu 2012
Mesajlar
2,439
Beğeniler
0
#1


Sizlere bu gün çok aranan ve Çok da detaylı kaynak olmayan bir konuya değineceğim "PHP Paypal Entegrasyonu", Paypalınızı sisteme entegre ederek ödeme alabilir ve Ödeme aldıktan sonra otomatik olarak işlem onaylama vs yapabilirsiniz.

Bu işlemleri yaparken, Her hangi ticari hesabınızın olmasına da gerek yok :). Şimdi ilk olarak, Paypal a giriş yapıyoruz.



Yukarıdaki resimdeki gibi, Kullanıcı Profili sekmesine tıklıyoruz.



Oradan Satış Araçlarım kısmına tıklıyoruz. Bu aşamadan sonra, "Web Sitesi Tercihleri" kısmına "Güncelle" diyerek, Ödeme sonrası geri dönüş yapacağı adresi seçiyoruz.



Yukarıdaki resimdeki gibi ilk aktif ediyoruz, Ardından geri dönüş yapacağı adresi yazıp aşağıdan kayıt ediyoruz. Ardından, Satış Araçlarım sayfasına geri dönerek -Anında ödeme bildirimleri- Güncelle butonuna basıyoruz. Gelen sayfada, "IPN Ayarlarını Aç" diyoruz.

Bu sayfada, Vereceğimiz adres sonucunda her hangi bir ödeme yapıldığında belirttiğimiz adrese paypal belirli değerler yollayacaktır. Bu gönderilen değerler ile Gelen ödeme miktarı - Kimden gelmiş - Ne zaman gelmiş gibi bilgileri elde edebiliriz. En önemlisi, Ödeme sonrası anında geldiği için - Kullanıcı siparişini otomatik aktif edebiliriz (Mesela oyun kredisi vs. satıyorsanız veya Siteniz den bakiye satıyorsanız).



Ayarlarımızı yukarıdaki resim deki gibi yapıyoruz ve "Bildirim Url'si" yazan kısma verilen gönderileceği php sayfasını, "IPN Mesajları" yazan kısımda "IPN Mesajlarını Al" işaretleyip Kaydet diyoruz.

Şimdi, Paypal ayarlarımız bitmiş bulunmaktadır. Bundan sonrası yazılımsal tarafıdır (Ödeme yapma sayfası - Ödeme alma sayfası). Şimdi ilk olarak bir PHP sayfası oluşturup ödeme yapma sayfasını yapmış olalım.

İlk olarak, index.php adında bir dosya oluşturun ve İçine aşağıdaki kodları yazın.

PHP:
<!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="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title>Webnaster.TC - Paypal Ödeme</title>
</head>
<body>
<FORM ACTION="https://www.paypal.com/cgi-bin/webscr" METHOD="POST">
<INPUT TYPE="hidden" NAME="cmd" VALUE="_xclick">
<INPUT TYPE="hidden" NAME="business" VALUE="paypal@adresi.com">
<INPUT TYPE="hidden" NAME="undefined_quantity" VALUE="1">
<INPUT TYPE="hidden" NAME="item_name" VALUE="urun-uyeid">
<INPUT TYPE="hidden" NAME="amount" VALUE="00.01">
<INPUT TYPE="hidden" NAME="currency_code" VALUE="TRY">
<INPUT TYPE="image" NAME="submit" BORDER="0" SRC="http://www.paypal.com/tr_TR/i/btn/btn_buynow_LG.gif" ALT="PayPal - The safer, easier way to pay online">
<img alt="" border="" width="1" height="1" src="https://www.paypal.com/tr_TR/i/scr/pixel.gif">
</FORM>
</body>
</html>
Yukarıdaki kodlar ile Paypala bazı bilgiler gönderiyoruz. Bunlar fiyat, Para birimi, Ödeme yapılacak hesap, Ürün adı gibi bilgiler gönderiyoruz. Burada en önemlilerden biri, Ürün adıdır. Çünkü ürün adı ile Üye id si vs. göndereceğiz. Bu sayede, Paypal bize ödeme sonrası dönüş yaptığında ürün adından üye id sini ayrıştırarak ona göre hesaba kredi atayacağız.

Unutmayın, amount satırını silip - amount adında bir textbox koyarak üyenin para miktarı girmesini sağlayabilirsiniz veya amount adında bir açılır menü yaparak ödenecek tuttarı seçmesini sağlayabilirsiniz.

İlk olarak, Size terimleri açıklayayım.

business => Ödeme Yapılacak Paypal Adresi
item_name=> Ödeme Yapılacak Ürün Adı
amount=> Ürün Tuttarı
currency_code=> Ödeme Para Birimi

İlk olarak sizlere, Kullanılan 1-2 adet para birimini vereyim.

TL => TRY
Dolar => USD
Euro => EUR

Değerlerini koyarak, O para birimlerinden ödeme alabilirsiniz. Bu sayfamız da bittik den sonra, Ödeme sonrası bilgi gönderilecek olan paypal.php adlı dosyamızı yapalım. İlk olarak hangi değerler ne olarak geleceğini bilmediğimiz için, Post ile gelenleri json_encode den geçirip bir txt dosyasına yazalım. (Bunu sizin yapmanıza gerek yok, Bundan sonraki aşamada gelen değerleri vereceğim zaten)

Aşağıdaki kodlar da, Sorgunun paypal dan geldiğini anlamak için bazı testler yapıyoruz. Txt kaydetme kodları hariç, Diğer kodları kayıt altına alarak eğer paypal dan geldiyse işlem yaptırabilirsiniz. Yani bir filtre haline getirebilirsiniz.

Not : Aşağıdaki kodlarnı çalışabilmesi için file_get_contents sunucuda açık olması gerekiyor.

PHP:
<?php
$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;
}

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

if ($sonuc=="VERIFIED" && $durum=="Completed") {
$dosya_adi = "paypal.txt";
touch ("$dosya_adi") or die ("Dosya Yaratılamadı!") ;
$dosya = fopen ($dosya_adi , 'w') or die ("Dosya açılamadı!");
fwrite ( $dosya , json_encode($_POST) ) ;
fclose ($dosya);
}
?>
ve Ödeme yapıldığında örnek aşağıdaki gibi değerler geldi.

stdClass Object
(
[mc_gross] => 0.01
[protection_eligibility] => Eligible
[address_status] => unconfirmed
[payer_id] => xxxx
[tax] => 0.00
[address_street] =>
[payment_date] => 04:49:33 Dec 16, 2012 PST
[payment_status] => Completed
[charset] => windows-1254
[address_zip] => 27840
[first_name] => adı
[mc_fee] => 0.01
[address_country_code] => TR
[address_name] =>
[notify_version] => 3.7
[custom] =>
[payer_status] => verified
[business] => ödemealan@adres.com
[address_country] => Turkey
[address_city] =>
[quantity] => 1
[verify_sign] => xxxxx
[payer_email] => ödemeyapan@adres.com
[txn_id] => xxx
[payment_type] => instant
[last_name] => soyadı
[address_state] => xxxxx
[receiver_email] => paypal@webmaster.tc
[payment_fee] =>
[receiver_id] => 93TESHUY8VQRG
[txn_type] => web_accept
[item_name] => urun-uyeid
[mc_currency] => TRY
[item_number] =>
[residence_country] => TR
[handling_amount] => 0.00
[transaction_subject] => urun-uyeid
[payment_gross] =>
[shipping] => 0.00
[ipn_track_id] => xxxx
)
Not : object halini alabilmesi için, Tekrar json_decode den geçirdim (Kayıt edlimiş veriyi).

Şimdi gelen değerlerden, Bazılarını açıklayalım.

payer_email => Ödeme Yapan Mail
txn_id => Benzersiz İşlem Numarası
item_name => Ödeme Yapılan Ürün Adı (Unutmayın, Ürün adında üye idsi ve Ürün idsi yollayarak ayrıştıracağız ve O şekilde üyeliğe kredi atacağız).
mc_gross => Ödeme Yapılan Tutar
mc_fee => Ödeme Sonrası Kesinti
payment_date => Ödeme Tarihi
payment_status => İşlem Sonucu
first_name => Ödeme Yapanın Adı
last_name => Ödeme Yapanın Soyadı
mc_currency => Ödeme Para Birimi


Bu bilgiler sanırım yeterli olur :) Devamını da scriptinize göre uyarlayabilirsiniz. Yani, Veritabanıza uygun olarak verileri kayıt altına alabilirsiniz. Bundan sonrası sizin PHP bilginize kalmış :) İyi Kullanımlar !