wmaraci reklam

PHP -> Çoklu Sanal Pos Kütüphanesi

4 Mesajlar 245 Okunma
Toplam 4 mesaj ve 245 görüntüleme
acebozum
wmaraci reklam

aliguclu aliguclu PHP Developer Kullanıcı
  • Üyelik 20.12.2024
  • Yaş/Cinsiyet 22 / E
  • Meslek PHP Developer
  • Konum Ankara
  • Ad Soyad A** G**
  • Mesajlar 2
  • Beğeniler 2 / 1
  • Ticaret 0, (%0)

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;

require "vendor/autoload.php";


use Mirarus\VirtualPos\Enums\Locale;
use Mirarus\VirtualPos\Enums\Currency;
use Mirarus\VirtualPos\Enums\BasketItemType;
use Mirarus\VirtualPos\Models\Basket;
use Mirarus\VirtualPos\Models\BasketItem;
use Mirarus\VirtualPos\Models\Order;
use Mirarus\VirtualPos\Models\Buyer;
use Mirarus\VirtualPos\Models\Address;
use Mirarus\VirtualPos\VirtualPos;
use Mirarus\VirtualPos\Providers\PayTR;
use Mirarus\VirtualPos\Providers\Iyzico;
use Mirarus\VirtualPos\Providers\Shopier;

// 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 Mirarus\VirtualPos\VirtualPos;
use Mirarus\VirtualPos\Providers\PayTR;
use Mirarus\VirtualPos\Providers\Iyzico;
use Mirarus\VirtualPos\Providers\Shopier;


// 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
});
Wriase

kişi bu mesajı beğendi.

paytr kampanya
reklam

Wriase Wriase WM Aracı Kullanıcı
  • Üyelik 12.10.2023
  • Yaş/Cinsiyet 38 / E
  • Meslek Tacir
  • Konum İzmir
  • Ad Soyad S** Ü**
  • Mesajlar 13
  • Beğeniler 5 / 4
  • Ticaret 0, (%0)

Selamlar, Biraz fazla kapsamlı bir konuya giriş yapmışsın hocam :)

Bu konuda ödeme ağ geçitlerini eklerken diğer yandan banka ödeme kanallarınıda sisteme dahil etmeyi deneyebilirsin. Bankaların sanal pos sistemleri bazılarında ortak bir yapıda olurken bazılarında kendilerine özgü sistemler kullanıyorlar. Eğer bu kısım için bir yerden başlamayı düşünürsen sana elimizdeki banka sanal pos entegrasyonları için güncel dökümanları iletebildiğim kadar iletirim. 

Diğer yandanda ödeme ağ geçitleri için (iyzico, sipay vb) kart binine göre installments datasını çekme özelliği eklenebilir. Gelen kart ailesi ve taksit özelliklerine göre mevcut taksit oranlarını getirme ve buna göre kullanıcının seçerek ilerlemesi şeklinde bir özellik kurgulanabilir. Bu özellik bazı durumlarda beraberinde ufak bir handikapta getiriyor. Mesela çoğu işletme 1, 2 ve 3 taksit için müşteriye oran yansıtmak istemeyebiliyorlar. Fakat ağ geçidinden oranları aldığımızda bazı sistemlerde müşteriye uygulanacak oran ek olarak ayarlanamadığı için bu noktada sorun çıkıyor. Bu sorun içinde hibrit bir çözüm bulunması denenebilir. (Örn. ilgili gateway ayarlarının yapıldığı yerde bir parametre olabilir ve şu oranlara vade farkı uygulanmasın seçimi yaptırılabilir, yada şu taksit sayısına şu oranı sabit olarak uygula geri kalanı dnamik olarak karşıdan gelenleri uygula gibi bir kurgu oluşturulabilir)

Çok fazla eklenebilecek şey var birkaç tane daha ekliyorum;

[] Ödeme iptal ve iade etme özelliği eklenebilir
[] Yapılan ödemelerin listesinin getirilmesi eklenebilir (Tarih aralığı ve işlem durumuna göre filtre eşliğinde)
[] Bankalar için sanal poslar eklenirse şayet, varsayılan ödeme pos seçim özelliği eklenebilir[
[] 3D bacağı için işlemin nasıl gerçekleşeceğine dair opsiyon eklenebilir (Iframe, popup, redirect)
[] orderID için eğer kulanıcının sistemi her ödemede özgün bir id verecek yapıda değilse, uniqe bir order id üretme sistemi eklenebilir

Zaman içinde yeniden aklıma geldikçe yazmaya devam ederim. Bu arada github'da sistemin tam ne işe yaradığını ve hangi ödeme geçitlerini yada sanal pos'ları kapsadığını belirten daha detaylı bir readme alanı oluşturmanı tavsiye ederim. Hem aramalarda görünürlüğünü arttırır hemde girip bakanların daha net konuya hakim olmasına katkı sağlar.

aliguclu

kişi bu mesajı beğendi.

aliguclu aliguclu PHP Developer Kullanıcı
  • Üyelik 20.12.2024
  • Yaş/Cinsiyet 22 / E
  • Meslek PHP Developer
  • Konum Ankara
  • Ad Soyad A** G**
  • Mesajlar 2
  • Beğeniler 2 / 1
  • Ticaret 0, (%0)

Wriase adlı üyeden alıntı

Selamlar, Biraz fazla kapsamlı bir konuya giriş yapmışsın hocam :)

