"Enter"a basıp içeriğe geçin

PHP ile Shopier Kredi Kartı Entegrasyonu

Shopier kredi kartı entegrasyonu nasıl yapılır? Shopier açık API sağlıyor mu? gibi bir çok konu ve makale bulunmakta. Bu konuya açıklık getirmek amacıyla Shopier hakkında sorulan soruları cevaplayıp ve kredi kartı entegrasyonunu nasıl yapabileceğinizden bahsedeceğim.

Shopier Nedir?

Shopier aslında sanal pos sağlayan bir firma gibi gözükse de aslında sanal pos sağlayan bir firma değildir. Shopier kendi sitesi içerisinden ödeme almanızı sağlayan bir aracıdır.

Shopier Açık API Sağlıyor mu?

Shopier herhangi bir açık API sağlamamakta. Müşteri hizmetlerinizi arasanız dahi kredi kartı entegrasyonu için herhangi bir açık API sağlamadıklarını dile getireceklerdir.

Açık API Sağlamıyor Entegrasyon Nasıl Olacak?

Bu konu çokça kişinin belirli yerlerden belirli bir ücret karşılığında entegrasyon yapmalarını istediği bir konu fakat bu konuya açıklık getirecek olursam; Herhangi bir açık API dahi bulunmasa bile bu bizim entegrasyon yapmamamıza olanak sağlamayacaktır. Entegrasyon işlemini yazılan bir sınıf ile entegre edip kendi sitemizde girilen tutara göre ödeme almamızı sağlayacağız. Nasıl mı? Şöyle; Bu sınıf girilen tutara göre manuel bir ürün oluşturup ödeme almamızı sağlıyor aslında bu oluşturulan ürün ürünlerim kısmında gözükmese dahi hayali bir ürün diyebiliriz. Kullanıcı aldığı ürüne göre tutar bizim sitemizden gidiyor kredi kartı ile ödeme almamızı sağlıyor.

Herhangi Bir Sorun Yaşar mıyım?

Bu yöntemi çoğu kişinin kullanması ile birlikte herhangi bir sorun yaşamadıklarını göreceksiniz. Yasal mı yaptığımız yöntem derseniz sizin adınıza açılan bir mağazada istediğiniz kadar ödeme alıp istediğiniz kadar ürün oluşturabilme yetkiniz nasıl var ise bu yöntemde yasaldır.

Entegrasyon için tarafıma günde bir ton mail geliyor entegrasyon yapmıyorum lütfen mail atmayınız!


Shopier Kredi Kartı Entegrasyonu

