muratdemirel/pos
Composer 安装命令:
composer require muratdemirel/pos
包简介
Türk bankaları için sanal pos kütüphanesi
关键字:
README 文档
README
Bu paket ile amaçlanan; ortak bir arayüz sınıfı ile, tüm Türk banka sanal pos sistemlerinin kullanılabilmesidir.
-
EST POS (Asseco) altyapısı tam olarak test edilmiş ve kullanıma hazırdır. Akbank, TEB ve Ziraat bankası test edilmiştir.
-
Garanti Virtual POS ödeme sistemi çalışmaktadır, fakat 3D ödeme kısmının üretim ortamında test edilmesi gerekiyor.
-
YapıKredi PosNet sistemi 3D ödeme çalışmaktadır, fakat
cancel,refundişlemleri test edilmedi. -
Finansbank PayFor sanal pos sistemini desteklemektedir, Finansbank'ın IP kısıtlaması olmadığı için localhost'ta test
examplesklasöründeki örnek kodları çalıştırabilirsiniz. -
VakifBank GET 7/24 MPI ve VPOS 7/24 3D Secure ödemesi çalışır durumda, diğer işlemlerde sorunlar ortaya çıktıkça giderilecek.
-
InterPOS (Deniz bank) destegi eklenmistir, test edildikce, sorunlari bulundukca hatalar giderilecek.
-
Kuveyt POS 3d secure ödeme desteği eklenmiştir, test edildikçe, sorunları bulundukça hatalar giderilecek.
Ana başlıklar
- Özellikler
- Latest updates
- Minimum Gereksinimler
- Kurulum
- Farklı Banka Sanal Poslarını Eklemek
- Örnek Kodlar
- Troubleshoots
- Genel Kültür
- Docker ile test ortamı
Ozellikler
- Standart E-Commerce modeliyle ödeme (
AbstractGateway::MODEL_NON_SECURE) - 3D Secure modeliyle ödeme (
AbstractGateway::MODEL_3D_SECURE) - 3D Pay modeliyle ödeme (
AbstractGateway::MODEL_3D_PAY) - 3D Host modeliyle ödeme (
AbstractGateway::MODEL_3D_HOST) - Sipariş/Ödeme sorgulama (
AbstractGateway::TX_STATUS) - Sipariş/Ödeme geçmişi sorgulama (
AbstractGateway::TX_HISTORY) - Sipariş/Para iadesi yapma (
AbstractGateway::TX_REFUND) - Sipariş iptal etme (
AbstractGateway::TX_CANCEL)
Farkli Gateway'ler Tek islem akisi
- Farklı bankaya geçiş yapmak için sadece doğru
AccountFactorymethod'u kullanarak account degistirmek yeterli. - 3D, 3DPay, 3DHost ödemeler arasında geçiş yapmak için tek yapmanız gereken Account konfigurasyonunda account tipini değiştirmek (
AbstractGateway::MODEL_3D_PAYvs.). İşlem akışı aynı olduğu için kod değiştirmenize gerek kalmıyor. - 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 gönderilecek değerler de genel olarak aynı formatta olacak şekilde normalize edişmiştir.
Latest updates
Son yapılan değişiklikler için CHANGELOG.
Minimum Gereksinimler
- PHP >= 7.1.3
- ext-dom
- ext-json
- ext-openssl
- ext-SimpleXML
Kurulum
Test sunucunuz üzerinde;
$ mkdir pos-test && cd pos-test $ composer require mews/pos
Unit testler çalıştırma
Projenin root klasoründe bu satırı çalıştırmanız gerekiyor
$ ./vendor/bin/phpunit tests
Örnek ödeme kodu
config.php (Ayar dosyası)
<?php require './vendor/autoload.php'; // API kullanıcı bilgileri $account = \Mews\Pos\Factory\AccountFactory::createEstPosAccount( 'akbank', //pos config'deki ayarın index name'i 'yourClientID', 'yourKullaniciAdi', 'yourSifre', AbstractGateway::MODEL_3D_SECURE, //storetype 'yourStoreKey', AbstractGateway::LANG_TR ); // API kullanıcı hesabı ile paket bir değişkene aktarılıyor try { $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account); //değere göre API URL'leri test veya production değerler kullanılır. $pos->setTestMode(true); } catch (\Mews\Pos\Exceptions\BankNotFoundException | \Mews\Pos\Exceptions\BankClassNullException $e) { dd($e)); }
form.php (kullanıcıdan kredi kart bilgileri alındıktan sonra çalışacak kod)
<?php require 'config.php'; // Sipariş bilgileri $order = [ 'id' => 'BENZERSIZ-SIPERIS-ID', 'amount' => 1.01, 'currency' => 'TRY', //TRY|USD|EUR, optional. default: TRY 'installment' => 0, //0 ya da 1'den büyük değer, optional. default: 0 //MODEL_3D_SECURE, MODEL_3D_PAY, MODEL_3D_HOST odemeler icin zorunlu //Success ve Fail URL'ler farklı olabilir ama kütüphane success ve fail için aynı kod çalıştırır. 'success_url' => 'https://example.com/response.php', 'fail_url' => 'https://example.com/response.php', //gateway'e gore zorunlu olan degerler 'ip' => $ip, //EstPos, Garanti, KuveytPos, VakifBank 'email' => 'mail@customer.com', // EstPos, Garanti, KuveytPos, VakifBank 'name' => 'John Doe', // EstPos, Garanti 'user_id' => 'Müşteri ID', // EstPos 'rand' => md5(uniqid(time())), // EstPos, Garanti, PayFor, InterPos, VakifBank. Rastegele değer. //lang degeri verilmezse account (EstPosAccount) dili kullanılacak 'lang' => AbstractGateway::LANG_TR, //LANG_TR|LANG_EN. Kullanıcının yönlendirileceği banka gateway sayfasının ve gateway'den dönen mesajların dili. ]; $session->set('order', $order); // Kredi kartı bilgieri $card = \Mews\Pos\Factory\CreditCardFactory::create( $pos, '4444555566667777', '25', '12', '123', 'john', AbstractCreditCard::CARD_TYPE_VISA, //bankaya göre zorunlu ); // API kullanıcısı ile oluşturulan $pos değişkenine prepare metoduyla sipariş bilgileri tanımlanıyor. $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY, $card); try { // $formData icerigi form olarak banka gateway'ne yonlendirilir. // /examples/template/_redirect_form.php bakınız. $formData = $pos->get3DFormData(); } catch (\Throwable $e) { dd($e); }
response.php (gateway'den döndükten sonra çalışacak kod)
<?php require 'config.php'; $order = $session->get('order'); $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY); // Ödeme tamamlanıyor, // Ödeme modeli (3D Secure, 3D Pay, 3D Host, Non Secure) $account tarafında belirlenir. // $card değeri Non Secure modelde ve Vakıfbank için 3DPay ve 3DSecure ödemede zorunlu. $pos->payment($card); // Ödeme başarılı mı? $pos->isSuccess(); // Sonuç çıktısı dump($pos->getResponse()); //response içeriği için /examples/template/_payment_response.php dosyaya bakınız.
Farkli Banka Sanal Poslarini Eklemek
Kendi projenizin dizinindeyken
$ cp ./vendor/mews/pos/config/pos.php ./pos_ayarlar.php
ya da;
Projenizde bir ayar dosyası oluşturup (pos_ayarlar.php gibi), paket içerisinde ./config/pos.php dosyasının içeriğini buraya kopyalayın.
<?php return [ //param birimleri Gateway'ler icinde tanımlıdır, özel bir mapping istemediğiniz sürece boş bırakınız 'currencies' => [ // 'TRY' => 949, // 'USD' => 840, ], // Banka sanal pos tanımlamaları 'banks' => [ 'akbank' => [ 'name' => 'AKBANK T.A.S.', 'class' => \Mews\Pos\Gateways\EstPos::class, 'urls' => [ 'production' => 'https://www.sanalakpos.com/fim/api', 'test' => 'https://entegrasyon.asseco-see.com.tr/fim/api', 'gateway' => [ 'production' => 'https://www.sanalakpos.com/fim/est3Dgate', 'test' => 'https://entegrasyon.asseco-see.com.tr/fim/est3Dgate', ], ] ], // Yeni eklenen banka 'isbank' => [ 'name' => 'İŞ BANKASI .A.S.', 'class' => \Mews\Pos\Gateways\EstPos::class, // Altyapı sınıfı 'urls' => [ 'production' => 'xxxx', // API Url 'test' => 'xxxx', // API Test Url 'gateway' => [ 'production' => 'xxxx', // 3d Kapı Url 'test' => 'xxxx', // 3d Test Kapı Url ], ] ], ] ];
Bundan sonra nesnemizi, yeni ayarlarımıza göre oluşturup kullanmamız gerekir. Örnek:
//yeni ayar yolu ya da degeri $yeni_ayarlar = require './pos_ayarlar.php'; $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account, $yeni_ayarlar);
Ornek Kodlar
/examples 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.
Troubleshoots
Session sıfırlanması
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 IP tanımsız hatası
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.
Genel Kultur
NonSecure, 3D Secure, 3DPay ve 3DHost ödeme modeller arasındaki farklar
- 3D - 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. 3D ödeme 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, 3D ve 3DPay - Ödemede kredi kart bilgisi websiteniz tarafından alınır. 3DHost ödemede ise banka websayfasından alınır.
Otorizasyon, Ön Otorizasyon, Ön Provizyon Kapama İşlemler arasındaki farklar
- 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ığı
AbstractGateway::TX_PAY - Ö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ığı
AbstractGateway::TX_PRE_PAY - Ön Provizyon Kapama - ön provizyon sonucunda bloke edilen miktarın satışını tamamlar.
Ö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 isteri, 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ığıAbstractGateway::TX_POST_PAY - Bu 3 çeşit işlemler bütün ödeme modelleri (NonSecure, 3D, 3DPay ve 3DHost) tarafından desteklenir.
Refund ve Cancel işlemler arasındaki farklar
- Refund - Tamamlanan ödemeyi iade etmek için kullanılır.
Bu işlemi yapabilmek için ödeme yapıldıktan belli bir süre sonra (örn. 12 saat) yapılabilir.
İade işlemi için miktar zorunlu, çünkü ödenen ve iade edilen miktarı aynı olmayabilir.
İşlemin kütüphanedeki karşılığı
AbstractGateway::TX_REFUND - Cancel - Tamamlanan ödemeyi iptal etmek için kullanılır.
Belli bir süre içinde (örn. 12 saat) yapılması gerekir. Gateway'ler tarafında değişen bu süreyi geçerse
refundişlemi kullanmak zorundasınız. Genel olarak miktar bilgisi istenmez, ancak bazı Gateway'ler ister. İşlemin kütüphanedeki karşılığıAbstractGateway::TX_CANCEL
Docker ile test ortami
Makinenizde Docker kurulu olmasi gerekiyor.
Projenin root klasöründe docker-compose up komutu çalıştırmanız yeterli.
Note: localhost port 80 boş olması gerekiyor.
Sorunsuz çalışması durumda kod örneklerine http://localhost/akbank/3d/index.php şekilde erişebilirsiniz.
http://localhost/ URL projenin examples klasörünün içine bakar.
Yol Haritası
- Dökümantasyon hazırlanacak
Değerli yorum, öneri ve katkılarınızı
Sorun bulursanız veya eklenmesi gereken POS sistemi varsa lütfen issue oluşturun.
License
MIT
muratdemirel/pos 适用场景与选型建议
muratdemirel/pos 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 11 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 06 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「est」 「pos」 「posnet」 「akbank」 「sanal pos」 「est pos」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 muratdemirel/pos 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 muratdemirel/pos 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 muratdemirel/pos 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Onslip 360 PHP SDK
Türk bankaları için sanal pos kütüphanesi
Iyzico gateway for Omnipay payment processing library
Posnet (Yapı Kredi, Vakıfbank, Anadolubank sanal pos) gateway for Omnipay payment processing library
EST ve Posnet destekli sanal pos paketi. Desteklenen bankalar: Akbank, Finansbank, Halkbank, Türkiye İş Bankası, Anadolubank ve Yapı Kredi.
Payconn payment processing library for PHP
统计信息
- 总下载量: 11
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 14
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-06-28