Bu paket ile amaçlanan; ortak bir arayüz sınıfı ile, tüm Türk banka sanal pos sistemlerinin kullanılabilmesidir.
| Gateway | Desktekleyen bankalar |
Desteklenen Ödeme Tipleri |
Desteklenen Sorgular |
|---|---|---|---|
| Tosla (AKÖde) | ? | NonSecure 3DPay 3DHost |
İptal İade Durum sorgulama Sipariş Tarihçesini sorgulama |
| EST POS (Asseco/Payten) deprecated |
Akbank TEB İşbank Şekerbank Halkbank Finansbank Ziraat |
NonSecure 3DSecure 3DPay 3DHost 3DPayHost Tekrarlanan Ödeme |
İptal İade Durum sorgulama Sipariş Tarihçesini sorgulama |
| EST V3 POS EstPos altyapının daha güvenli (sha512) hash algoritmasıyla uygulaması. |
-----"----- | -----"----- | -----"----- |
| PayFlex MPI VPOS V4 | Ziraat Vakıfbank İşbank |
NonSecure 3DSecure Tekrarlanan Ödeme |
İptal İade Durum sorgulama |
| PayFlex Common Payment V4 (Ortak Ödeme) |
Ziraat Vakıfbank İşbank |
NonSecure 3DPay 3DHost |
İptal İade |
| Garanti Virtual POS | Garanti | NonSecure 3DSecure 3DPay 3DHost Tekrarlanan Ödeme |
İptal İade Durum sorgulama Sipariş Tarihçesini sorgulama |
| PosNet | YapıKredi | NonSecure 3DSecure |
İptal İade Durum sorgulama |
| PosNetV1 (JSON API) |
Albaraka Türk | NonSecure 3DSecure |
İptal İade Durum sorgulama |
| PayFor | Finansbank Enpara |
NonSecure 3DSecure 3DPay 3DHost |
İptal İade Durum sorgulama Sipariş Tarihçesini sorgulama Geçmiş İşlemleri sorgulama |
| InterPOS | Deniz bank | NonSecure 3DSecure 3DPay 3DHost |
İptal İade Durum sorgulama |
| Kuveyt POS | Kuveyt Türk | 3DSecure | İptal İade Durum sorgulama (SOAP API) |
- Non Secure E-Commerce modeliyle ödeme (
PosInterface::MODEL_NON_SECURE) - 3D Secure modeliyle ödeme (
PosInterface::MODEL_3D_SECURE) - 3D Pay modeliyle ödeme (
PosInterface::MODEL_3D_PAY) - 3D Host modeliyle ödeme (
PosInterface::MODEL_3D_HOST) - Sipariş/Ödeme durum sorgulama (
PosInterface::TX_TYPE_STATUS) - Sipariş Tarihçesini sorgulama sorgulama (
PosInterface::TX_TYPE_ORDER_HISTORY) - Geçmiş işlemleri sorgulama (
PosInterface::TX_TYPE_HISTORY) - Sipariş/Para iadesi yapma (
PosInterface::TX_TYPE_REFUND) - Sipariş iptal etme (
PosInterface::TX_TYPE_CANCEL) - API istek verilerinin gateway API'na gönderilmeden önce değiştirebilme
- Farklı Para birimler ile ödeme desteği
- Tekrarlanan (Recurring) ödeme talimatları
- PSR-3 logger desteği
- PSR-18 HTTP Client desteği
- Bir (3DSecure, 3DPay, 3DHost, NonSecure) ödeme modelden diğerine geçiş çok az değişiklik gerektirir.
- Aynı tip işlem için farklı POS Gateway'lerden dönen değerler aynı formata normalize edilmiş durumda. Yani kod güncellemenize gerek yok.
- Aynı tip işlem için farklı Gateway'lere gönderilecek değerler de genel olarak aynı formatta olacak şekilde normalize edilmiştir.
Son yapılan değişiklikler için CHANGELOG.
- PHP >= 7.4
- ext-dom
- ext-json
- ext-openssl
- ext-SimpleXML
- ext-soap (sadece KuveytPos için)
- PSR-18: HTTP Client
- PSR-14: Event Dispatcher
$ composer require symfony/event-dispatcher mews/posKütüphane belli bir HTTP Client'ile zorunlu bağımlılığı yoktur. PSR-18 HTTP Client standarta uyan herhangi bir kütüphane kullanılabilinir. Projenizde zaten kurulu PSR-18 uygulaması varsa otomatik onu kullanır.
Veya hızlı başlangıç için:
$ composer require php-http/curl-client nyholm/psr7 symfony/event-dispatcher mews/posDiğer PSR-18 uygulamasını sağlayan kütüphaneler: https://packagist.org/providers/psr/http-client-implementation
Kendi projenizin dizinindeyken
$ cp ./vendor/mews/pos/config/pos_production.php ./pos_ayarlar.phpya da;
Projenizde bir ayar dosyası oluşturup (pos_ayarlar.php gibi),
paket içerisinde ./config/pos_production.php dosyasının içeriğini buraya kopyalayın.
<?php
return [
// Banka sanal pos tanımlamaları
'banks' => [
'akbank' => [
'name' => 'AKBANK T.A.S.',
'class' => Mews\Pos\Gateways\EstV3Pos::class,
'gateway_endpoints' => [
'payment_api' => 'https://www.sanalakpos.com/fim/api',
'gateway_3d' => 'https://www.sanalakpos.com/fim/est3Dgate',
'gateway_3d_host' => 'https://sanalpos.sanalakpos.com.tr/fim/est3Dgate',
],
],
// Yeni eklenen banka
'isbank' => [
'name' => 'İŞ BANKASI .A.S.',
'class' => \Mews\Pos\Gateways\EstV3Pos::class, // Altyapı sınıfı
'gateway_endpoints' => [
'payment_api' => 'https://sanalpos.isbank.com.tr/fim/api',
'gateway_3d' => 'https://sanalpos.isbank.com.tr/fim/est3Dgate',
],
],
]
];Bundan sonra nesnemizi, yeni ayarlarımıza göre oluşturup kullanmamız gerekir. Örnek:
//yeni ayar yolu ya da degeri
$yeniAyarlar = require __DIR__ . '/pos_ayarlar.php';
$pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account, $yeniAyarlar, $eventDispatcher);/examples ve /docs dizini içerisinde.
3D ödeme örnek kodlar genel olarak kart bilgilerini website sunucusuna POST eder (index.php => form.php),
ondan sonra da işlenip gateway'e yönlendiriliyor.
Bu şekilde farklı bankalar arası implementation degişmemesi sağlanmakta (ortak kredi kart formu ve aynı işlem akışı).
Genel olarak kart bilgilerini, website sunucusuna POST yapmadan,
direk gateway'e yönlendirecek şekilde kullanılabilinir (genelde, banka örnek kodları bu şekilde implement edilmiş).
Fakat,
- birden fazla bank seçenegi olunca veya müşteri banka degiştirmek istediginde kart bilgi formunu ona göre güncellemeniz gerekecek.
- üstelik YKB POSNet ve VakıfBank POS kart bilgilerini website sunucusu tarafından POST edilmesini gerektiriyor.
Müşteriyi banka sayfasına redirect etmeden iframe üzerinden veya popup window
üzerinden ödeme akışı
/examples/ içinde 3D ödeme ile örnek PHP ve JS kodlar yer almaktadır.
Ayrıca Modal Box ile iframe kullarak ödeme örneği /docs'ta bulabilirsiniz.
- Popup window taraycı tarafından engellenebilir bu yüzden onun yerine modal box içinde iframe kullanılması tavsiye edilir.
Cookie session kullanığınızda, kullanıcı gatewayden geri websitenize yönlendirilidiğinde session sıfırlanabilir.
Response'da samesite değeri set etmeniz gerekiyor. çözüm.
-
Shared hosting'lerde Cpanel'de gördüğünüz IP'den farklı olarak fiziksel sunucun bir tane daha IP'si olur. O IP adres Cpanel'de gözükmez, hosting firmanızdan sorup öğrenmeniz gerekmekte. Bu hatayı alırsanız hosting firmanın verdiği IP adrese'de banka gateway'i tarafından izin verilmesini sağlayın.
-
kütüphane ortam degerini de kontrol etmeyi unutmayınız, ortama göre bankanın URL'leri degişir.
- test ortamı için
$pos->setTestMode(true); - canlı ortamı için
$pos->setTestMode(false);(default olarakfalse)
ortam değeri hem bankaya istek gönderirken hem de gelen isteği işlerken doğru deger olması gerekiyor.
- test ortamı için
Kütüphane PSR-3 standarta uygun logger uygulamayı destekler. Örnekler: https://packagist.org/providers/psr/log-implementation .
Monolog logger kullanım örnegi:
composer require monolog/monolog$handler = new \Monolog\Handler\StreamHandler(__DIR__.'/../var/log/pos.log', \Psr\Log\LogLevel::DEBUG);
$logger = new \Monolog\Logger('pos', [$handler]);
$pos = \Mews\Pos\Factory\PosFactory::createPosGateway(
$account,
$config,
$eventDispatcher,
null,
$logger
);- 3DSecure - Bankaya göre farklı isimler verilebilir, örn. 3D Full. Gateway'den (3D şifre girdiginiz sayfadan) döndükten sonra ödemeyi tamamlamak için banka gateway'ne 1 istek daha (provizyon isteği) gönderir. Bu isteği göndermeden ödeme tamamlanmaz.
- 3DPay - Bankaya göre farklı isimler verilebilir, örn. 3D Half. Gateway'den (3D şifre girdiginiz sayfadan) döndükten sonra ödeme bitmiş sayılır. 3DSecure ödemede yapıldığı gibi ekstra provizyon istek gönderilmez.
- 3DHost - Kredi kart girişi için kullanıcı bankanın sayfasına yönledirilir, kredi kart bilgileri girdikten sonra bankanın 3D gateway sayfasına yönlendirilir, ordan da websitenize geri yönlendirilir. Yönlendirme sonucunda ödeme tamanlanmış olur.
- NonSecure - Ödeme işlemi kullanıcı 3D onay işlemi yapmadan gerçekleşir.
- NonSecure, 3DSecure ve 3DPay - Ödemede kredi kart bilgisi websiteniz tarafından alınır. 3DHost ödemede ise banka websayfasından alınır.
- Otorizasyon - bildiğimiz ve genel olarak kullandığımız işlem. Tek seferde ödeme işlemi biter.
Bu işlem için kullanıcıdan hep kredi kart bilgisini alınır.
İşlemin kütüphanedeki karşılığı
PosInterface::TX_TYPE_PAY_AUTH - Ön Otorizasyon - müşteriden parayı direk çekmek yerine, işlem sonucunda para bloke edilir.
Bu işlem için kullanıcıdan hep kredi kart bilgisini alınır.
İşlemin kütüphanedeki karşılığı
PosInterface::TX_TYPE_PAY_PRE_AUTH - Ön Provizyon Kapama - ön provizyon sonucunda bloke edilen miktarın çekimini gerçekleştirir.
Ön otorizasyon yapıldıktan sonra, örneğin 1 hafta sonra, Post Otorizasyon isteği gönderilebilinir.
Bu işlem için kullanıcıdan kredi kart bilgisi alınmaz.
Onun yerine bazı gateway'ler
orderIddegeri istenir, bazıları ise ön provizyon sonucu dönen banka tarafındakiorderId'yi ister. Satıcı ön otorizasyon isteği iptal etmek isterse decancelisteği gönderir. Post Otorizasyon İşlemin kütüphanedeki karşılığıPosInterface::TX_TYPE_PAY_POST_AUTH. Bu işlem sadece NonSecure ödeme modeliyle gerçekleşir. TX_TYPE_PAY_AUTHvsTX_TYPE_PAY_PRE_AUTHişlemler genelde bütün ödeme modelleri (NonSecure, 3DSecure, 3DPay ve 3DHost) tarafından desteklenir.
- Refund - Tamamlanan ödemeyi iade etmek için kullanılır.
Bu işlem bazı gatewaylerde sadece gün kapandıktan sonra yapılabilir.
İade işlemi için miktar zorunlu, çünkü ödenen ve iade edilen miktarı aynı olmayabilir.
İşlemin kütüphanedeki karşılığı
PosInterface::TX_TYPE_REFUND - Cancel - Tamamlanan ödemeyi iptal etmek için kullanılır.
Ödeme yapıldıktan sonra gün kapanmadan yapılabilir. Gün kapandıktan sonra
refundişlemi kullanmak zorundasınız. Genel olarak miktar bilgisi istenmez, ancak bazı Gateway'ler ister. İşlemin kütüphanedeki karşılığıPosInterface::TX_TYPE_CANCEL
- Makinenizde Docker kurulu olması gerekir.
- Projenin root klasöründe
docker-compose up -dkomutu çalıştırınız. -
$ composer require mews/pos
Note: localhost port 80 boş olması gerekiyor.
Sorunsuz çalışması durumda kod örneklerine http://localhost/estpos/3d/index.php şekilde erişebilirsiniz.
http://localhost/ URL projenin examples klasörünün içine bakar.
Projenin root klasoründe bu satırı çalıştırmanız gerekiyor
$ ./vendor/bin/phpunitDeğerli yorum, öneri ve katkılarınızı
Sorun bulursanız veya eklenmesi gereken POS sistemi varsa lütfen issue oluşturun.
MIT