Bu konuda ödeme ağ geçitlerini eklerken diğer yandan banka ödeme kanallarınıda sisteme dahil etmeyi deneyebilirsin. Bankaların sanal pos sistemleri bazılarında ortak bir yapıda olurken bazılarında kendilerine özgü sistemler kullanıyorlar. Eğer bu kısım için bir yerden başlamayı düşünürsen sana elimizdeki banka sanal pos entegrasyonları için güncel dökümanları iletebildiğim kadar iletirim. 

Diğer yandanda ödeme ağ geçitleri için (iyzico, sipay vb) kart binine göre installments datasını çekme özelliği eklenebilir. Gelen kart ailesi ve taksit özelliklerine göre mevcut taksit oranlarını getirme ve buna göre kullanıcının seçerek ilerlemesi şeklinde bir özellik kurgulanabilir. Bu özellik bazı durumlarda beraberinde ufak bir handikapta getiriyor. Mesela çoğu işletme 1, 2 ve 3 taksit için müşteriye oran yansıtmak istemeyebiliyorlar. Fakat ağ geçidinden oranları aldığımızda bazı sistemlerde müşteriye uygulanacak oran ek olarak ayarlanamadığı için bu noktada sorun çıkıyor. Bu sorun içinde hibrit bir çözüm bulunması denenebilir. (Örn. ilgili gateway ayarlarının yapıldığı yerde bir parametre olabilir ve şu oranlara vade farkı uygulanmasın seçimi yaptırılabilir, yada şu taksit sayısına şu oranı sabit olarak uygula geri kalanı dnamik olarak karşıdan gelenleri uygula gibi bir kurgu oluşturulabilir)

Çok fazla eklenebilecek şey var birkaç tane daha ekliyorum;

[] Ödeme iptal ve iade etme özelliği eklenebilir
[] Yapılan ödemelerin listesinin getirilmesi eklenebilir (Tarih aralığı ve işlem durumuna göre filtre eşliğinde)
[] Bankalar için sanal poslar eklenirse şayet, varsayılan ödeme pos seçim özelliği eklenebilir[
[] 3D bacağı için işlemin nasıl gerçekleşeceğine dair opsiyon eklenebilir (Iframe, popup, redirect)
[] orderID için eğer kulanıcının sistemi her ödemede özgün bir id verecek yapıda değilse, uniqe bir order id üretme sistemi eklenebilir

Zaman içinde yeniden aklıma geldikçe yazmaya devam ederim. Bu arada github'da sistemin tam ne işe yaradığını ve hangi ödeme geçitlerini yada sanal pos'ları kapsadığını belirten daha detaylı bir readme alanı oluşturmanı tavsiye ederim. Hem aramalarda görünürlüğünü arttırır hemde girip bakanların daha net konuya hakim olmasına katkı sağlar.

Çok saolun hocam, peki hangi odeme arayüzleri entegre etmem gerekir, çünkü birçok kişi yabancı firmaları kullan diyorlar, bi tık haklilarda çünkü tr pos firmalarından kabul almak zulüm, banka uzeri daha zulumdür diye düşünüyorum.

 

 

Wriase Wriase WM Aracı Kullanıcı
  • Üyelik 12.10.2023
  • Yaş/Cinsiyet 38 / E
  • Meslek Tacir
  • Konum İzmir
  • Ad Soyad S** Ü**
  • Mesajlar 13
  • Beğeniler 5 / 4
  • Ticaret 0, (%0)

Ne demek dostum rica ederim. 

Aslında dediğin doğru Türk ödeme geçitleri kılı kırk yararak sanal pos veriyorlar, bankalar iki katı detay isteyerek yapıyor bunu. Açıkcası yabancı ağ geçitlerini ekleyebilirsin stripe vs gibi. Ama hedef kitlen Türkiyedeki kullanıcılar olacaksa illaki Türkiyedeki servislere ihtiyaç duyulacaktır. 

llk etapta zaten paytr, izyzico ve shopier için entegrasyonunu yapmışsın, çok çeşit eklemeye çalışacağına bunlardaki hakimiyetini ve özellik setini biraz daha geliştir bence. Sonrada banka pos'ları için est alt yapısı kullanan bir bankayla başlarsın. Est alt yapısı ile ilgili entegrasyonu yaptıktan sonra İşbankası, Halkbank, Ziraat bankası ve teb gibi bankalar aynı alt yapıyı kullandıkları için çok basit bir ayarlamayala hepsine destek veriyor olursun.

 

 

wmaraci
wmaraci
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al