• 08-09-2020, 20:11:59
    #1
    Üyeliği durduruldu
    Merhaba. Geçen gün bir projede ihtiyacım oldu ancak internette Türkçe kaynak bulamadım, İngilizce kaynaklar ile kendi işimi gördüm fakat ihtiyacı olan illaki olur diye düşünüyorum sizinle de paylaşmak istedim.

    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.
    İlk adımda tabiki de bir PayPal hesabına ihtiyacımız var. PayPal bize Sandbox (Test Modu da diyebiliriz) özelliği sunuyor, bu sayede hesabınız onaylı olmasa daha API entegrasyonunu sorunsuz yapabilirsiniz.

    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/paypal
    Composer 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.
    Elimden geldiğince anlatmaya çalıştım, umarım faydalı olmuştur. Sorunuz olursa konu altından yazarsanız yanıtlamaya çalışırım.
  • 08-09-2020, 20:16:33
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Döküman için teşekkürler hocam, elinize sağlık
  • 08-09-2020, 20:19:25
    #3
    Üyeliği durduruldu
    bmathers adlı üyeden alıntı: mesajı görüntüle
    Döküman için teşekkürler hocam, elinize sağlık
    Rica ederim, ne mutlu işinize yararsa.
  • 15-02-2021, 08:04:16
    #4
    Konuyu hortlatmış gibi olacam da hocam koyduğunuz link çalışmıyor. Hazır hali varmı acaba
  • 15-02-2021, 09:03:01
    #5
    Üyeliği durduruldu
    yusok32 adlı üyeden alıntı: mesajı görüntüle
    Konuyu hortlatmış gibi olacam da hocam koyduğunuz link çalışmıyor. Hazır hali varmı acaba
    Selamlar. Muhtemelen composer paketinden bahsettiniz. http://s000.tinyupload.com/index.php...88986386029296
  • 04-05-2021, 14:29:12
    #6
    hocam composer ile kuramıyorum yeni linkte patlamış durumda elinizde hala dosyalar mevcutmu acaba ??
  • 04-05-2021, 14:48:21
    #7
    acil lazım ondan dolayı yine konuyu horlattım, composerdan hata veriyor neden bilmiyorum
  • 04-05-2021, 14:51:45
    #8
    Üyeliği durduruldu
    yusok32 adlı üyeden alıntı: mesajı görüntüle
    acil lazım ondan dolayı yine konuyu horlattım, composerdan hata veriyor neden bilmiyorum
    Buyrun hocam: https://gofile.io/d/A0fFkV
  • 29-09-2021, 16:17:24
    #9
    Döküman için teşekkürler hocam, elinize sağlık ,
    Dosyaları tekrar paylaşa bilir misiniz ?