diff --git a/README-EN.md b/README-EN.md index 087a22b..1ca119e 100644 --- a/README-EN.md +++ b/README-EN.md @@ -22,6 +22,8 @@ Supports laravel **v7.0+** and requires php **v7.4+** - [Pasargad Bank (Pep)](https://pep.co.ir) - [Eghtesad Novin Bank (Pardakht Novin)](https://pna.co.ir) - [Zarinpal](https://zarinpal.com) +- [IDPay](https://idpay.ir) +- [Pay.ir](https://pay.ir) - [Zibal](https://zibal.ir) ## Installation & Configuration diff --git a/README.md b/README.md index 9c2c6e5..e1acae7 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,10 @@ - [بانک ملت (به پرداخت)](https://behpardakht.com) - [بانک سامان (سپ)](https://sep.ir) - [بانک پاسارگاد (پپ)](https://pep.co.ir) -- [بانک اقتصاد نوین (پرداخت نوین آرین)](https://pna.co.ir/) +- [بانک اقتصاد نوین (پرداخت نوین آرین)](https://pna.co.ir) - [زرین پال](https://zarinpal.com) +- [آیدی پی](https://idpay.ir) +- [شبکه پرداخت پی](https://pay.ir) - [زیبال](https://zibal.ir) ## نصب diff --git a/composer.json b/composer.json index e5ba644..443c920 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,9 @@ "pasargad", "eghtesad novin", "zarinpal", - "zibal" + "zibal", + "idpay", + "payir" ], "authors": [ { @@ -30,6 +32,8 @@ "require": { "php": "^7.4|^8.0", "ext-json": "*", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", + "illuminate/http": "^7.0|^8.0", "illuminate/support": "^7.0|^8.0", "ramsey/uuid": "^4.0" }, diff --git a/composer.lock b/composer.lock index 4502346..da0e73b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c00fae7c1dc02cb9488409e5fe20f380", + "content-hash": "c164fd17f6c0d1f0807740732738a08f", "packages": [ { "name": "brick/math", @@ -447,16 +447,16 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.2", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "84afea85c6841deeea872f36249a206e878a5de0" + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/84afea85c6841deeea872f36249a206e878a5de0", - "reference": "84afea85c6841deeea872f36249a206e878a5de0", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/296c015dc30ec4322168c5ad3ee5cc11dae827ac", + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac", "shasum": "" }, "require": { @@ -492,7 +492,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.3" }, "funding": [ { @@ -504,20 +504,343 @@ "type": "tidelift" } ], - "time": "2021-08-28T21:34:50+00:00" + "time": "2021-10-17T19:48:54+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2021-10-18T09:52:00+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-07T13:05:22+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2021-10-06T17:43:30+00:00" }, { "name": "laravel/framework", - "version": "v8.61.0", + "version": "v8.65.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "3d528d3d3c8ecb444b50a266c212a52973a6669b" + "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/3d528d3d3c8ecb444b50a266c212a52973a6669b", - "reference": "3d528d3d3c8ecb444b50a266c212a52973a6669b", + "url": "https://api.github.com/repos/laravel/framework/zipball/6db59afadca28dfdb2f719e7d79f93885ede17e4", + "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4", "shasum": "" }, "require": { @@ -527,15 +850,17 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3|^2.0", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", "league/flysystem": "^1.1", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.31", "opis/closure": "^3.6", "php": "^7.3|^8.0", "psr/container": "^1.0", + "psr/log": "^1.0 || ^2.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.0", + "ramsey/uuid": "^4.2.2", "swiftmailer/swiftmailer": "^6.0", "symfony/console": "^5.1.4", "symfony/error-handler": "^5.1.4", @@ -592,21 +917,21 @@ }, "require-dev": { "aws/aws-sdk-php": "^3.189.0", - "doctrine/dbal": "^2.6|^3.0", + "doctrine/dbal": "^2.13.3|^3.1.2", "filp/whoops": "^2.8", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.2", + "mockery/mockery": "^1.4.4", "orchestra/testbench-core": "^6.23", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.8|^9.3.3", + "phpunit/phpunit": "^8.5.19|^9.5.8", "predis/predis": "^1.1.2", "symfony/cache": "^5.1.4" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.189.0).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.2).", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -620,10 +945,10 @@ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.2).", + "mockery/mockery": "Required to use mocking (^1.4.4).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", "predis/predis": "Required to use the predis connector (^1.1.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).", @@ -673,7 +998,66 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-09-14T13:31:32+00:00" + "time": "2021-10-19T13:59:41+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.18", + "phpstan/phpstan": "^0.12.98", + "symfony/var-dumper": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2021-10-07T14:00:57+00:00" }, { "name": "league/commonmark", @@ -1020,16 +1404,16 @@ }, { "name": "monolog/monolog", - "version": "2.3.4", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "437e7a1c50044b92773b361af77620efb76fff59" + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/437e7a1c50044b92773b361af77620efb76fff59", - "reference": "437e7a1c50044b92773b361af77620efb76fff59", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", "shasum": "" }, "require": { @@ -1045,7 +1429,7 @@ "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", + "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", "phpstan/phpstan": "^0.12.91", @@ -1103,7 +1487,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.4" + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" }, "funding": [ { @@ -1115,7 +1499,7 @@ "type": "tidelift" } ], - "time": "2021-09-15T11:27:21+00:00" + "time": "2021-10-01T21:08:31+00:00" }, { "name": "nesbot/carbon", @@ -1213,21 +1597,21 @@ }, { "name": "nette/schema", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d" + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", - "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", "shasum": "" }, "require": { - "nette/utils": "^3.1.4 || ^4.0", - "php": ">=7.1 <8.1" + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", @@ -1269,9 +1653,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.1" + "source": "https://github.com/nette/schema/tree/v1.2.2" }, - "time": "2021-03-04T17:51:11+00:00" + "time": "2021-10-15T11:40:02+00:00" }, { "name": "nette/utils", @@ -1590,6 +1974,166 @@ }, "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "2.0.0", @@ -1674,35 +2218,79 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], + "description": "A polyfill for getallheaders.", "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "ramsey/collection", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa" + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/eaca1dc1054ddd10cbd83c1461907bee6fb528fa", - "reference": "eaca1dc1054ddd10cbd83c1461907bee6fb528fa", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { @@ -1756,7 +2344,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.1" + "source": "https://github.com/ramsey/collection/tree/1.2.2" }, "funding": [ { @@ -1768,7 +2356,7 @@ "type": "tidelift" } ], - "time": "2021-08-06T03:41:06+00:00" + "time": "2021-10-10T03:01:02+00:00" }, { "name": "ramsey/uuid", @@ -1870,16 +2458,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { @@ -1891,7 +2479,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.4" }, "suggest": { "ext-intl": "Needed to support internationalized email addresses" @@ -1929,7 +2517,7 @@ ], "support": { "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" }, "funding": [ { @@ -1941,7 +2529,7 @@ "type": "tidelift" } ], - "time": "2021-03-09T12:30:35+00:00" + "time": "2021-10-18T15:26:12+00:00" }, { "name": "symfony/console", @@ -2622,16 +3210,16 @@ }, { "name": "symfony/http-kernel", - "version": "v5.3.7", + "version": "v5.3.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a3a78e37935a527b50376c22ac1cec35b57fe787" + "reference": "ceaf46a992f60e90645e7279825a830f733a17c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a3a78e37935a527b50376c22ac1cec35b57fe787", - "reference": "a3a78e37935a527b50376c22ac1cec35b57fe787", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ceaf46a992f60e90645e7279825a830f733a17c5", + "reference": "ceaf46a992f60e90645e7279825a830f733a17c5", "shasum": "" }, "require": { @@ -2714,7 +3302,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.3.7" + "source": "https://github.com/symfony/http-kernel/tree/v5.3.9" }, "funding": [ { @@ -2730,20 +3318,20 @@ "type": "tidelift" } ], - "time": "2021-08-30T12:37:19+00:00" + "time": "2021-09-28T10:25:11+00:00" }, { "name": "symfony/mime", - "version": "v5.3.7", + "version": "v5.3.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ae887cb3b044658676129f5e97aeb7e9eb69c2d8" + "reference": "a756033d0a7e53db389618653ae991eba5a19a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ae887cb3b044658676129f5e97aeb7e9eb69c2d8", - "reference": "ae887cb3b044658676129f5e97aeb7e9eb69c2d8", + "url": "https://api.github.com/repos/symfony/mime/zipball/a756033d0a7e53db389618653ae991eba5a19a11", + "reference": "a756033d0a7e53db389618653ae991eba5a19a11", "shasum": "" }, "require": { @@ -2797,7 +3385,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.7" + "source": "https://github.com/symfony/mime/tree/v5.3.8" }, "funding": [ { @@ -2813,7 +3401,7 @@ "type": "tidelift" } ], - "time": "2021-08-20T11:40:01+00:00" + "time": "2021-09-10T12:30:38+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3939,16 +4527,16 @@ }, { "name": "symfony/translation", - "version": "v5.3.7", + "version": "v5.3.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6" + "reference": "6e69f3551c1a3356cf6ea8d019bf039a0f8b6886" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6", - "reference": "4d595a6d15fd3a2c67f6f31d14d15d3b7356d7a6", + "url": "https://api.github.com/repos/symfony/translation/zipball/6e69f3551c1a3356cf6ea8d019bf039a0f8b6886", + "reference": "6e69f3551c1a3356cf6ea8d019bf039a0f8b6886", "shasum": "" }, "require": { @@ -4014,7 +4602,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.7" + "source": "https://github.com/symfony/translation/tree/v5.3.9" }, "funding": [ { @@ -4112,16 +4700,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.7", + "version": "v5.3.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f" + "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f", - "reference": "3ad5af4aed07d0a0201bbcfc42658fe6c5b2fb8f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eaaea4098be1c90c8285543e1356a09c8aa5c8da", + "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da", "shasum": "" }, "require": { @@ -4180,7 +4768,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.7" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.8" }, "funding": [ { @@ -4196,7 +4784,7 @@ "type": "tidelift" } ], - "time": "2021-08-04T23:19:25+00:00" + "time": "2021-09-24T15:59:58+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -4253,31 +4841,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.3.0", + "version": "v5.3.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + "reference": "accaddf133651d4b5cf81a119f25296736ffc850" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/accaddf133651d4b5cf81a119f25296736ffc850", + "reference": "accaddf133651d4b5cf81a119f25296736ffc850", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", + "graham-campbell/result-type": "^1.0.2", "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -4300,13 +4888,11 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" + "email": "hello@gjcampbell.co.uk" }, { "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" + "email": "vance@vancelucas.com" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4317,7 +4903,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.1" }, "funding": [ { @@ -4329,7 +4915,7 @@ "type": "tidelift" } ], - "time": "2021-01-20T15:23:13+00:00" + "time": "2021-10-02T19:24:42+00:00" }, { "name": "voku/portable-ascii", @@ -4599,86 +5185,6 @@ }, "time": "2021-09-06T14:53:37+00:00" }, - { - "name": "guzzlehttp/psr7", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", - "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.0.0" - }, - "time": "2021-06-30T20:03:07+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", @@ -5237,16 +5743,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -5257,7 +5763,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -5287,22 +5794,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f" + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/30f38bffc6f24293dadd1823936372dfa9e86e2f", - "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", "shasum": "" }, "require": { @@ -5337,9 +5844,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" }, - "time": "2021-09-17T15:28:14+00:00" + "time": "2021-10-02T14:08:47+00:00" }, { "name": "phpspec/prophecy", @@ -5882,158 +6389,6 @@ }, "time": "2021-03-06T08:28:00+00:00" }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" - }, - "time": "2019-04-30T12:38:16+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.1", @@ -6887,6 +7242,7 @@ "type": "github" } ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -7062,16 +7418,16 @@ }, { "name": "spatie/laravel-ray", - "version": "1.25.2", + "version": "1.26.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "9379ed902a42d8909051d9bd5ca05a7329be7b87" + "reference": "5ecc2ebbdad8ae3ec31274596d922495cff69184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/9379ed902a42d8909051d9bd5ca05a7329be7b87", - "reference": "9379ed902a42d8909051d9bd5ca05a7329be7b87", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/5ecc2ebbdad8ae3ec31274596d922495cff69184", + "reference": "5ecc2ebbdad8ae3ec31274596d922495cff69184", "shasum": "" }, "require": { @@ -7128,7 +7484,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.25.2" + "source": "https://github.com/spatie/laravel-ray/tree/1.26.1" }, "funding": [ { @@ -7140,7 +7496,7 @@ "type": "other" } ], - "time": "2021-09-10T07:21:33+00:00" + "time": "2021-10-01T13:08:05+00:00" }, { "name": "spatie/macroable", @@ -7194,16 +7550,16 @@ }, { "name": "spatie/ray", - "version": "1.30.2", + "version": "1.30.3", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "f6344f8abf3ede60c963d9d3f7f35fb526b6138c" + "reference": "5ec8449def9735d58b66d8024776becb3b020288" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/f6344f8abf3ede60c963d9d3f7f35fb526b6138c", - "reference": "f6344f8abf3ede60c963d9d3f7f35fb526b6138c", + "url": "https://api.github.com/repos/spatie/ray/zipball/5ec8449def9735d58b66d8024776becb3b020288", + "reference": "5ec8449def9735d58b66d8024776becb3b020288", "shasum": "" }, "require": { @@ -7253,7 +7609,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.30.2" + "source": "https://github.com/spatie/ray/tree/1.30.3" }, "funding": [ { @@ -7265,7 +7621,7 @@ "type": "other" } ], - "time": "2021-09-10T07:22:57+00:00" + "time": "2021-10-07T22:07:04+00:00" }, { "name": "symfony/stopwatch", diff --git a/config/gateway_idpay.php b/config/gateway_idpay.php new file mode 100644 index 0000000..a3ca81e --- /dev/null +++ b/config/gateway_idpay.php @@ -0,0 +1,25 @@ + Omalizadeh\MultiPayment\Drivers\IDPay\IDPay::class, + + /** + * gateway configurations + */ + 'main' => [ + 'api_key' => '', + 'sandbox' => true, // Turn off sandbox mode by setting this value to false + 'callback_url' => 'https://yoursite.com/path/to', + 'description' => 'payment using idpay', + ], + 'other' => [ + 'api_key' => '', + 'sandbox' => true, + 'callback_url' => 'https://yoursite.com/path/to', + 'description' => 'payment using idpay', + ] +]; diff --git a/config/gateway_payir.php b/config/gateway_payir.php new file mode 100644 index 0000000..35658e1 --- /dev/null +++ b/config/gateway_payir.php @@ -0,0 +1,23 @@ + Omalizadeh\MultiPayment\Drivers\PayIr\PayIr::class, + + /** + * gateway configurations + */ + 'main' => [ + 'api_key' => '', // Use 'test' as api_key for sandbox mode + 'callback_url' => 'https://yoursite.com/path/to', + 'description' => 'payment using payir', + ], + 'other' => [ + 'api_key' => '', + 'callback_url' => 'https://yoursite.com/path/to', + 'description' => 'payment using payir', + ] +]; diff --git a/src/Drivers/IDPay/IDPay.php b/src/Drivers/IDPay/IDPay.php new file mode 100644 index 0000000..f2a50ef --- /dev/null +++ b/src/Drivers/IDPay/IDPay.php @@ -0,0 +1,224 @@ +callApi($this->getPurchaseUrl(), $this->getPurchaseData()); + + if (isset($response['error_code'])) { + $message = $response['error_message'] ?? $this->getStatusMessage($response['error_code']); + throw new PurchaseFailedException($message, $response['error_code']); + } + + $this->getInvoice()->setTransactionId($response['id']); + + $this->setLink($response['link']); + + return $response['id']; + } + + public function pay(): RedirectionForm + { + return $this->redirect($this->link, [], 'GET'); + } + + public function verify(): Receipt + { + $status = (int) request('status'); + + if (!in_array($status, [ + $this->getPendingVerificationStatusCode(), + $this->getPaymentAlreadyVerifiedStatusCode(), + $this->getSuccessResponseStatusCode() + ], true) + ) { + throw new PaymentFailedException($this->getStatusMessage($status), $status); + } + + $response = $this->callApi($this->getVerificationUrl(), $this->getVerificationData()); + + if (isset($response['error_code'])) { + $message = $response['error_message'] ?? $this->getStatusMessage($response['error_code']); + throw new PaymentFailedException($message, $response['error_code']); + } + + $status = (int) $response['status']; + + if ($status === $this->getPaymentAlreadyVerifiedStatusCode()) { + throw new PaymentAlreadyVerifiedException('پرداخت قبلا تایید شده است', $status); + } + + if ($status !== $this->getSuccessResponseStatusCode()) { + throw new PaymentFailedException($this->getStatusMessage($status), $status); + } + + return new Receipt( + $this->getInvoice(), + $response['track_id'], + $response['payment']['track_id'], + $response['payment']['card_no'] + ); + } + + /** + * @throws InvalidConfigurationException + * @throws \Exception + */ + protected function getPurchaseData(): array + { + if (empty($this->settings['api_key'])) { + throw new InvalidConfigurationException('Api key has not been set.'); + } + + $description = $this->getInvoice()->getDescription() ?? $this->settings['description']; + + $mobile = $this->getInvoice()->getPhoneNumber(); + $email = $this->getInvoice()->getEmail(); + + if (!empty($mobile)) { + $mobile = $this->checkPhoneNumberFormat($mobile); + } + + return [ + 'order_id' => $this->getInvoice()->getInvoiceId(), + 'amount' => $this->getInvoice()->getAmount(), + 'name' => $this->getInvoice()->getUserName(), + 'phone' => $mobile, + 'mail' => $email, + 'desc' => $description, + 'callback' => $this->settings['callback_url'] + ]; + } + + protected function getVerificationData(): array + { + return [ + 'id' => request('id', $this->getInvoice()->getTransactionId()), + 'order_id' => request('order_id', $this->getInvoice()->getInvoiceId()), + ]; + } + + protected function getStatusMessage($statusCode): string + { + $messages = [ + 1 => 'پرداخت انجام نشده است.', + 2 => 'پرداخت ناموفق بوده است.', + 3 => 'خطا رخ داده است.', + 4 => 'بلوکه شده', + 5 => 'برگشت به پرداخت کننده', + 6 => 'برگشت خورده سیستمی', + 7 => 'انصراف از پرداخت.', + 8 => 'به درگاه پرداخت منتقل شد.', + 10 => 'در انتظار تایید پرداخت.', + 11 => 'کاربر مسدود شده است.', + 12 => 'API Key یافت نشد.', + 13 => 'درخواست شما از IP نامعتبر ارسال شده است.', + 14 => 'وب سرویس شما در حال بررسی است و یا تایید نشده است.', + 21 => 'حساب بانکی متصل به وب سرویس تایید نشده است.', + 22 => 'وب سریس یافت نشد.', + 23 => 'اعتبار سنجی وب سرویس ناموفق بود.', + 24 => 'حساب بانکی مرتبط با این وب سرویس غیر فعال شده است.', + 31 => 'کد تراکنش id نباید خالی باشد.', + 32 => 'شماره سفارش order_id نباید خالی باشد.', + 33 => 'مبلغ amount نباید خالی باشد.', + 34 => 'مبلغ amount باید بیشتر باشد.', + 35 => 'مبلغ amount باید کمتر باشد.', + 36 => 'مبلغ amount بیشتر از حد مجاز است.', + 37 => 'آدرس بازگشت callback نباید خالی باشد.', + 38 => 'دامنه آدرس بازگشت callback با آدرس ثبت شده در وب سرویس همخوانی ندارد.', + 41 => 'فیلتر وضعیت تراکنش ها می بایست آرایه ای (لیستی) از وضعیت های مجاز در مستندات باشد.', + 42 => 'فیلتر تاریخ پرداخت می بایست آرایه ای شامل المنت های min و max از نوع timestamp باشد.', + 43 => 'فیلتر تاریخ تسویه می بایست آرایه ای شامل المنت های min و max از نوع timestamp باشد.', + 51 => 'تراکنش ایجاد نشد.', + 52 => 'استعلام نتیجه ای نداشت.', + 53 => 'تایید پرداخت امکان پذیر نیست.', + 54 => 'مدت زمان تایید پرداخت سپری شده است.', + 100 => 'پرداخت تایید شده است.', + 101 => 'پرداخت قبلا تایید شده است.', + 200 => 'به دریافت کننده واریز شد', + ]; + + $unknownError = 'خطای ناشناخته رخ داده است.'; + + return array_key_exists($statusCode, $messages) ? $messages[$statusCode] : $unknownError; + } + + protected function getSuccessResponseStatusCode(): int + { + return 100; + } + + private function getPendingVerificationStatusCode(): int + { + return 10; + } + + private function getPaymentAlreadyVerifiedStatusCode(): int + { + return 101; + } + + protected function getPurchaseUrl(): string + { + return 'https://api.idpay.ir/v1.1/payment'; + } + + protected function getPaymentUrl(): string + { + return 'link'; + } + + protected function getVerificationUrl(): string + { + return 'https://api.idpay.ir/v1.1/payment/verify'; + } + + private function callApi(string $url, array $data) + { + $response = Http::withHeaders($this->getRequestHeaders())->post($url, $data); + + return $response->json(); + } + + private function getRequestHeaders(): array + { + return [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'X-API-KEY' => $this->settings['api_key'], + 'X-SANDBOX' => (int) $this->settings['sandbox'], + ]; + } + + private function checkPhoneNumberFormat(string $phoneNumber): string + { + if (strlen($phoneNumber) === 12 && Str::startsWith($phoneNumber, '98')) { + return Str::replaceFirst('98', '0', $phoneNumber); + } + if (strlen($phoneNumber) === 10 && Str::startsWith($phoneNumber, '9')) { + return '0'.$phoneNumber; + } + + return $phoneNumber; + } + + private function setLink(string $link): void + { + $this->link = $link; + } +} diff --git a/src/Drivers/Pasargad/Pasargad.php b/src/Drivers/Pasargad/Pasargad.php index f8e863a..6d7be1d 100644 --- a/src/Drivers/Pasargad/Pasargad.php +++ b/src/Drivers/Pasargad/Pasargad.php @@ -140,8 +140,8 @@ protected function getCheckTransactionData(): array return [ 'MerchantCode' => $this->settings['merchant_code'], 'TerminalCode' => $this->settings['terminal_code'], - 'InvoiceNumber' => request('iN') ?? $this->getInvoice()->getInvoiceId(), - 'InvoiceDate' => request('iD') ?? now()->format('Y/m/d H:i:s'), + 'InvoiceNumber' => request('iN', $this->getInvoice()->getInvoiceId()), + 'InvoiceDate' => request('iD', now()->format('Y/m/d H:i:s')), ]; } diff --git a/src/Drivers/PayIr/PayIr.php b/src/Drivers/PayIr/PayIr.php new file mode 100644 index 0000000..71fe015 --- /dev/null +++ b/src/Drivers/PayIr/PayIr.php @@ -0,0 +1,189 @@ +callApi($this->getPurchaseUrl(), $this->getPurchaseData()); + + if ($response['status'] !== $this->getSuccessResponseStatusCode()) { + $message = $response['errorMessage'] ?? $this->getStatusMessage($response['errorCode']); + throw new PurchaseFailedException($message, $response['errorCode']); + } + + $this->getInvoice()->setToken($response['token']); + + return $this->getInvoice()->getInvoiceId(); + } + + public function pay(): RedirectionForm + { + $token = $this->getInvoice()->getToken(); + + $paymentUrl = $this->getPaymentUrl(); + $paymentUrl .= $token; + + return $this->redirect($paymentUrl, [], 'GET'); + } + + public function verify(): Receipt + { + $success = (int) request('status'); + + if ($success !== $this->getSuccessResponseStatusCode()) { + throw new PaymentFailedException('عملیات پرداخت ناموفق بود یا توسط کاربر لغو شد.'); + } + + $response = $this->callApi($this->getVerificationUrl(), $this->getVerificationData()); + + if ($response['status'] !== $this->getSuccessResponseStatusCode()) { + $message = $response['errorMessage'] ?? $this->getStatusMessage($response['errorCode']); + throw new PaymentFailedException($message, $response['errorCode']); + } + + $this->getInvoice()->setTransactionId($response['transId']); + + return new Receipt( + $this->getInvoice(), + $response['transId'], + null, + $response['cardNumber'] + ); + } + + protected function getPurchaseData(): array + { + if (empty($this->settings['api_key'])) { + throw new InvalidConfigurationException('Api key has not been set.'); + } + + $description = $this->getInvoice()->getDescription() ?? $this->settings['description']; + + $mobile = $this->getInvoice()->getPhoneNumber(); + + if (!empty($mobile)) { + $mobile = $this->checkPhoneNumberFormat($mobile); + } + + return [ + 'api' => $this->settings['api_key'], + 'amount' => $this->getInvoice()->getAmount(), + 'redirect' => $this->settings['callback_url'], + 'mobile' => $mobile, + 'factorNumber' => $this->getInvoice()->getInvoiceId(), + 'description' => $description, + ]; + } + + protected function getVerificationData(): array + { + $token = request('token', $this->getInvoice()->getToken()); + + return [ + 'api' => $this->settings['api_key'], + 'token' => $token, + ]; + } + + protected function getStatusMessage($statusCode): string + { + $messages = [ + '0' => 'درحال حاضر درگاه بانکی قطع شده و مشکل بزودی برطرف می شود', + '-1' => 'API Key ارسال نمی شود', + '-2' => 'Token ارسال نمی شود', + '-3' => 'API Key ارسال شده اشتباه است', + '-4' => 'امکان انجام تراکنش برای این پذیرنده وجود ندارد', + '-5' => 'تراکنش با خطا مواجه شده است', + '-6' => 'تراکنش تکراریست یا قبلا انجام شده', + '-7' => 'مقدار Token ارسالی اشتباه است', + '-8' => 'شماره تراکنش ارسالی اشتباه است', + '-9' => 'زمان مجاز برای انجام تراکنش تمام شده', + '-10' => 'مبلغ تراکنش ارسال نمی شود', + '-11' => 'مبلغ تراکنش باید به صورت عددی و با کاراکترهای لاتین باشد', + '-12' => 'مبلغ تراکنش می بایست عددی بین 10,000 و 500,000,000 ریال باشد', + '-13' => 'مقدار آدرس بازگشتی ارسال نمی شود', + '-14' => 'آدرس بازگشتی ارسالی با آدرس درگاه ثبت شده در شبکه پرداخت پی یکسان نیست', + '-15' => 'امکان وریفای وجود ندارد. این تراکنش پرداخت نشده است', + '-16' => 'یک یا چند شماره موبایل از اطلاعات پذیرندگان ارسال شده اشتباه است', + '-17' => 'میزان سهم ارسالی باید بصورت عددی و بین 1 تا 100 باشد', + '-18' => 'فرمت پذیرندگان صحیح نمی باشد', + '-19' => 'هر پذیرنده فقط یک سهم میتواند داشته باشد', + '-20' => 'مجموع سهم پذیرنده ها باید 100 درصد باشد', + '-21' => 'Reseller ID ارسالی اشتباه است', + '-22' => 'فرمت یا طول مقادیر ارسالی به درگاه اشتباه است', + '-23' => 'سوییچ PSP ( درگاه بانک ) قادر به پردازش درخواست نیست. لطفا لحظاتی بعد مجددا تلاش کنید', + '-24' => 'شماره کارت باید بصورت 16 رقمی، لاتین و چسبیده بهم باشد', + '-25' => 'امکان استفاده از سرویس در کشور مبدا شما وجود نداره', + '-26' => 'امکان انجام تراکنش برای این درگاه وجود ندارد', + ]; + + $unknownError = 'خطای ناشناخته رخ داده است.'; + + return array_key_exists($statusCode, $messages) ? $messages[$statusCode] : $unknownError; + } + + protected function getSuccessResponseStatusCode(): int + { + return 1; + } + + protected function getPurchaseUrl(): string + { + return 'https://pay.ir/pg/send'; + } + + protected function getPaymentUrl(): string + { + return 'https://pay.ir/pg/'; + } + + protected function getVerificationUrl(): string + { + return 'https://pay.ir/pg/verify'; + } + + private function getRequestHeaders(): array + { + return [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + ]; + } + + private function callApi(string $url, array $data) + { + $headers = $this->getRequestHeaders(); + + $response = Http::withHeaders($headers)->post($url, $data); + + if ($response->successful()) { + return $response->json(); + } + + throw new HttpRequestFailedException($response->body(), $response->status()); + } + + private function checkPhoneNumberFormat(string $phoneNumber): string + { + if (strlen($phoneNumber) === 12 && Str::startsWith($phoneNumber, '98')) { + return Str::replaceFirst('98', '0', $phoneNumber); + } + if (strlen($phoneNumber) === 10 && Str::startsWith($phoneNumber, '9')) { + return '0'.$phoneNumber; + } + + return $phoneNumber; + } +} diff --git a/src/Drivers/Saman/Saman.php b/src/Drivers/Saman/Saman.php index 0691cab..ca27add 100644 --- a/src/Drivers/Saman/Saman.php +++ b/src/Drivers/Saman/Saman.php @@ -84,7 +84,7 @@ protected function getPurchaseData(): array protected function getVerificationData(): array { return [ - 'RefNum' => request('RefNum') ?? $this->getInvoice()->getTransactionId(), + 'RefNum' => request('RefNum', $this->getInvoice()->getTransactionId()), 'MerchantID' => $this->settings['terminal_id'] ]; } diff --git a/src/Drivers/Zibal/Zibal.php b/src/Drivers/Zibal/Zibal.php index 96d62e0..0518cb8 100644 --- a/src/Drivers/Zibal/Zibal.php +++ b/src/Drivers/Zibal/Zibal.php @@ -84,7 +84,6 @@ protected function getPurchaseData(): array $description = $this->getInvoice()->getDescription() ?? $this->settings['description']; $mobile = $this->getInvoice()->getPhoneNumber(); - $email = $this->getInvoice()->getEmail(); if (!empty($mobile)) { $mobile = $this->checkPhoneNumberFormat($mobile); diff --git a/src/Invoice.php b/src/Invoice.php index ef93ed7..02ce840 100644 --- a/src/Invoice.php +++ b/src/Invoice.php @@ -11,6 +11,7 @@ class Invoice protected ?int $userId = null; protected ?string $token = null; protected ?string $email = null; + protected ?string $userName = null; protected ?string $invoiceId = null; protected ?string $description = null; protected ?string $phoneNumber = null; @@ -95,6 +96,17 @@ public function setEmail(string $email): Invoice return $this; } + /** + * @param string $name + * @return $this + */ + public function setUserName(string $name): Invoice + { + $this->userName = $name; + + return $this; + } + /** * @param int $userId * @return $this @@ -179,6 +191,14 @@ public function getEmail(): ?string return $this->email; } + /** + * @return string|null + */ + public function getUserName(): ?string + { + return $this->userName; + } + /** * @return int|null */ diff --git a/src/Providers/MultiPaymentServiceProvider.php b/src/Providers/MultiPaymentServiceProvider.php index b579ae7..aacdefc 100644 --- a/src/Providers/MultiPaymentServiceProvider.php +++ b/src/Providers/MultiPaymentServiceProvider.php @@ -62,6 +62,14 @@ public function boot() $this->publishes([ __DIR__.'/../../config/gateway_pasargad.php' => config_path('gateway_pasargad.php') ], 'pasargad-config'); + + $this->publishes([ + __DIR__.'/../../config/gateway_idpay.php' => config_path('gateway_idpay.php') + ], 'idpay-config'); + + $this->publishes([ + __DIR__.'/../../config/gateway_payir.php' => config_path('gateway_payir.php') + ], 'payir-config'); } } }