diff --git a/.github/workflows/ci-php.yml b/.github/workflows/ci-php.yml index af77fbcf..8d181172 100644 --- a/.github/workflows/ci-php.yml +++ b/.github/workflows/ci-php.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: true matrix: - php: [7.3] + php: ['7.2', '8.0'] dependency-version: [prefer-stable] steps: - uses: actions/checkout@v1 diff --git a/.gitignore b/.gitignore index a7e4e706..2fdc2abc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ composer.lock /vendor /.idea + +/var/ diff --git a/README.md b/README.md index 36b3a3bb..e008c4aa 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ Bu paket ile amaçlanan; ortak bir arayüz sınıfı ile, tüm Türk banka sanal - Sipariş/Ödeme geçmişi sorgulama (`AbstractGateway::TX_HISTORY`) - Sipariş/Para iadesi yapma (`AbstractGateway::TX_REFUND`) - Sipariş iptal etme (`AbstractGateway::TX_CANCEL`) + - [PSR-3](https://www.php-fig.org/psr/psr-3/) logger desteği + - [PSR-18](https://www.php-fig.org/psr/psr-18/) HTTP Client desteği #### Farkli Gateway'ler Tek islem akisi * Farklı bankaya geçiş yapmak için sadece doğru `AccountFactory` method'u kullanarak account degistirmek yeterli. @@ -59,14 +61,21 @@ Son yapılan değişiklikler için [`CHANGELOG`](./docs/CHANGELOG.md). - ext-json - ext-openssl - ext-SimpleXML - + - PSR-18 HTTP Client ### Kurulum -Test sunucunuz üzerinde; ```sh -$ mkdir pos-test && cd pos-test $ composer require mews/pos ``` +Kü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: +```sh +$ composer require php-http/curl-client nyholm/psr7 mews/pos +``` +Diğer PSR-18 uygulamasını sağlayan kütühaneler: https://packagist.org/providers/psr/http-client-implementation ### Unit testler çalıştırma Projenin root klasoründe bu satırı çalıştırmanız gerekiyor @@ -82,6 +91,7 @@ $ ./vendor/bin/phpunit tests require './vendor/autoload.php'; // API kullanıcı bilgileri +// AccountFactory kullanılacak method Gateway'e göre değişir. Örnek kodlara bakınız. $account = \Mews\Pos\Factory\AccountFactory::createEstPosAccount( 'akbank', //pos config'deki ayarın index name'i 'yourClientID', @@ -258,6 +268,20 @@ Shared hosting'lerde Cpanel'de gördüğünüz IP'den farklı olarak fiziksel su 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. +### Debugging +Kütühane [PSR-3](https://www.php-fig.org/psr/psr-3/) standarta uygun logger uygulamayı destekler. +Örnekler: https://packagist.org/providers/psr/log-implementation . + +Monolog logger kullanım örnegi: +```shell +composer require monolog/monolog +``` +```php +$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, null, null, $logger); +``` + ## 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. diff --git a/composer.json b/composer.json index 658ffd56..29808cb7 100644 --- a/composer.json +++ b/composer.json @@ -12,11 +12,13 @@ ], "require": { "php": ">=7.2.5", + "ext-SimpleXML": "*", "ext-dom": "*", "ext-json": "*", "ext-openssl": "*", - "ext-SimpleXML": "*", - "guzzlehttp/guzzle": "^6.0 || ^7.0", + "php-http/discovery": "^1.14", + "psr/http-client-implementation": "*", + "psr/log": "^1.1", "symfony/http-foundation": "^5.0", "symfony/serializer": "^5.0" }, @@ -31,9 +33,12 @@ } }, "require-dev": { + "escapestudios/symfony2-coding-standard": "^3.11", + "monolog/monolog": "^2.8", + "php-http/curl-client": "^2.2", "phpunit/phpunit": "^8.3", + "slim/psr7": "^1.4", "squizlabs/php_codesniffer": "^3.5", - "escapestudios/symfony2-coding-standard": "^3.11", "symfony/var-dumper": "^5.1" }, "config": { diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 97bced8c..dec5428a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [0.9.0] - 2022-09-03 +### Changed +- Eski Gateway'e özel (orn. CreditCardEstPos) Kredi Kart sınıfları kaldırıldı. +`0.6.0` versiyonda tanıtılan `Mews\Pos\Entity\Card\CreditCard` kullanılacak. +### New Features +- `guzzlehttp/guzzle` hard coupling kaldırıldı. + Artık herhangi bir [PSR-18 HTTP Client](https://packagist.org/providers/psr/http-client-implementation) kullanılabılınır. + Bu degisiklikle beraber PSR-18 ve PSR-7 client kütüphaneleri kendiniz composer require ile yüklemeniz gerekiyor. + + Örneğin: + ```shell + composer require php-http/curl-client nyholm/psr7 mews/pos + ``` + Eğer projenizde zaten PSR-18 ve PSR-7 kütüphaneleri yüklü ise, otomatik onları bulur ve kullanır. + Kodda bir degişiklik gerektirmez. + +- Gateway sınıflara **PSR-3** logger desteği eklendi. + + Monolog logger kullanım örnegi: + ```shell + composer require monolog/monolog + ``` + ```php + $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, null, null, $logger); + ``` + ## [0.7.0] - 2022-05-18 ### Changed - `\Mews\Pos\PosInterface::prepare()` method artık sipariş verilerini (_currency, id, amount, installment, transaction type_) değiştirmez/formatlamaz. diff --git a/examples/_main_config.php b/examples/_main_config.php index 1d188e18..1f4b8486 100644 --- a/examples/_main_config.php +++ b/examples/_main_config.php @@ -21,7 +21,16 @@ function getGateway(\Mews\Pos\Entity\Account\AbstractPosAccount $account): ?\Mews\Pos\PosInterface { try { - $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account); + $handler = new \Monolog\Handler\StreamHandler(__DIR__.'/../var/log/pos.log', \Psr\Log\LogLevel::DEBUG); + $logger = new \Monolog\Logger('pos', [$handler]); + +/* $client = new HttpClient( + new \Http\Client\Curl\Client(), + new \Slim\Psr7\Factory\RequestFactory(), + new \Slim\Psr7\Factory\StreamFactory() + );*/ + + $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account, null, null, $logger); $pos->setTestMode(true); return $pos; diff --git a/examples/template/_header.php b/examples/template/_header.php index 31c50f17..88cf1be5 100644 --- a/examples/template/_header.php +++ b/examples/template/_header.php @@ -26,11 +26,11 @@