mews/pos 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

mews/pos

Composer 安装命令:

composer require mews/pos

包简介

Türk bankaları için sanal pos kütüphanesi

README 文档

README

Version Monthly Downloads License PHP Version Require

Bu paket ile amaçlanan; ortak bir arayüz sınıfı ile, tüm Türk banka sanal pos sistemlerinin kullanılabilmesidir.

Desteklenen Payment Gateway'ler / Bankalar:

Gateway Desktekleyen
bankalar
Desteklenen
Ödeme Tipleri
Desteklenen Sorgular
Tosla
(eski AKÖde)
? NonSecure
3DPay
3DHost
İptal
İade
Durum sorgulama
Sipariş Tarihçesini sorgulama
Özel Sorgu
Taksit Oranları
Taksit Fiyatları
ParamPos ? NonSecure
3DSecure
3DPay
(test edilmesi gerekiyor)
İptal
İade
Durum sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
Taksit Oranları
BIN Sorgulama
IyzicoPos Iyzico NonSecure
3DSecure
3DHost
İptal
İade (v2 API)
Durum sorgulama
Sipariş Tarihçesini sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
Taksit Fiyatları
BIN Sorgulama
PayTrPos PayTr NonSecure
3DPay(Direkt API)
3DHost(iFrame API)
İade
Durum sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
Taksit Oranları
BIN Sorgulama
Param3DHostPos ? 3DHost
(test edilmesi gerekiyor)
AkbankPos
(Akbank'ın yeni altyapısı)
Akbank NonSecure
3DSecure
3DPay
3DHost
Tekrarlanan Ödeme
İptal
İade
Sipariş Tarihçesini sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
AssecoPos
(Asseco/Payten)
eski EstV3Pos
Akbank
TEB
İşbank
Şekerbank
Halkbank
Finansbank
Ziraat
NonSecure
3DSecure
3DPay
3DHost
3DPayHost
Tekrarlanan Ödeme
İptal
İade
Durum sorgulama
Sipariş Tarihçesini sorgulama
Özel Sorgu
PayFlex MPI VPOS V4 Ziraat
Vakıfbank VPOS 7/24
İşbank
NonSecure
3DSecure
Tekrarlanan Ödeme
İptal
İade
Durum sorgulama
Özel Sorgu
PayFlex
Common Payment V4
(Ortak Ödeme)
Ziraat
Vakıfbank
İşbank
3DPay
3DHost
Özel Sorgu
Garanti Virtual POS Garanti NonSecure
3DSecure
3DPay
3DHost
Tekrarlanan Ödeme
İptal
İade
Durum sorgulama
Sipariş Tarihçesini sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
BIN Sorgulama
PosNet YapıKredi NonSecure
3DSecure
İptal
İade
Durum sorgulama
Özel Sorgu
PosNetV1
(JSON API)
Albaraka Türk NonSecure
3DSecure
İptal
İade
Durum sorgulama
Özel Sorgu
PayFor Finansbank
Enpara
Ziraat Katılım
NonSecure
3DSecure
3DPay
3DHost
İptal
İade
Durum sorgulama
Sipariş Tarihçesini sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu
InterPOS Deniz bank NonSecure
3DSecure
3DPay
3DHost
İptal
İade
Durum sorgulama
Özel Sorgu
Kuveyt POS
TDV2.0.0
Kuveyt Türk NonSecure
3DSecure
Kuveyt POS
TDV2.0.0
SOAP API
Kuveyt Türk İptal
İade
Durum sorgulama
Özel Sorgu
VakifKatilimPos Vakıf Katılım NonSecure (test edilmesi gerekiyor)
3DSecure
3DHost (test edilmesi gerekiyor)
İptal
İade
Durum sorgulama
Sipariş Tarihçesini sorgulama
Geçmiş İşlemleri sorgulama
Özel Sorgu

Ana başlıklar

Özellikler

  • 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 (PosInterface::TX_TYPE_ORDER_HISTORY)
  • Sipariş/Para iadesi yapma (PosInterface::TX_TYPE_REFUND ve PosInterface::TX_TYPE_PARTIAL_REFUND)
  • Sipariş iptal etme (PosInterface::TX_TYPE_CANCEL)
  • Geçmiş işlemleri sorgulama (PosQueryInterface::TX_TYPE_HISTORY)
  • Özel Sorgular (PosQueryInterface::TX_TYPE_CUSTOM_QUERY)
  • Taksit oranları sorgulama (PosQueryInterface::TX_TYPE_INSTALLMENT_RATES)
  • Taksit fiyatları hesaplama (PosQueryInterface::TX_TYPE_INSTALLMENT_PRICES)
  • BIN sorgulama (PosQueryInterface::QUERY_TYPE_BIN_LIST)
  • API istek verilerinin Listener'lerle 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

Farklı Gateway'ler Tek İşlem Akışı

  • 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.

Minimum Gereksinimler

  • PHP >= 8.0
  • ext-dom
  • ext-json
  • ext-openssl
  • ext-libxml
  • ext-zlib
  • ext-SimpleXML
  • PSR-18: HTTP Client
  • PSR-14: Event Dispatcher

Kurulum

Frameworks

Basic kurulum

$ composer require symfony/event-dispatcher mews/pos

Kütüphane belli bir HTTP Client'ile zorunlu bağımlılığı yoktur. PSR-18 HTTP Client standardına uyan herhangi bir kütüphane kullanılabilir. 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/pos

Diğer PSR-18 uygulamasını sağlayan kütüphaneler: https://packagist.org/providers/psr/http-client-implementation

Sonra kendi projenizin dizinindeyken alttaki komutu çalıştırarak ayarlar dosyasını projenize kopyalayınız.

$ cp ./vendor/mews/pos/config/pos_production.php ./pos_prod_ayarlar.php

Test ortamda geliştirecekseniz test ayarları da kopyalayınız:

$ cp ./vendor/mews/pos/config/pos_test.php ./pos_test_ayarlar.php

Kopyaladıktan sonra ayarlardaki kullanmayacağınız banka ayarları silebilirsiniz.

Bundan sonra Pos nesnemizi, yeni ayarlarımıza göre oluşturup kullanmamız gerekir. Örnek:

// 1. Banka hesabı oluşturunuz (her banka için farklı bir factory metodu vardır)
$account = \Mews\Pos\Factory\AccountFactory::createAkbankPosAccount(
    'akbank-pos',
    'MERCHANT_SAFE_ID',
    'TERMINAL_SAFE_ID',
    'SECRET_KEY'
);

// 2. Event dispatcher oluşturunuz (symfony/event-dispatcher önerilir)
// Elinizde farklı PSR-14 uygumlu EventDispatcher var ise kullanabilirsiniz.
$eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher();

// 3. Ayarları yükleyip ilgili bankanın dilimini alınız
$yeniAyarlar = require __DIR__ . '/pos_prod_ayarlar.php';
// veya test ortamı için $yeniAyarlar = require __DIR__ . '/pos_test_ayarlar.php';
$bankAyarlari = $yeniAyarlar['banks'][$account->getBankName()];

// 4. Gateway nesnesini oluşturunuz
$pos = \Mews\Pos\Factory\PosFactory::create($account, $bankAyarlari, $eventDispatcher);

Kütüphanede yer alan pos_production.php ve pos_test.php ayar dosyaları projenizde direk kullanmayınız! Yukarda belirtildiği gibi kopyalayarak kullanmanız tavsiye edilir.

Farklı Banka Sanal Poslarını Eklemek

Projenize kopyaladığınız ./pos_prod_ayarlar.php dosyasına farklı banka ayarı eklemek için alttaki örneği kullanabilirsiniz.

<?php

return [
    // Banka sanal pos tanımlamaları
    'banks'         => [
        'akbank'    => [
            // AKBANK T.A.S.
            'class' => \Mews\Pos\Gateway\AssecoPos::class,
            'lang'  => \Mews\Pos\PosInterface::LANG_TR, // optional
            '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'    => [ // unique bir isim vermeniz gerekir.
            // İŞ BANKASI .A.S.
            'class' => \Mews\Pos\Gateway\AssecoPos::class, // Altyapı sınıfı
            'lang'  => \Mews\Pos\PosInterface::LANG_TR, // optional
            'gateway_endpoints'  => [
                'payment_api'     => 'https://sanalpos.isbank.com.tr/fim/api',
                'gateway_3d'      => 'https://sanalpos.isbank.com.tr/fim/est3Dgate',
            ],
        ],
    ]
];

Örnek Kodlar

Örnekleri /docs ve /examples dizini içerisinde bulabilirsiniz.

/examples kodları çalıştırmak için alttaki bölüme bakınız.

Popup Window'da veya iframe içinde ödeme yapma

Müşteriyi banka sayfasına redirect etmeden iframe üzerinden veya popup window üzerinden ödeme akışı examples'da ve /docs'da 3D ödeme ile örnek PHP ve JS kodlar yer almaktadır.

Troubleshoots

Session sıfırlanması

Cookie session kullandığınızda, kullanıcı gatewayden geri websitenize yönlendirildiğ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 adresi cPanel'de gözükmez, hosting firmanızdan sorup öğrenmeniz gerekmekte. Bu hatayı alırsanız hosting firmanın verdiği IP adresine de banka gateway'i tarafından izin verilmesini sağlayın.

Debugging

Kütüphane PSR-3 standarta uygun logger uygulamayı destekler. Örnekler: https://packagist.org/providers/psr/log-implementation .

Monolog logger kullanım örneği:

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::create(
    $account,
    $config['banks'][$account->getBankName()],
    $eventDispatcher,
    null,
    null,
    $logger
);

Genel Kültür

Ödeme modelleri hakkında bilgi edinmek istiyorsanız bu makaleyi inceleyebilirsiniz.

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ığı 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önderilebilir. Bu işlem için kullanıcıdan kredi kart bilgisi alınmaz. Onun yerine bazı gateway'ler orderId değeri istenir, bazıları ise ön provizyon sonucu dönen banka tarafındaki orderId'yi ister. Satıcı ön otorizasyon isteği iptal etmek isterse de cancel isteğ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_AUTH vs TX_TYPE_PAY_PRE_AUTH işlemler genelde bütün ödeme modelleri (NonSecure, 3DSecure, 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ş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 refund iş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

Docker ile Örnek Kodların Denenmesi

  1. Makinenizde Docker kurulu olması gerekir.
  2. Örnekleri çalıştırmadan önce banka hesap bilgilerini ortam değişkenleri aracılığıyla sağlamanız gerekmektedir: examples/.env.dist dosyasını examples/.env olarak kopyalayın:
    cp examples/.env.dist examples/.env
  3. examples/.env dosyasını açıp kullanmak istediğiniz banka(lar)a ait hesap bilgilerini (merchant ID, şifre, API anahtarı vb.) doldurun.
  4. Projenin root klasöründe docker-compose up -d komutu çalıştırınız.
  5. docker container'de composer install çalıştırınız.
    docker compose exec -it web composer install

Note: localhost port 80 boş olması gerekiyor. Sorunsuz çalışması durumda kod örneklerine http://localhost/asseco/3d/index.php şekilde erişebilirsiniz. http://localhost/ URL projenin examples klasörünün içine bakar.

Unit testler çalıştırma

Projenin root klasöründe bu satırı çalıştırmanız gerekiyor

$ docker compose exec -it web composer test

Değerli yorum, öneri ve katkılarınız için teşekkür ederiz.

Sorun bulursanız veya eklenmesi gereken POS sistemi varsa lütfen issue oluşturun.

License

MIT

mews/pos 适用场景与选型建议

mews/pos 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 18.84k 次下载、GitHub Stars 达 334, 最近一次更新时间为 2018 年 08 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「est」 「pos」 「posnet」 「akbank」 「sanal pos」 「est pos」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 mews/pos 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 mews/pos 我们能提供哪些服务?
定制开发 / 二次开发

基于 mews/pos 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 18.84k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 335
  • 点击次数: 23
  • 依赖项目数: 4
  • 推荐数: 0

GitHub 信息

  • Stars: 334
  • Watchers: 22
  • Forks: 104
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-08-06