Başlamadan önce bilmeniz gerekenler:
- Bildiğim kadarıyla API özelliği sadece Business hesaplarda kullanılıyor.
- PayPal tek bir API özelliği yok; PayPal Express, PayPal Pro, Paypal Rest olmak üzere 3 farklı API mevcut, bu anlatım Paypal Rest API için geçerlidir.
- Entegrasyon sonrasında canlı modu aktif etmelisiniz.
PayPal hesabımıza giriş yaptıktan sonra bu linkten Paypal Developer sitesine giriş yapıyoruz. Alttaki gibi bir ekran çıkacak, Test Modunda işlem yapmak için Sandbox sekmesine tıklayıp Create App butonuna tıklayın.

Çıkan sayfada uygulama adı kısmına site adınızı veya herhangi bir ismi girin ve yine Create App butonuna tıklayın. Karşınızda alttaki görseldeki gibi gerekli bilgiler gelecek, bunlar arasında Client ID ve Secret Key değerlerini not alın, birazdan ihtiyacımız olacak.

Şimdi entegrasyonun PHP tarafına geçeceğiz, burada ben GitHub'da bulunan ve birden fazla ödeme entegrasyonunu kolayca yapmamızı sağlayan Omnipay kütüphanesini kullanacağım. Bu kütüphanede dahili olarak PayPal mevcut değil, onu da ayrıca kurmamız gerekecek. Eğer Composer kullanıyorsanız şu komut aracılığı ile gerekli paketleri kurabilirsiniz:
composer require league/omnipay omnipay/paypalComposer kullanmayan arkadaşlar için ise ben ilgili kütüphaneleri zipledim, şuradan indirip projenizin ana dizinine atmanız gerekli: https://gofile.io/d/YatDJE
Gerekli kütüphaneleri kurduktan sonra projemize dahil edip gerekli kodları yazmaya başlayabiliriz, temel olarak 2 dosyada işlem yapmamız gerekecek: ödeme sayfası ve geri dönüş (callback) sayfası.
<?php
require_once 'vendor/autoload.php';
use Omnipay\Omnipay;
$PaypalClientId = 'Buraya Az Önce Aldığımız Client Id Değerini Yazın';
$PaypalClientSecret = 'Buraya Az Önce Aldığımız Secret Key Değerini Yazın';
// Para birimini evrensel formatta girin. USD, EUR, GBP gibi. (Not: TRY desteklemiyor!)
$PaypalCurrency = 'USD';
// PayPal'ı eğer Sandbox (Test) modunda kullanıyor iseniz true, eğer canlı modda ise false yapın.
$PayPalSandbox = true;
// Buraya ödeme miktarını girin.
$PaymentAmount = '10';
// Buraya geri dönüş yani callback url adresini girin.
$CallbackUrl = 'https://site.com/callback.php';
// Buraya işlem iptal olursa yönlenecek adresi girin.
$CancelUrl = 'https://site.com/basarisiz.php';
$PayPal = Omnipay::create('PayPal_Rest');
$PayPal->setClientId($PaypalClientId);
$PayPal->setSecret($PaypalClientSecret);
$PayPal->setTestMode($PayPalSandbox);
$response = $PayPal->purchase(array(
'amount' => $PaymentAmount,
'currency' => $PaypalCurrency,
'returnUrl' => $CallbackUrl,
'cancelUrl' => $CancelUrl,
))->send();
if ($response->isRedirect()) {
// Eğer işlem başarılı olursa ödeme sayfasına yönlendir.
$response->redirect();
}
else {
// Eğer işlem başarısız olursa ekrana hata mesajını yazdır.
echo $response->getMessage();
}
?>Şimdi eğer kodumuzu hatasız olarak yazdıysak kullanıcı başarılı olarak PayPal ödeme sayfasına yönlenecek, ardından ödeme başarılı olursa bizim belirlediğimiz Callback adresine geri dönüş yapacak. Şimdi bu Callback dosyasını ayarlayalım. Ödeme sonrası bize PaymentId değeri GET methoduyla gönderilecek, bu değeri kullanarak işlemi onaylamak gerekli.<?php
require_once 'vendor/autoload.php';
use Omnipay\Omnipay;
$PaypalClientId = 'Buraya Az Önce Aldığımız Client Id Değerini Yazın';
$PaypalClientSecret = 'Buraya Az Önce Aldığımız Secret Key Değerini Yazın';
$PayPal = Omnipay::create('PayPal_Rest');
$PayPal->setClientId($PaypalClientId);
$PayPal->setSecret($PaypalClientSecret);
$PayPal->setTestMode($PayPalSandbox);
if(isset($_GET['PayerID']) && isset($_GET['paymentId'])) {
$response = $PayPal->completePurchase(array(
'payer_id' => $_GET['PayerID'],
'transactionReference' => $_GET['paymentId'],
))->send();
if ($response->isSuccessful()) {
// Eğer işlem başarılı olarak yapıldı ise ödeme ile alakalı bilgileri $PaymentData değişkenine atayalım.
$PaymentData = $response->getData();
// İşlem ID değeri.
$PaymentID = $PaymentData['id'];
// Ödeme yapan kişinin ID değeri.
$PayerID = $PaymentData['payer']['payer_info']['payer_id'];
// Ödeme yapan kişinin email adresi.
$PayerEmail = $PaymentData['payer']['payer_info']['email'];
// Ödeme yapılan miktar.
$Amount = $PaymentData['transactions'][0]['amount']['total'];
// İşlem durumu
$PaymentStatus = $PaymentData['state'];
echo 'İşlem Başarılı! Ödeme ID Değeri: '.$PaymentID;
}
else {
// Hata mesajını yazdıralım.
echo $response->getMessage();
}
}
else {
echo 'PayerID ve paymentId değerleri eksik!';
}
?>Entegrasyonu tamamlamış olduk. Şimdi test aşamasında bizim kendi PayPal hesabımızı kullanmamıza izin vermeyecek. PayPal Developer ekranından Sandbox - Accounts bölümünden Sandbox modunda kullanabileceğiniz test hesap bilgilerini alabilirsiniz. O hesapları kullanarak yaptığınız işlemler otomatik onaylanacaktır.