Gelelim entegrasyon işlemini yapmaya. GitHub hesabımda açtığım bir repository de bu kaynak kodları size vereceğim. 5 Adımda entegrasyon işlemini yapalım.

    1. Entegrasyon Dosyalarının İndirilmesi
      İlk olarak GitHub hesabımdan dosyaları indiriniz.

    2. Sınıfın Ödeme Alacağımız Sayfaya Dahil Edilip Paket ve Kullanıcı Bilgilerinin Gönderilmesi
      İndirdiğiniz klasörde üç adet dosya bulunmakta bunlar;

      index.php > Ödemeleri alacağımız sayfa.
      ShopierAPI.php > Shopier kredi kartı sınıfı.
      shopierNotify.php > Shopier gelen isteği karşılayacağımız callback yani geri dönüş sayfası.

      Index dosyamızı açtığımızda şu kodlar bulunmakta bu kod blokları ne yapmakta onları açıklayayım;

      <?php
      // Değişkene göre kendiniz düzenleyebilirsiniz.
      include 'shopierAPI.php'; // İndirdiğimiz dosyada bulunan sınıfımızı dosyaya dahil ediyoruz.
      $shopier = new Shopier('SHOPIER_API_KEY', 'SHOPIER_API_SECRET'); // Kendi api bilgilerinizi gireceksiniz.
      $shopier->setBuyer([ // Kullanıcı bilgileri
      'id' => '123456', // Sipariş kodu
      'paket' => 'Eti Canga', // Paket adı
      'first_name' => 'Emre', 'last_name' => 'AKDAŞ', 'email' => 'info@emreakdas.com', 'phone' => '05555555555']); // Kullanıcının ad, soyad, telefon, email bilgileri
      $shopier->setOrderBilling([
      'billing_address' => 'Meclis Mahallesi Emre Caddesi No:544564', //Kullanıcının adresi
      'billing_city' => 'İstanbul', // İl
      'billing_country' => 'Türkiye', //Ülke
      'billing_postcode' => '34000', //Posta Kodu
      ]);
      $shopier->setOrderShipping([
      'shipping_address' => 'Meclis Mahallesi Emre Caddesi No:544564', //Kullanıcının adresi
      'shipping_city' => 'İstanbul', // İl
      'shipping_country' => 'Türkiye', //Ülke
      'shipping_postcode' => '34000', //Posta Kodu
      ]);
      die($shopier->run('544546545', 50, 'https://emreakdas.com/shopierNotify.php')); // Burada üç adet parametre göndermemiz gerekiyor ilk olarak paket id sonra fiyat daha sonrasında ise geri dönüş url mağazadaki girdiğiniz geri dönüş url ile aynı olması gerekiyor bu dosyamız da shopierNotfiy.php dosyamız oluyor.
      ?>
    3. Geri Dönüş URL ve Geri Dönüş Sayfası
      Bu adım ise indirdiğiniz dosyada shopierNotify.php dosyasına denk gelmekte. Bu dosya gönderdiğimiz bilgileri getirmekte eğer kredi kartı ile ödeme başarılı ise yapacaklarıma tekabül etmekte.

      Not: Bu sayfa kullanıcının göreceği bir sayfa değildir kod bloklarının içerisinde locationtrue ve locationfalse değişkenleri kullanıcının eğer işlem başarısız ve başarılı ise göreceği sayfaya yönlendirdiğim kısımdır. Bu kısım opsiyonel olduğu için eklemedim.Siz istediğiniz sayfaya yönlendirebilirsiniz.

      <?php
      //Shopierdan gelen postlar.
      $status = $_POST["status"];
      $invoiceId = $_POST["platform_order_id"];
      $transactionId = $_POST["payment_id"];
      $installment = $_POST["installment"];
      $signature = $_POST["signature"];
      
      /* Bu kısımda kullanıcının işlem başarılı ve başarısızsa yönleneceği değişkenlerdir. */
      $url = 'https://emreakdas.com/';
      $locationtrue = $url."order?orderNo=$invoiceId";
      $locationfalse = $url."order?orderNo=none";
      /* Bu kısımda kullanıcının işlem başarılı ve başarısızsa yönleneceği değişkenlerdir. */
      
      $data = $_POST["random_nr"] . $_POST["platform_order_id"] . $_POST["total_order_value"] . $_POST["currency"];
      $signature = base64_decode($signature);
      $expected = hash_hmac('SHA256', $data, $shopierSecret, true);
      if ($signature == $expected) {
      $status = strtolower($status);
      if ($status == "success") {
      //İşlem başarılı ise yapacaklarınız
      header("Location: $locationtrue");
      }
      else{
      // İşlem başarısız ise yapacaklarınız.
      header("Location: $locationfalse");
      }
      }
      ?>
    4. Entegrasyon Bitiş
      Entegrasyon işlemimiz tam anlamıyla bitti. Entegrasyonun çalışır halini GitHub hesabım üzerinden indirebilirsiniz. (İndir)Aklınıza takılan herhangi bir soruyu yorum kısmında sormaktan çekinmeyiniz hepinize iyi entegrasyonlar 🙂 Tüm entegrasyonlar için; Bilgi
Okuyucu Puanı
[Toplam: 4 Ortalama: 5]

