• 18-12-2024, 02:21:50
    #1
    Merhabalar,

    Kısa bir süre önce geliştirmeye başlamış olduğum çoklu ödeme sistemi kütüphanesini tanıtmak istiyorum.
    Şuanlık sadece PayTR, Iyzico, Shopier entegresi gerçekleştirmiş bulunmaktayım en kısa sürede diğer ödeme firmalarınıda dahil edeceğim.
    Şuanlık Test sürecindedir, neler eklenebilir bununla ilgili yorumda bulunursanız sevinirim.

    https://github.com/mirarus/virtual-pos

    Kolaylıkları;
    • Birden çok ödeme altyapısını tek bir çatı altına toplayıp derli toplu kontrol edebilmek.
    • Kolay bir şekilde callback ve iframe api entegresi.
    Kurulum;
    • PHP versiyonunuzun php 7.3.0 ve üstü olması gerekmektedir.
    • composer require mirarus/virtual-pos
      komutu ile kolay bir şekilde sisteminize entegre edebilirsiniz.

    Ödeme Başlatma;
    
    <?php
    
    // composer require mirarus/virtual-pos
    
    require "vendor/autoload.php";
    
    
    use MirarusVirtualPosEnumsLocale;
    use MirarusVirtualPosEnumsCurrency;
    use MirarusVirtualPosEnumsBasketItemType;
    use MirarusVirtualPosModelsBasket;
    use MirarusVirtualPosModelsBasketItem;
    use MirarusVirtualPosModelsOrder;
    use MirarusVirtualPosModelsBuyer;
    use MirarusVirtualPosModelsAddress;
    use MirarusVirtualPosVirtualPos;
    use MirarusVirtualPosProvidersPayTR;
    use MirarusVirtualPosProvidersIyzico;
    use MirarusVirtualPosProvidersShopier;
    
    // PayTR için
    $PayTR = new PayTR();
    $PayTR->setApiId("--api-id--");
    $PayTR->setApiKey("--api-key--");
    $PayTR->setApiSecret("--api-secret--");
    $PayTR->setApiSandbox(true);
    $PayTR->setApiDebug(true);
    $PayTR->setApiSuccessfulUrl("http://localhost/pay-success");
    $PayTR->setApiFailedUrl("http://localhost/pay-failed");
    
    // Iyzico için
    $Iyzico = new Iyzico();
    $Iyzico->setApiKey("--api-key--");
    $Iyzico->setApiSecret("--api-secret--");
    $Iyzico->setApiSandbox(true);
    $Iyzico->setApiReturnUrl("http://localhost/pay-callback");
    
    // Shopier için
    $Shopier = new Shopier();
    $Shopier->setApiKey("--api-key--");
    $Shopier->setApiSecret("--api-secret--");
    $Shopier->setWebSiteIndex(1);
    $Shopier->setApiReturnUrl("http://localhost/pay-callback");
    
    
    // Ortak Kullanım - Müşteri Bilgileri
    $buyer = new Buyer();
    $buyer->setId(1);
    $buyer->setName("John Doe");
    $buyer->setSurname("Smith");
    $buyer->setEmail("john@doe.com");
    $buyer->setPhone("905000000000");
    $buyer->setIdentityNumber("11111111111");
    
    
    // Ortak Kullanım - Müşteri Adres Bilgileri
    $address = new Address();
    $address->setAddress("... Mah. ... Sok. No: ...");
    $address->setState("Keçiören");
    $address->setCity("Ankara");
    $address->setCountry("Turkey");
    $address->setZipCode("06000");
    
    // setInstallment Harici, Ortak Kullanım - Sipariş Bilgileri
    $order = new Order();
    $order->setId(10000);
    $order->setPrice(10);
    $order->setLocale(Locale::TR);
    $order->setCurrency(Currency::TL);
    $order->setInstallment(1); // Taksit Sayısı (PayTR için)
    $order->setInstallments([1]); // Taksit Sayıları (Iyzico için)
    
    // Ortak Kullanım - Sepet İçeriği
    $basketItem = new BasketItem();
    $basketItem->setId(1);
    $basketItem->setName("Ayakkabı");
    $basketItem->setPrice("10.30");
    $basketItem->setQuantity(1);
    $basketItem->setCategory("Giyim");
    $basketItem->setType(BasketItemType::PHYSICAL);
    
    // Ortak Kullanım - Sepet Bilgileri
    $basket = new Basket();
    $basket->setBasketItem($basketItem); // Sepet İçeriği (Shopier için ilk tanımlanan basketItem geçerli olacaktır)
    
    // Sınıf Başlatma
    $virtualPos = new VirtualPos();
    $virtualPos->setProvider($PayTR); // $PayTR, $Iyzico veya $Shopier
    $virtualPos->setBuyer($buyer);
    $virtualPos->setAddress($address);
    $virtualPos->setOrder($order);
    $virtualPos->setBasket($basket);
    
    // Ödeme Formu Oluştur
    echo $virtualPos->createPaymentForm();
    Geri Dönüş Bildirimi / Callback;

    
    
    require "vendor/autoload.php";
    
    
    
    use MirarusVirtualPosVirtualPos;
    
    use MirarusVirtualPosProvidersPayTR;
    
    require "vendor/autoload.php";
    
    use MirarusVirtualPosVirtualPos;
    use MirarusVirtualPosProvidersPayTR;
    use MirarusVirtualPosProvidersIyzico;
    use MirarusVirtualPosProvidersShopier;
    
    
    // PayTR için
    $PayTR = new PayTR();
    $PayTR->setApiKey("--api-key--");
    $PayTR->setApiSecret("--api-secret--");
    
    
    // Iyzico için
    $Iyzico = new Iyzico();
    $Iyzico->setApiKey("--api-key--");
    $Iyzico->setApiSecret("--api-secret--");
    $Iyzico->setApiSandbox(true);
    
    
    // Shopier için
    $Shopier = new Shopier();
    $Shopier->setApiSecret("--api-secret--");
    
    // Sınıf Başlatma
    $virtualPos = new VirtualPos();
    $virtualPos->setProvider($PayTR); // $PayTR, $Iyzico veya $Shopier
    
    
    // CallBack İşlemi - DB İşlemleri vs. yapılabilir, Return Gönderilemez
    $createCallback = $virtualPos->createCallback(function($data) {
        // data: [orderId, status, paymentData]
        // PayTR callback tarafında gönderilmesi istenen OK ifadesi dahili olarak aktarılmaktadır.
    
        print_r($data);
        // CallBack Proccess
    });
  • 18-12-2024, 02:34:55
    #2
    Hocam 1 tanede cs16 ts3 cs2 php admin bayi müşteri paneli çıkartıp yayınlasanız keşke ak sizin gibi php bilsem keşke
    • mirarus
    mirarus bunu beğendi.
    1 kişi bunu beğendi.
  • 18-12-2024, 02:37:18
    #3
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Hocam 1 tanede cs16 ts3 cs2 php admin bayi müşteri paneli çıkartıp yayınlasanız keşke ak sizin gibi php bilsem keşke
    Hocam zamanında kendi ts panellerimizi yaptık o bize yetti
  • 18-12-2024, 02:41:17
    #4
    Hocam burada neden adres bilgilerini ayrı bir classta kullandınız? buyer classı içerisinde olsa daha iyi olmaz mıydı?
    Bu tür yapılarda yeniyim o sebeple soruyorum.
  • 18-12-2024, 02:45:19
    #5
    sacilannurlar adlı üyeden alıntı: mesajı görüntüle
    Hocam burada neden adres bilgilerini ayrı bir classta kullandınız? buyer classı içerisinde olsa daha iyi olmaz mıydı?
    Bu tür yapılarda yeniyim o sebeple soruyorum.
    Hem kod karmaşasını azaltmak adına hemde birçok odeme yapısına daha kolay uyum sağlayabilmek için böyle bir yol izledim, tabikide buyer üzerinde belirtilebilir.
  • 18-12-2024, 23:10:16
    #6
    Shopier Desteği Geldi;

    Odeme Başlatma;
    require "vendor/autoload.php";
    
    use Mirarus\VirtualPos\Enums\BasketType;
    use Mirarus\VirtualPos\Models\Basket;
    use Mirarus\VirtualPos\Models\Order;
    use Mirarus\VirtualPos\VirtualPos;
    use Mirarus\VirtualPos\Models\Buyer;
    use Mirarus\VirtualPos\Models\Address;
    use Mirarus\VirtualPos\Providers\Shopier;
    use Mirarus\VirtualPos\Enums\Locale;
    use Mirarus\VirtualPos\Enums\Currency;
    
    
    $Shopier = new Shopier();
    $Shopier->setApiKey("--api-key--");
    $Shopier->setApiSecret("--api-secret--");
    $Shopier->setWebSiteIndex(1);
    $Shopier->setApiReturnUrl("http://localhost/pay-return-url");
    
    $buyer = new Buyer();
    $buyer->setId(1);
    $buyer->setName("John Doe");
    $buyer->setSurname("Smith");
    $buyer->setEmail("john@doe.com");
    $buyer->setPhone("0123456789");
    
    $address = new Address();
    $address->setAddress("... Mah. ... Sok. No: ...");
    $address->setState("Keçiören");
    $address->setCity("Ankara");
    $address->setCountry("Turkey");
    $address->setZipCode("06000");
    
    
    $order = new Order();
    $order->setId(10000);
    $order->setPrice(100);
    $order->setLocale(Locale::TR);
    $order->setCurrency(Currency::TL);
    
    
    $basket = new Basket();
    $basket->setName("Ürün Adı");
    $basket->setType(BasketType::PHYSICAL);
    
    
    $virtualPos = new VirtualPos();
    $virtualPos->setProvider($Shopier);
    $virtualPos->setBuyer($buyer);
    $virtualPos->setAddress($address);
    $virtualPos->setOrder($order);
    $virtualPos->setBasket($basket);
    
    
    // Provider tarafında iframe Api cağırımı
    echo $virtualPos->createPaymentForm();
    Callback;
    require "vendor/autoload.php";
     
    use Mirarus\VirtualPos\VirtualPos;
    use Mirarus\VirtualPos\Providers\Shopier;
     
    // Provider Ayarları
    $Shopier = new Shopier();
    $Shopier ->setApiSecret("--api-secret--");
     
    // Sınıf Başlangıcı
    $virtualPos = new VirtualPos();
    $virtualPos->setProvider($Shopier);
     
    // Provider tarafında Callback cağırımı
    $virtualPos->createCallback(function($data) {
    // var_dump($data); // callurse parametresi okunarak orderId ve status verisi alınabilir
    // CallBack Proccess
    /*
    Bu kısımda ödeme işlemi sonucunda gerçekleşicek db kayıt işlemleri yapılabilir.
    */
    });
  • 20-12-2024, 22:29:55
    #7
    Weepay.co desteği gelir mi acaba 🙈 bu arada emeğine sağlık