34 Yorum

  1. Onur Bulut Onur Bulut 8 Haziran 2019

    Merhaba benim bir sitem var ben bu sitede oyun hesapları satıyorum isteğim müşteri satın aldığında ürün bilgileri karşısına çıkmasını istiyorum epostam beratcomeon53@gmail.com iletişime geçerseniz sevinirim

  2. Yasemin Eroltu Yasemin Eroltu 29 Temmuz 2019

    Merhaba, bende woocommerce shopier entegrasyonu için shopier’in sağladığı kendi eklentisi var ama eklenti shopierden geri gelen bildirimleri sağlamıyor. Bildirim ayarlarını nasıl woocommerce tabanlı siteme entegre edebilirim. Acaba bir fikriniz var mı?

    • Emre AKDAŞ Emre AKDAŞ 7 Ağustos 2019

      Bildirim ayarları derken biraz açıkça bahsedebilir misiniz? Geri dönüş URL kısmından mı bahsediyorsunuz yoksa tarafınıza bilgilendirme maili mi?

  3. muhammet umunç muhammet umunç 28 Eylül 2019

    Merhaba, Ben siteme bu kodları uyguladım fakat işlem başarılı olduğu zaman istediğim sayfaya yönlendirmiyor. Yardımcı olabilir misiniz?

    • Emre AKDAŞ Emre AKDAŞ 29 Eylül 2019

      Shopier geri dönüş kısmına callback url verirseniz sorun çözülecektir.

  4. muhammet muhammet 5 Ekim 2019

    sitemde bakiye sistemi var bende ödeme sonrası otomatik bakiye yüklemesini istiyorum ancak site wordpress smm paneller gibi verit abanı kolay değil bunu nasıl çözebiliriz _

    • Emre AKDAŞ Emre AKDAŞ 5 Ekim 2019

      Merhaba Muhammet,
      WordPress eklenti yazman gerekir, diğer türlü form vs. wordpress’te işlemez.

  5. Mert Kabak Mert Kabak 10 Ekim 2019

    die($shopier->run(‘544546545’, 50, ‘Callback’));
    Shopiere bu şekilde gönderirken gönderilen ilk parametre değeri neyin değeri oluyor ve işlem başarılı olunca aynı değeri geri gönderiyor mu?

      • ahmet yılmaz ahmet yılmaz 14 Nisan 2020

        lastinsertid göndermekteyim ama bana dönen veri hep 1 oluyor platform_order_id yani?

        • Emre AKDAŞ Emre AKDAŞ 14 Nisan 2020

          Merhaba Ahmet,
          Gönderdiğin son id yerine manuel bir şey gönderip test edebilir misin? Hala sorun varsa github repomdan kaynak kodlarını indirip test edebilirsin.

  6. Çağrı Yılmaz Çağrı Yılmaz 19 Ekim 2019

    Merhaba hocam ;
    Öncelikle paylaşımın için teşekkür ederim. Ufak bir sorunum var.
    Dönüş sayfasında success alıyorum ama $signature ve $expected eşit olmadığından işlem true dönmüyor. $signature == $expected eşitse koşulunu silip sadece $status == “success” şeklinde işlemimi gerçekleştirsem bana bir güvenlik sıkıntısı yaşatır mı ? Burada gelen değerlerin önemi nedir ?

    • Emre AKDAŞ Emre AKDAŞ 19 Ekim 2019

      $status == “success” kullanırsan bir sıkıntı olmaz doğru olanda budur zaten. Burdaki verilerin önemi herhangi bir bakiye ekletme gibi durum güncelleme işlemlerinde vs. yapılır. Yazıda da belirttiğim üzere işlem başarılı olduğunda yapacağınız işlemlerdir. Banka tarafından post geldiği için güvenlik sorunu yaratmaz.

  7. mert ali mert ali 28 Ekim 2019

    merhaba hocam peki eğer sipariş onaylanırsa bilgi maili nasıl gönderirim mail göndermeyi yaptım ama formu doldurduktan sonra adam bilgileri bana mail ile geliyor ödedimi ödemedimi anlamıyorum ama ödedikten sonra mail gelmesini nasıl ayarlarım

    • Emre AKDAŞ Emre AKDAŞ 29 Ekim 2019

      Merhaba Mert,
      Geri Dönüş URL ve Geri Dönüş Sayfası başlığı altında anlatmıştım.
      if ($status == "success") {
      //İşlem başarılı ise yapacaklarınız
      header("Location: $locationtrue");
      }

      eğer kullanıcı ödeme yapmışsa yani başarılı ise buraya düşer burada mail gönderebilirsin.

      • mert ali mert ali 30 Ekim 2019

        tam olarak anlamadım detaylandırma şansınız varmı notify.php diye de bir dosya açıp hangi kodları yapıştırmam lazım ve mail gönderme kodunu nereye yapıştırmam lazım

  8. Enes DOĞRU Enes DOĞRU 12 Ocak 2020

    Teşekkür ederim. Emeğinize sağlık. Süper bir paylaşım olmuş….

  9. Fatih Kızıltoprak Fatih Kızıltoprak 17 Ocak 2020

    Çok teşekkür ederim. Ne zamandır arıyordum.

  10. ahmet hakan ahmet hakan 27 Ocak 2020

    merhaba bunu iyziconun yeni özelliği iyzilinke uyarlayabilir miyiz?

  11. İbrahim Balkaya İbrahim Balkaya 27 Mart 2020

    Emre kardeş ben şöyle bir şey yapmak istiyorum. Gelen callback işlemi ilgili ürün ıd üzerinden nasıl verilebiir.

    • Emre AKDAŞ Emre AKDAŞ 27 Mart 2020

      Gelen callback url’de ürününüzün id’sini get ile gönderip alabilirsiniz. Yada shopier tarafına shopierApi.php dosyasına parametre ekleyip gönderim sağlayıp geri dönüşte alabilirsiniz.

  12. Mehmet ERDOĞAN Mehmet ERDOĞAN 11 Nisan 2020

    Merhaba hocam. Şu anda domain için onay bekliyorumda. daha öncedende sizin bu dosyalarınızia entegre etmiştim.

    fakat shopier geri dönüşde ödenen tutarı değilde sipariş id yi geri döndürüyordu sanırım.

    siparişleri saklamak hafızada tutmak istemiyorum. bunun önüne nasıl bi mantıkla geçebiliriz.

    birde call back da

    normalde callback url si görünmemesi gerekiyor.
    ama oluşturduğumuz form içerisinde callback url görünüyor. tamam kullanıcı bu alanı 1-2 ms görüyor ama. orada js durdurum vs görür.
    shopierin de ne tarzda geri cevap attığını bilen birisi bizim callback urlmize post atarak başarılı bir işlem gibi bypass edemez mi?

    bu durumda $expected = hash_hmac(‘SHA256’, $data, $shopierSecret, true); karşılaştırmasına mı güveniyoruz?

    • Emre AKDAŞ Emre AKDAŞ 11 Nisan 2020

      Merhaba Mehmet,
      İlk sorunu cevaplayacak olursam $_POST[“total_order_value”] tutar geri tarafına gönderiliyor alabilirsin POST şeklinde. İkinci sorun ise callBack sayfası görünsün sen geçerli bir token oluşturup shopier tarafına gönderiyorsun ve gerekli kontrolleri tabi ki senin yapman gerekiyor. Bir kullanıcı o tokene göre istek yollayamaz. Burda işte devreye veritabanından siparişi kontrol etmek düşüyor ki sen kontrol etmek istemiyorsun bir txt dosyasına vs. kayıt edip kontrol de ettirebilirsin. Ama sağlıksız olur. Bütün order sistemlerinde entegrasyon yaptım güvenliğin ve genel ücretin güvenliğinin sağlanması için veritabanı ile çalışabilirsin. Şayet kullanmazsan shopier siparişlerim kısmında ödeme gelmiş mi diye kontrol etmen gerekecek.

      • Furkan Sezgin Furkan Sezgin 11 Ağustos 2020

        Emre Bey, $_POST[“total_order_value”]; $_POST[“platform_order_id”]; $_POST[“currency”]; gibi veriler gelmiyor bu yüzdende signature ve expected kontrolünü geçemiyorum. Nasıl bir çözüm üretilebilir acaba?

  13. Burak Alaca Burak Alaca 14 Nisan 2020

    Print_r ile shopier’den gelen verileri kontrol ettiğimde
    Array (
    [platform_order_id] =>
    [status] => success
    [installment] => 0
    [payment_id] =>
    [random_nr] =>
    [signature] =>
    )
    değerleri dönüyor total_order_value değeri gelmiyor fakat güvenlik kontrolünde
    $data = $_POST[“random_nr”] . $_POST[“platform_order_id”] . $_POST[“total_order_value”] . $_POST[“currency”]; kısmında bu değeri de alıyoruz yanlışlık yok mu ?

    • Emre AKDAŞ Emre AKDAŞ 14 Nisan 2020

      Merhaba Burak,
      Post geldiğinde callback dosyasına ekrana basabilir misin değeri?

      • Furkan Sezgin Furkan Sezgin 11 Ağustos 2020

        Merhaba aynı sorunu bende alıyorum. Bu problemi nasıl aşabiliriz?

  14. Muhammed Cevher Çelik Muhammed Cevher Çelik 7 Temmuz 2020

    Merhabalar benim shopier entegrasyonunda tek sıkıntı var. Ödemeyi aldıktan sonra sitede bakiye eklemiyor ve hata basıyor yardımcı olursanız çok sevinirim. Mailden hemen dönüş yaparım

    • Emre AKDAŞ Emre AKDAŞ 9 Temmuz 2020

      Merhaba Muhammed,
      Biz ödeme alt yapısını gösterdik sadece işlem başarılı olunca açık olan kullanıcıya göre bakiye ekleme işlemi yapabilirsin.

  15. Muammer SOYUPEK Muammer SOYUPEK 5 Ağustos 2020

    Merhabalar mail gönderdim size ancak bir cevap gelmedi yönlendirme falan yapıyor sıkıntı yok ancak her alış veriş yapanı emre akdaş olarak gösteriyor kendi isimlerini yazamıyorlar onu nasıl yapacağız ?

    • Emre AKDAŞ Emre AKDAŞ 5 Ağustos 2020

      Merhaba Muammmer,
      Tarafıma her gün yüzlerce mail geliyor hepsine bakma şansım olmuyor ki arayıp destekte veremem. ‘first_name’ => ‘Emre’, ‘last_name’ => ‘AKDAŞ’, ’email’ => ‘info@emreakdas.com’ buyer kısmında bu değerleri post ile gelen değerle düzenlerseniz sorununuz kalmayacaktır.

  16. Furkan Sezgin Furkan Sezgin 11 Ağustos 2020

    Emre Bey Merhaba, $signature ve $expected alanlarının eşleşmemesi sorununu çözmüş bulunmaktayım, yukarıdaki alanları bu şekilde değiştirirseniz sorun çözülecektir.

    $signature = base64_decode($signature);
    $data = $_POST[“random_nr”] . $_POST[“platform_order_id”];
    $expected = hash_hmac(‘sha256’, $data, ‘API ŞIFRENIZ’, true);
    if ($signature == $expected) {

    $status = strtolower($status);

    if ($status == “success”) {
    //İşlem başarılı ise yapacaklarınız
    header(“Location: $locationtrue”);
    }
    else{
    // İşlem başarısız ise yapacaklarınız.
    header(“Location: $locationfalse”);
    }
    }

    Sorun şundan kaynaklı;

    $data = $_POST[“random_nr”] . $_POST[“platform_order_id”] . $_POST[“total_order_value”] . $_POST[“currency”];

    Data değişkeninde bulunan total_order_value ve currency alanlarını silmeniz gerekiyor bu bilgiler doğrulamayı geçersiz kılıyor. Aynı zamanda $ShopierSecret değişkeni de Modül > API Şifresi olmalı. Teşekkürler, ellerinize sağlık.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir