From ba26eaddda4d7e21296b5d6af3028f830b8da41f Mon Sep 17 00:00:00 2001 From: ging-dev Date: Sun, 7 Jul 2024 22:07:31 +0700 Subject: [PATCH] wip --- .github/workflows/static-analysis.yaml | 14 + .gitignore | 2 + composer.json | 8 +- composer.lock | 43 +- docs/ArrayAccess.html | 326 ++++ docs/ArrayIterator.html | 913 +++++++++ docs/ArrayObject.html | 859 +++++++++ docs/Closure.html | 234 +++ docs/Countable.html | 216 +++ docs/DateInterval.html | 312 ++++ docs/DateTime.html | 748 ++++++++ docs/DateTimeImmutable.html | 748 ++++++++ docs/DateTimeInterface.html | 412 ++++ docs/DateTimeZone.html | 416 +++++ docs/ErrorException.html | 246 +++ ...ventSauce.ObjectHydrator.IterableList.html | 254 +++ ...ventSauce.ObjectHydrator.ObjectMapper.html | 314 ++++ ....ObjectHydrator.UnableToHydrateObject.html | 382 ++++ ...bjectHydrator.UnableToSerializeObject.html | 252 +++ docs/Exception.html | 555 ++++++ ...ent.Common.HttpMethodsClientInterface.html | 545 ++++++ docs/Http.Client.Common.Plugin.html | 225 +++ docs/Http.Client.Exception.html | 191 ++ docs/Http.Client.HttpClient.html | 179 ++ docs/Http.Promise.Promise.html | 349 ++++ docs/IPay.Api.AbstractApi.html | 345 ++++ docs/IPay.Api.AuthenticatedApi.html | 295 +++ docs/IPay.Api.AuthenticatedSession.html | 283 +++ docs/IPay.Api.BodyBuilder.html | 392 ++++ docs/IPay.Api.SessionInterface.html | 214 +++ docs/IPay.Api.UnauthenticatedApi.html | 243 +++ docs/IPay.Api.UnauthenticatedSession.html | 225 +++ docs/IPay.Encryption.Encrypter.html | 156 ++ docs/IPay.Entity.Account.html | 273 +++ docs/IPay.Entity.AccountState.html | 225 +++ docs/IPay.Entity.Customer.html | 273 +++ docs/IPay.Entity.Transaction.html | 328 ++++ docs/IPay.Exception.LoginFailedException.html | 201 ++ ...Pay.Exception.SessionExpiredException.html | 174 ++ docs/IPay.Http.Plugin.ExceptionThrower.html | 193 ++ docs/IPay.IPayClient.html | 234 +++ docs/InvalidArgumentException.html | 213 +++ docs/Iterator.html | 322 ++++ docs/IteratorAggregate.html | 208 +++ docs/JsonSerializable.html | 173 ++ docs/LogicException.html | 216 +++ docs/OutOfBoundsException.html | 196 ++ ....Http.Client.ClientExceptionInterface.html | 196 ++ docs/Psr.Http.Client.ClientInterface.html | 207 ++ docs/Psr.Http.Message.MessageInterface.html | 706 +++++++ docs/Psr.Http.Message.RequestInterface.html | 470 +++++ docs/Psr.Http.Message.ResponseInterface.html | 338 ++++ docs/Psr.Http.Message.StreamInterface.html | 751 ++++++++ docs/Psr.Http.Message.UriInterface.html | 934 +++++++++ docs/RuntimeException.html | 195 ++ docs/SeekableIterator.html | 205 ++ docs/Serializable.html | 230 +++ docs/Stringable.html | 363 ++++ ...onsResolver.Exception.AccessException.html | 260 +++ ...Resolver.Exception.ExceptionInterface.html | 274 +++ ...er.Exception.InvalidArgumentException.html | 294 +++ ...ver.Exception.InvalidOptionsException.html | 291 +++ ...ver.Exception.MissingOptionsException.html | 291 +++ ...olver.Exception.NoSuchOptionException.html | 281 +++ ...r.Exception.OptionDefinitionException.html | 259 +++ ...r.Exception.UndefinedOptionsException.html | 292 +++ ...nt.OptionsResolver.OptionConfigurator.html | 539 ++++++ ...ony.Component.OptionsResolver.Options.html | 209 +++ ...onent.OptionsResolver.OptionsResolver.html | 1662 +++++++++++++++++ docs/Throwable.html | 553 ++++++ docs/Traversable.html | 192 ++ docs/assets/elements.js | 1 + docs/assets/main.css | 569 ++++++ docs/assets/main.js | 243 +++ docs/function-ipay.html | 119 ++ docs/index.html | 123 ++ docs/namespace-EventSauce.ObjectHydrator.html | 174 ++ docs/namespace-EventSauce.html | 107 ++ docs/namespace-Http.Client.Common.html | 136 ++ docs/namespace-Http.Client.html | 143 ++ docs/namespace-Http.Promise.html | 122 ++ docs/namespace-Http.html | 110 ++ docs/namespace-IPay.Api.html | 180 ++ docs/namespace-IPay.Encryption.html | 113 ++ docs/namespace-IPay.Entity.html | 140 ++ docs/namespace-IPay.Exception.html | 122 ++ docs/namespace-IPay.Http.Plugin.html | 118 ++ docs/namespace-IPay.Http.html | 107 ++ docs/namespace-IPay.html | 136 ++ docs/namespace-Psr.Http.Client.html | 135 ++ docs/namespace-Psr.Http.Message.html | 163 ++ docs/namespace-Psr.Http.html | 115 ++ docs/namespace-Psr.html | 107 ++ ...y.Component.OptionsResolver.Exception.html | 208 +++ ...ace-Symfony.Component.OptionsResolver.html | 170 ++ docs/namespace-Symfony.Component.html | 112 ++ docs/namespace-Symfony.html | 107 ++ docs/namespace-none.html | 127 ++ docs/sitemap.xml | 51 + docs/source-Api.AbstractApi.html | 133 ++ docs/source-Api.AuthenticatedApi.html | 133 ++ docs/source-Api.AuthenticatedSession.html | 133 ++ docs/source-Api.BodyBuilder.html | 133 ++ docs/source-Api.SessionInterface.html | 133 ++ docs/source-Api.UnauthenticatedApi.html | 133 ++ docs/source-Api.UnauthenticatedSession.html | 133 ++ docs/source-Encryption.Encrypter.html | 98 + docs/source-Entity.Account.html | 113 ++ docs/source-Entity.Customer.html | 113 ++ docs/source-Entity.Transaction.html | 113 ++ ...source-Exception.LoginFailedException.html | 103 + ...rce-Exception.SessionExpiredException.html | 103 + docs/source-Http.Plugin.ExceptionThrower.html | 103 + docs/source-IPayClient.html | 98 + docs/source-functions.html | 98 + docs/tree.html | 513 +++++ phpstan-baseline.neon | 6 + phpstan.neon.dist | 5 +- src/Api/AbstractApi.php | 42 +- src/Api/Auth.php | 17 - src/Api/AuthenticatedApi.php | 90 + src/Api/AuthenticatedSession.php | 20 + src/Api/{FieldBuilder.php => BodyBuilder.php} | 19 +- src/Api/Session.php | 31 - src/Api/SessionInterface.php | 11 + src/Api/UnauthenticatedApi.php | 41 + src/Api/UnauthenticatedSession.php | 16 + src/Encryption/Encrypter.php | 10 +- src/Entity/Account.php | 23 + src/Entity/Customer.php | 20 +- src/Entity/Transaction.php | 21 + src/IPayClient.php | 14 +- src/functions.php | 10 + 133 files changed, 30829 insertions(+), 128 deletions(-) create mode 100644 .github/workflows/static-analysis.yaml create mode 100644 docs/ArrayAccess.html create mode 100644 docs/ArrayIterator.html create mode 100644 docs/ArrayObject.html create mode 100644 docs/Closure.html create mode 100644 docs/Countable.html create mode 100644 docs/DateInterval.html create mode 100644 docs/DateTime.html create mode 100644 docs/DateTimeImmutable.html create mode 100644 docs/DateTimeInterface.html create mode 100644 docs/DateTimeZone.html create mode 100644 docs/ErrorException.html create mode 100644 docs/EventSauce.ObjectHydrator.IterableList.html create mode 100644 docs/EventSauce.ObjectHydrator.ObjectMapper.html create mode 100644 docs/EventSauce.ObjectHydrator.UnableToHydrateObject.html create mode 100644 docs/EventSauce.ObjectHydrator.UnableToSerializeObject.html create mode 100644 docs/Exception.html create mode 100644 docs/Http.Client.Common.HttpMethodsClientInterface.html create mode 100644 docs/Http.Client.Common.Plugin.html create mode 100644 docs/Http.Client.Exception.html create mode 100644 docs/Http.Client.HttpClient.html create mode 100644 docs/Http.Promise.Promise.html create mode 100644 docs/IPay.Api.AbstractApi.html create mode 100644 docs/IPay.Api.AuthenticatedApi.html create mode 100644 docs/IPay.Api.AuthenticatedSession.html create mode 100644 docs/IPay.Api.BodyBuilder.html create mode 100644 docs/IPay.Api.SessionInterface.html create mode 100644 docs/IPay.Api.UnauthenticatedApi.html create mode 100644 docs/IPay.Api.UnauthenticatedSession.html create mode 100644 docs/IPay.Encryption.Encrypter.html create mode 100644 docs/IPay.Entity.Account.html create mode 100644 docs/IPay.Entity.AccountState.html create mode 100644 docs/IPay.Entity.Customer.html create mode 100644 docs/IPay.Entity.Transaction.html create mode 100644 docs/IPay.Exception.LoginFailedException.html create mode 100644 docs/IPay.Exception.SessionExpiredException.html create mode 100644 docs/IPay.Http.Plugin.ExceptionThrower.html create mode 100644 docs/IPay.IPayClient.html create mode 100644 docs/InvalidArgumentException.html create mode 100644 docs/Iterator.html create mode 100644 docs/IteratorAggregate.html create mode 100644 docs/JsonSerializable.html create mode 100644 docs/LogicException.html create mode 100644 docs/OutOfBoundsException.html create mode 100644 docs/Psr.Http.Client.ClientExceptionInterface.html create mode 100644 docs/Psr.Http.Client.ClientInterface.html create mode 100644 docs/Psr.Http.Message.MessageInterface.html create mode 100644 docs/Psr.Http.Message.RequestInterface.html create mode 100644 docs/Psr.Http.Message.ResponseInterface.html create mode 100644 docs/Psr.Http.Message.StreamInterface.html create mode 100644 docs/Psr.Http.Message.UriInterface.html create mode 100644 docs/RuntimeException.html create mode 100644 docs/SeekableIterator.html create mode 100644 docs/Serializable.html create mode 100644 docs/Stringable.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.AccessException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.ExceptionInterface.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.InvalidArgumentException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.InvalidOptionsException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.MissingOptionsException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.NoSuchOptionException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.OptionDefinitionException.html create mode 100644 docs/Symfony.Component.OptionsResolver.Exception.UndefinedOptionsException.html create mode 100644 docs/Symfony.Component.OptionsResolver.OptionConfigurator.html create mode 100644 docs/Symfony.Component.OptionsResolver.Options.html create mode 100644 docs/Symfony.Component.OptionsResolver.OptionsResolver.html create mode 100644 docs/Throwable.html create mode 100644 docs/Traversable.html create mode 100644 docs/assets/elements.js create mode 100644 docs/assets/main.css create mode 100644 docs/assets/main.js create mode 100644 docs/function-ipay.html create mode 100644 docs/index.html create mode 100644 docs/namespace-EventSauce.ObjectHydrator.html create mode 100644 docs/namespace-EventSauce.html create mode 100644 docs/namespace-Http.Client.Common.html create mode 100644 docs/namespace-Http.Client.html create mode 100644 docs/namespace-Http.Promise.html create mode 100644 docs/namespace-Http.html create mode 100644 docs/namespace-IPay.Api.html create mode 100644 docs/namespace-IPay.Encryption.html create mode 100644 docs/namespace-IPay.Entity.html create mode 100644 docs/namespace-IPay.Exception.html create mode 100644 docs/namespace-IPay.Http.Plugin.html create mode 100644 docs/namespace-IPay.Http.html create mode 100644 docs/namespace-IPay.html create mode 100644 docs/namespace-Psr.Http.Client.html create mode 100644 docs/namespace-Psr.Http.Message.html create mode 100644 docs/namespace-Psr.Http.html create mode 100644 docs/namespace-Psr.html create mode 100644 docs/namespace-Symfony.Component.OptionsResolver.Exception.html create mode 100644 docs/namespace-Symfony.Component.OptionsResolver.html create mode 100644 docs/namespace-Symfony.Component.html create mode 100644 docs/namespace-Symfony.html create mode 100644 docs/namespace-none.html create mode 100644 docs/sitemap.xml create mode 100644 docs/source-Api.AbstractApi.html create mode 100644 docs/source-Api.AuthenticatedApi.html create mode 100644 docs/source-Api.AuthenticatedSession.html create mode 100644 docs/source-Api.BodyBuilder.html create mode 100644 docs/source-Api.SessionInterface.html create mode 100644 docs/source-Api.UnauthenticatedApi.html create mode 100644 docs/source-Api.UnauthenticatedSession.html create mode 100644 docs/source-Encryption.Encrypter.html create mode 100644 docs/source-Entity.Account.html create mode 100644 docs/source-Entity.Customer.html create mode 100644 docs/source-Entity.Transaction.html create mode 100644 docs/source-Exception.LoginFailedException.html create mode 100644 docs/source-Exception.SessionExpiredException.html create mode 100644 docs/source-Http.Plugin.ExceptionThrower.html create mode 100644 docs/source-IPayClient.html create mode 100644 docs/source-functions.html create mode 100644 docs/tree.html create mode 100644 phpstan-baseline.neon delete mode 100644 src/Api/Auth.php create mode 100644 src/Api/AuthenticatedApi.php create mode 100644 src/Api/AuthenticatedSession.php rename src/Api/{FieldBuilder.php => BodyBuilder.php} (65%) delete mode 100644 src/Api/Session.php create mode 100644 src/Api/SessionInterface.php create mode 100644 src/Api/UnauthenticatedApi.php create mode 100644 src/Api/UnauthenticatedSession.php create mode 100644 src/Entity/Account.php create mode 100644 src/Entity/Transaction.php create mode 100644 src/functions.php diff --git a/.github/workflows/static-analysis.yaml b/.github/workflows/static-analysis.yaml new file mode 100644 index 0000000..f763077 --- /dev/null +++ b/.github/workflows/static-analysis.yaml @@ -0,0 +1,14 @@ +name: static analysis + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + tests: + uses: laravel/.github/.github/workflows/static-analysis.yml@main diff --git a/.gitignore b/.gitignore index b840dac..504d811 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ vendor +tools test.php *.cache +*.txt diff --git a/composer.json b/composer.json index 62382b4..52e7b50 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,8 @@ "type": "library", "license": "MIT", "autoload": { - "classmap": ["src"] + "classmap": ["src"], + "files": ["src/functions.php"] }, "authors": [ { @@ -12,13 +13,14 @@ "email": "thanh1101dev@gmail.com" } ], - "minimum-stability": "dev", + "minimum-stability": "stable", "prefer-stable": true, "require": { "php-http/httplug": "^2.4", "php-http/client-common": "^2.7", "nette/utils": "^4.0", - "league/object-mapper": "dev-main" + "eventsauce/object-hydrator": "^1.4", + "symfony/options-resolver": "^7.1" }, "require-dev": { "php-http/curl-client": "^2.3", diff --git a/composer.lock b/composer.lock index 569b372..e8a34b7 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": "aea4d0667f4344934e73e1531cdcdf2e", + "content-hash": "7bb0077a1dec3aaac2ca477845d25ed9", "packages": [ { "name": "clue/stream-filter", @@ -73,39 +73,38 @@ "time": "2023-12-20T15:40:13+00:00" }, { - "name": "league/object-mapper", - "version": "dev-main", + "name": "eventsauce/object-hydrator", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/object-mapper.git", - "reference": "9cbcd21f3ce81aa2d614f65347f6abc901941ea7" + "url": "https://github.com/EventSaucePHP/ObjectHydrator.git", + "reference": "743ee4524d1a3d7b381ef9f61afcb18e0cc81cb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/object-mapper/zipball/9cbcd21f3ce81aa2d614f65347f6abc901941ea7", - "reference": "9cbcd21f3ce81aa2d614f65347f6abc901941ea7", + "url": "https://api.github.com/repos/EventSaucePHP/ObjectHydrator/zipball/743ee4524d1a3d7b381ef9f61afcb18e0cc81cb0", + "reference": "743ee4524d1a3d7b381ef9f61afcb18e0cc81cb0", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^8.1" + "php": "^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.4", "league/construct-finder": "^1.1", "phpbench/phpbench": "^1.2", "phpstan/phpstan": "^1.7", - "phpunit/phpunit": "^10.0.0", + "phpunit/phpunit": "^9.5.11", "ramsey/uuid": "^4.2" }, "suggest": { "league/construct-finder": "Find all classes in a directory for the best dumped hydrators." }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { - "League\\ObjectMapper\\": "src/" + "EventSauce\\ObjectHydrator\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -126,8 +125,8 @@ "mapper" ], "support": { - "issues": "https://github.com/thephpleague/object-mapper/issues", - "source": "https://github.com/thephpleague/object-mapper/tree/main" + "issues": "https://github.com/EventSaucePHP/ObjectHydrator/issues", + "source": "https://github.com/EventSaucePHP/ObjectHydrator/tree/1.4.0" }, "funding": [ { @@ -135,7 +134,7 @@ "type": "github" } ], - "time": "2023-12-16T09:26:10+00:00" + "time": "2023-08-03T07:27:58+00:00" }, { "name": "nette/utils", @@ -1070,16 +1069,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.5", + "version": "1.11.7", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443" + "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d", + "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d", "shasum": "" }, "require": { @@ -1124,14 +1123,12 @@ "type": "github" } ], - "time": "2024-06-17T15:10:54+00:00" + "time": "2024-07-06T11:17:41+00:00" } ], "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "league/object-mapper": 20 - }, + "minimum-stability": "stable", + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": [], diff --git a/docs/ArrayAccess.html b/docs/ArrayAccess.html new file mode 100644 index 0000000..8bf8a7d --- /dev/null +++ b/docs/ArrayAccess.html @@ -0,0 +1,326 @@ + + + + + + + + Interface ArrayAccess | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface ArrayAccess +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/ArrayIterator.html b/docs/ArrayIterator.html new file mode 100644 index 0000000..baf0233 --- /dev/null +++ b/docs/ArrayIterator.html @@ -0,0 +1,913 @@ + + + + + + + + Class ArrayIterator | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class ArrayIterator +

+ + + + + + + + + + + +
implements +SeekableIterator, ArrayAccess, Serializable, Countable
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/ArrayObject.html b/docs/ArrayObject.html new file mode 100644 index 0000000..e28b148 --- /dev/null +++ b/docs/ArrayObject.html @@ -0,0 +1,859 @@ + + + + + + + + Class ArrayObject | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class ArrayObject +

+ + + + + + + + + + + +
implements +IteratorAggregate, ArrayAccess, Serializable, Countable
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Closure.html b/docs/Closure.html new file mode 100644 index 0000000..b467546 --- /dev/null +++ b/docs/Closure.html @@ -0,0 +1,234 @@ + + + + + + + + Class Closure | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Closure +

+ + + + + + + +
final
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Countable.html b/docs/Countable.html new file mode 100644 index 0000000..5ec842e --- /dev/null +++ b/docs/Countable.html @@ -0,0 +1,216 @@ + + + + + + + + Interface Countable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Countable +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/DateInterval.html b/docs/DateInterval.html new file mode 100644 index 0000000..96e51f7 --- /dev/null +++ b/docs/DateInterval.html @@ -0,0 +1,312 @@ + + + + + + + + Class DateInterval | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class DateInterval +

+ + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/DateTime.html b/docs/DateTime.html new file mode 100644 index 0000000..3a885ec --- /dev/null +++ b/docs/DateTime.html @@ -0,0 +1,748 @@ + + + + + + + + Class DateTime | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class DateTime +

+ + + + + + + + + + + +
implements +DateTimeInterface
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/DateTimeImmutable.html b/docs/DateTimeImmutable.html new file mode 100644 index 0000000..3349b6e --- /dev/null +++ b/docs/DateTimeImmutable.html @@ -0,0 +1,748 @@ + + + + + + + + Class DateTimeImmutable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class DateTimeImmutable +

+ + + + + + + + + + + +
implements +DateTimeInterface
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/DateTimeInterface.html b/docs/DateTimeInterface.html new file mode 100644 index 0000000..8659fa6 --- /dev/null +++ b/docs/DateTimeInterface.html @@ -0,0 +1,412 @@ + + + + + + + + Interface DateTimeInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface DateTimeInterface +

+ + + + +
+ +
+
    +
  • +DateTimeInterface + + + +
  • +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/DateTimeZone.html b/docs/DateTimeZone.html new file mode 100644 index 0000000..1471bbe --- /dev/null +++ b/docs/DateTimeZone.html @@ -0,0 +1,416 @@ + + + + + + + + Class DateTimeZone | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class DateTimeZone +

+ + + + + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/ErrorException.html b/docs/ErrorException.html new file mode 100644 index 0000000..a03c6d5 --- /dev/null +++ b/docs/ErrorException.html @@ -0,0 +1,246 @@ + + + + + + + + Class ErrorException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class ErrorException +

+ + + + + + + + + + + +
extends +Exception
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from Exception
+__wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/EventSauce.ObjectHydrator.IterableList.html b/docs/EventSauce.ObjectHydrator.IterableList.html new file mode 100644 index 0000000..e870885 --- /dev/null +++ b/docs/EventSauce.ObjectHydrator.IterableList.html @@ -0,0 +1,254 @@ + + + + + + + + Class EventSauce\ObjectHydrator\IterableList | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class EventSauce\ObjectHydrator\IterableList +

+ +

<T>

+ + + + + + + + + + +
implements +IteratorAggregate
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/EventSauce.ObjectHydrator.ObjectMapper.html b/docs/EventSauce.ObjectHydrator.ObjectMapper.html new file mode 100644 index 0000000..f0103d0 --- /dev/null +++ b/docs/EventSauce.ObjectHydrator.ObjectMapper.html @@ -0,0 +1,314 @@ + + + + + + + + Interface EventSauce\ObjectHydrator\ObjectMapper | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface EventSauce\ObjectHydrator\ObjectMapper +

+ + + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/EventSauce.ObjectHydrator.UnableToHydrateObject.html b/docs/EventSauce.ObjectHydrator.UnableToHydrateObject.html new file mode 100644 index 0000000..b662c8e --- /dev/null +++ b/docs/EventSauce.ObjectHydrator.UnableToHydrateObject.html @@ -0,0 +1,382 @@ + + + + + + + + Class EventSauce\ObjectHydrator\UnableToHydrateObject | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class EventSauce\ObjectHydrator\UnableToHydrateObject +

+ + + + + + + + + + + +
final
extends +RuntimeException
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/EventSauce.ObjectHydrator.UnableToSerializeObject.html b/docs/EventSauce.ObjectHydrator.UnableToSerializeObject.html new file mode 100644 index 0000000..628b7ea --- /dev/null +++ b/docs/EventSauce.ObjectHydrator.UnableToSerializeObject.html @@ -0,0 +1,252 @@ + + + + + + + + Class EventSauce\ObjectHydrator\UnableToSerializeObject | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class EventSauce\ObjectHydrator\UnableToSerializeObject +

+ + + + + + + + + + + +
final
extends +RuntimeException
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Exception.html b/docs/Exception.html new file mode 100644 index 0000000..ff7638f --- /dev/null +++ b/docs/Exception.html @@ -0,0 +1,555 @@ + + + + + + + + Class Exception | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Exception +

+ + + + + + + + + + + +
implements +Throwable
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Http.Client.Common.HttpMethodsClientInterface.html b/docs/Http.Client.Common.HttpMethodsClientInterface.html new file mode 100644 index 0000000..90dda74 --- /dev/null +++ b/docs/Http.Client.Common.HttpMethodsClientInterface.html @@ -0,0 +1,545 @@ + + + + + + + + Interface Http\Client\Common\HttpMethodsClientInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Http\Client\Common\HttpMethodsClientInterface +

+ + + + + + + + +
extends +HttpClient
+
+

Convenience HTTP client that integrates the MessageFactory in order to send +requests in the following form:.

+

$client +->get('/foo') +->post('/bar') +;

+

The client also exposes the sendRequest methods of the wrapped HttpClient.

+
+
+ +
+
    +
  • +Http\Client\Common\HttpMethodsClientInterface + extends + HttpClient + + +
  • +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
Methods inherited from Psr\Http\Client\ClientInterface
+sendRequest()
+ + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Http.Client.Common.Plugin.html b/docs/Http.Client.Common.Plugin.html new file mode 100644 index 0000000..94e5612 --- /dev/null +++ b/docs/Http.Client.Common.Plugin.html @@ -0,0 +1,225 @@ + + + + + + + + Interface Http\Client\Common\Plugin | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Http\Client\Common\Plugin +

+ + + + +
+
+

A plugin is a middleware to transform the request and/or the response.

+

The plugin can:

+
    +
  • break the chain and return a response
  • +
  • dispatch the request to the next middleware
  • +
  • restart the request
  • +
+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Http.Client.Exception.html b/docs/Http.Client.Exception.html new file mode 100644 index 0000000..accf8a3 --- /dev/null +++ b/docs/Http.Client.Exception.html @@ -0,0 +1,191 @@ + + + + + + + + Interface Http\Client\Exception | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Http\Client\Exception +

+ + + + + + + + +
extends +ClientExceptionInterface
+
+

Every HTTP Client related Exception must implement this interface.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + +
Methods inherited from Throwable
+getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString()
+ + + + + + + + +
Methods inherited from Stringable
+__toString()
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Http.Client.HttpClient.html b/docs/Http.Client.HttpClient.html new file mode 100644 index 0000000..7cac09d --- /dev/null +++ b/docs/Http.Client.HttpClient.html @@ -0,0 +1,179 @@ + + + + + + + + Deprecated Interface Http\Client\HttpClient | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Http\Client\HttpClient +

+ + + + + + + + +
extends +ClientInterface
+
+

{@inheritdoc}

+

Provide the Httplug HttpClient interface for BC. +You should typehint Psr\Http\Client\ClientInterface in new code

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + +
Methods inherited from Psr\Http\Client\ClientInterface
+sendRequest()
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Http.Promise.Promise.html b/docs/Http.Promise.Promise.html new file mode 100644 index 0000000..cd7dbb5 --- /dev/null +++ b/docs/Http.Promise.Promise.html @@ -0,0 +1,349 @@ + + + + + + + + Interface Http\Promise\Promise | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Http\Promise\Promise +

+ + + + +
+
+

Promise represents a value that may not be available yet, but will be resolved at some point in future. +It acts like a proxy to the actual value.

+

This interface is an extension of the promises/a+ specification.

+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Constants
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.AbstractApi.html b/docs/IPay.Api.AbstractApi.html new file mode 100644 index 0000000..a4ed654 --- /dev/null +++ b/docs/IPay.Api.AbstractApi.html @@ -0,0 +1,345 @@ + + + + + + + + Class IPay\Api\AbstractApi | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\AbstractApi +

+ +

<T is SessionInterface>

+ + + + + + +
abstract
+ +
+ +
+ +
+ Located at Api/AbstractApi.php
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Properties
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.AuthenticatedApi.html b/docs/IPay.Api.AuthenticatedApi.html new file mode 100644 index 0000000..61470be --- /dev/null +++ b/docs/IPay.Api.AuthenticatedApi.html @@ -0,0 +1,295 @@ + + + + + + + + Class IPay\Api\AuthenticatedApi | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\AuthenticatedApi +

+ + + + + + + + + + + +
extends +AbstractApi<AuthenticatedSession>
+ +
+ +
+ +
+ Located at Api/AuthenticatedApi.php
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from IPay\Api\AbstractApi
+__construct(), post(), createOptionsResolver(), getSession()
+ + + + + + + + + + + + + + + + + + + + +
Properties inherited from IPay\Api\AbstractApi
+$objectMapper, $iPayClient
+ + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.AuthenticatedSession.html b/docs/IPay.Api.AuthenticatedSession.html new file mode 100644 index 0000000..f0094db --- /dev/null +++ b/docs/IPay.Api.AuthenticatedSession.html @@ -0,0 +1,283 @@ + + + + + + + + Class IPay\Api\AuthenticatedSession | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\AuthenticatedSession +

+ + + + + + + + + + + +
final
extends +UnauthenticatedSession
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.BodyBuilder.html b/docs/IPay.Api.BodyBuilder.html new file mode 100644 index 0000000..507ff4b --- /dev/null +++ b/docs/IPay.Api.BodyBuilder.html @@ -0,0 +1,392 @@ + + + + + + + + Class IPay\Api\BodyBuilder | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\BodyBuilder +

+ + + + + + + + + + + + + + + +
final
extends +ArrayObject<string, string>
implements +Stringable, JsonSerializable
+ +
+ +
+ +
+ Located at Api/BodyBuilder.php
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from ArrayObject
+__construct(), offsetExists(), offsetGet(), offsetSet(), offsetUnset(), append(), getArrayCopy(), count(), getFlags(), setFlags(), asort(), ksort(), uasort(), uksort(), natsort(), natcasesort(), unserialize(), serialize(), __serialize(), __unserialize(), getIterator(), exchangeArray(), setIteratorClass(), getIteratorClass(), __debugInfo()
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.SessionInterface.html b/docs/IPay.Api.SessionInterface.html new file mode 100644 index 0000000..1b857a2 --- /dev/null +++ b/docs/IPay.Api.SessionInterface.html @@ -0,0 +1,214 @@ + + + + + + + + Interface IPay\Api\SessionInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface IPay\Api\SessionInterface +

+ + + + +
+ +
+ +
+ +
+ Located at Api/SessionInterface.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.UnauthenticatedApi.html b/docs/IPay.Api.UnauthenticatedApi.html new file mode 100644 index 0000000..e236efe --- /dev/null +++ b/docs/IPay.Api.UnauthenticatedApi.html @@ -0,0 +1,243 @@ + + + + + + + + Class IPay\Api\UnauthenticatedApi | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\UnauthenticatedApi +

+ + + + + + + + + + + +
extends +AbstractApi<UnauthenticatedSession>
+ +
+ +
+ + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from IPay\Api\AbstractApi
+__construct(), post(), createOptionsResolver(), getSession()
+ + + + + + + + + + + + + + + + + + + + +
Properties inherited from IPay\Api\AbstractApi
+$objectMapper, $iPayClient
+ + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Api.UnauthenticatedSession.html b/docs/IPay.Api.UnauthenticatedSession.html new file mode 100644 index 0000000..f2d7550 --- /dev/null +++ b/docs/IPay.Api.UnauthenticatedSession.html @@ -0,0 +1,225 @@ + + + + + + + + Class IPay\Api\UnauthenticatedSession | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Api\UnauthenticatedSession +

+ + + + + + + + + + + +
implements +SessionInterface
+ +
+ +
+ + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Encryption.Encrypter.html b/docs/IPay.Encryption.Encrypter.html new file mode 100644 index 0000000..675d06f --- /dev/null +++ b/docs/IPay.Encryption.Encrypter.html @@ -0,0 +1,156 @@ + + + + + + + + Class IPay\Encryption\Encrypter | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Encryption\Encrypter +

+ + + + + + + +
+ + +
+ Located at Encryption/Encrypter.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Entity.Account.html b/docs/IPay.Entity.Account.html new file mode 100644 index 0000000..17fe9d6 --- /dev/null +++ b/docs/IPay.Entity.Account.html @@ -0,0 +1,273 @@ + + + + + + + + Class IPay\Entity\Account | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Entity\Account +

+ + + + + + + +
readonly
+ + +
+ Located at Entity/Account.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Properties
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Entity.AccountState.html b/docs/IPay.Entity.AccountState.html new file mode 100644 index 0000000..bde4487 --- /dev/null +++ b/docs/IPay.Entity.AccountState.html @@ -0,0 +1,225 @@ + + + + + + + + Class IPay\Entity\AccountState | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Entity\AccountState +

+ + + + + + + +
readonly
+ + +
+ Located at Entity/Account.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Properties
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Entity.Customer.html b/docs/IPay.Entity.Customer.html new file mode 100644 index 0000000..e73ac35 --- /dev/null +++ b/docs/IPay.Entity.Customer.html @@ -0,0 +1,273 @@ + + + + + + + + Class IPay\Entity\Customer | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Entity\Customer +

+ + + + + + + +
readonly
+ + +
+ Located at Entity/Customer.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Properties
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Entity.Transaction.html b/docs/IPay.Entity.Transaction.html new file mode 100644 index 0000000..e816688 --- /dev/null +++ b/docs/IPay.Entity.Transaction.html @@ -0,0 +1,328 @@ + + + + + + + + Class IPay\Entity\Transaction | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Entity\Transaction +

+ + + + + + + +
readonly
+ + +
+ Located at Entity/Transaction.php
+
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Properties
+ + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Exception.LoginFailedException.html b/docs/IPay.Exception.LoginFailedException.html new file mode 100644 index 0000000..b055503 --- /dev/null +++ b/docs/IPay.Exception.LoginFailedException.html @@ -0,0 +1,201 @@ + + + + + + + + Class IPay\Exception\LoginFailedException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Exception\LoginFailedException +

+ + + + + + + + + + + +
extends +ErrorException
+ +
+ +
+ + + + + + + + + + + + +
Methods inherited from ErrorException
+__construct(), getSeverity()
+ + + + + + + + +
Methods inherited from Exception
+__wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Exception.SessionExpiredException.html b/docs/IPay.Exception.SessionExpiredException.html new file mode 100644 index 0000000..7e06691 --- /dev/null +++ b/docs/IPay.Exception.SessionExpiredException.html @@ -0,0 +1,174 @@ + + + + + + + + Class IPay\Exception\SessionExpiredException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Exception\SessionExpiredException +

+ + + + + + + + + + + +
extends +Exception
+ +
+
    +
  • +Exception + + implements + Throwable + +
      +
    • +IPay\Exception\SessionExpiredException + + +
    • +
    +
  • +
+
+ + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.Http.Plugin.ExceptionThrower.html b/docs/IPay.Http.Plugin.ExceptionThrower.html new file mode 100644 index 0000000..49827ec --- /dev/null +++ b/docs/IPay.Http.Plugin.ExceptionThrower.html @@ -0,0 +1,193 @@ + + + + + + + + Class IPay\Http\Plugin\ExceptionThrower | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\Http\Plugin\ExceptionThrower +

+ + + + + + + + + + + +
final
implements +Plugin
+ + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IPay.IPayClient.html b/docs/IPay.IPayClient.html new file mode 100644 index 0000000..2e2cc67 --- /dev/null +++ b/docs/IPay.IPayClient.html @@ -0,0 +1,234 @@ + + + + + + + + Class IPay\IPayClient | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class IPay\IPayClient +

+ + + + + + + +
final
+ + +
+ Located at IPayClient.php
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/InvalidArgumentException.html b/docs/InvalidArgumentException.html new file mode 100644 index 0000000..ec7649a --- /dev/null +++ b/docs/InvalidArgumentException.html @@ -0,0 +1,213 @@ + + + + + + + + Class InvalidArgumentException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class InvalidArgumentException +

+ + + + + + + + + + + +
extends +LogicException
+ + + +
+ +
+ + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Iterator.html b/docs/Iterator.html new file mode 100644 index 0000000..1724c3d --- /dev/null +++ b/docs/Iterator.html @@ -0,0 +1,322 @@ + + + + + + + + Interface Iterator | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Iterator +

+ + + + + + + + +
extends +Traversable
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/IteratorAggregate.html b/docs/IteratorAggregate.html new file mode 100644 index 0000000..4d0b25e --- /dev/null +++ b/docs/IteratorAggregate.html @@ -0,0 +1,208 @@ + + + + + + + + Interface IteratorAggregate | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface IteratorAggregate +

+ + + + + + + + +
extends +Traversable
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/JsonSerializable.html b/docs/JsonSerializable.html new file mode 100644 index 0000000..6022a8b --- /dev/null +++ b/docs/JsonSerializable.html @@ -0,0 +1,173 @@ + + + + + + + + Interface JsonSerializable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface JsonSerializable +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/LogicException.html b/docs/LogicException.html new file mode 100644 index 0000000..ed81584 --- /dev/null +++ b/docs/LogicException.html @@ -0,0 +1,216 @@ + + + + + + + + Class LogicException | API + + + + + +
+ +
+ +
+
+ +
+ + + + +
+ +
+ +
+ + diff --git a/docs/OutOfBoundsException.html b/docs/OutOfBoundsException.html new file mode 100644 index 0000000..ae26305 --- /dev/null +++ b/docs/OutOfBoundsException.html @@ -0,0 +1,196 @@ + + + + + + + + Class OutOfBoundsException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class OutOfBoundsException +

+ + + + + + + + + + + +
extends +RuntimeException
+ +
+ +
+ +
+ +
+ + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Client.ClientExceptionInterface.html b/docs/Psr.Http.Client.ClientExceptionInterface.html new file mode 100644 index 0000000..ecd7b5a --- /dev/null +++ b/docs/Psr.Http.Client.ClientExceptionInterface.html @@ -0,0 +1,196 @@ + + + + + + + + Interface Psr\Http\Client\ClientExceptionInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Client\ClientExceptionInterface +

+ + + + + + + + +
extends +Throwable
+
+

Every HTTP client related exception MUST implement this interface.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + +
Methods inherited from Throwable
+getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString()
+ + + + + + + + +
Methods inherited from Stringable
+__toString()
+ + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Client.ClientInterface.html b/docs/Psr.Http.Client.ClientInterface.html new file mode 100644 index 0000000..a3064d0 --- /dev/null +++ b/docs/Psr.Http.Client.ClientInterface.html @@ -0,0 +1,207 @@ + + + + + + + + Interface Psr\Http\Client\ClientInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Client\ClientInterface +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Message.MessageInterface.html b/docs/Psr.Http.Message.MessageInterface.html new file mode 100644 index 0000000..289e756 --- /dev/null +++ b/docs/Psr.Http.Message.MessageInterface.html @@ -0,0 +1,706 @@ + + + + + + + + Interface Psr\Http\Message\MessageInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Message\MessageInterface +

+ + + + +
+
+

HTTP messages consist of requests from a client to a server and responses +from a server to a client. This interface defines the methods common to +each.

+

Messages are considered immutable; all methods that might change state MUST +be implemented such that they retain the internal state of the current +message and return an instance that contains the changed state.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Message.RequestInterface.html b/docs/Psr.Http.Message.RequestInterface.html new file mode 100644 index 0000000..4e04423 --- /dev/null +++ b/docs/Psr.Http.Message.RequestInterface.html @@ -0,0 +1,470 @@ + + + + + + + + Interface Psr\Http\Message\RequestInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Message\RequestInterface +

+ + + + + + + + +
extends +MessageInterface
+
+

Representation of an outgoing, client-side request.

+

Per the HTTP specification, this interface includes properties for +each of the following:

+
    +
  • Protocol version
  • +
  • HTTP method
  • +
  • URI
  • +
  • Headers
  • +
  • Message body
  • +
+

During construction, implementations MUST attempt to set the Host header from +a provided URI if no Host header is provided.

+

Requests are considered immutable; all methods that might change state MUST +be implemented such that they retain the internal state of the current +message and return an instance that contains the changed state.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from Psr\Http\Message\MessageInterface
+getProtocolVersion(), withProtocolVersion(), getHeaders(), hasHeader(), getHeader(), getHeaderLine(), withHeader(), withAddedHeader(), withoutHeader(), getBody(), withBody()
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Message.ResponseInterface.html b/docs/Psr.Http.Message.ResponseInterface.html new file mode 100644 index 0000000..1c15073 --- /dev/null +++ b/docs/Psr.Http.Message.ResponseInterface.html @@ -0,0 +1,338 @@ + + + + + + + + Interface Psr\Http\Message\ResponseInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Message\ResponseInterface +

+ + + + + + + + +
extends +MessageInterface
+
+

Representation of an outgoing, server-side response.

+

Per the HTTP specification, this interface includes properties for +each of the following:

+
    +
  • Protocol version
  • +
  • Status code and reason phrase
  • +
  • Headers
  • +
  • Message body
  • +
+

Responses are considered immutable; all methods that might change state MUST +be implemented such that they retain the internal state of the current +message and return an instance that contains the changed state.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from Psr\Http\Message\MessageInterface
+getProtocolVersion(), withProtocolVersion(), getHeaders(), hasHeader(), getHeader(), getHeaderLine(), withHeader(), withAddedHeader(), withoutHeader(), getBody(), withBody()
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Message.StreamInterface.html b/docs/Psr.Http.Message.StreamInterface.html new file mode 100644 index 0000000..bd4cd48 --- /dev/null +++ b/docs/Psr.Http.Message.StreamInterface.html @@ -0,0 +1,751 @@ + + + + + + + + Interface Psr\Http\Message\StreamInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Message\StreamInterface +

+ + + + +
+
+

Describes a data stream.

+

Typically, an instance will wrap a PHP stream; this interface provides +a wrapper around the most common operations, including serialization of +the entire stream to a string.

+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Psr.Http.Message.UriInterface.html b/docs/Psr.Http.Message.UriInterface.html new file mode 100644 index 0000000..9a28826 --- /dev/null +++ b/docs/Psr.Http.Message.UriInterface.html @@ -0,0 +1,934 @@ + + + + + + + + Interface Psr\Http\Message\UriInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Psr\Http\Message\UriInterface +

+ + + + +
+
+

Value object representing a URI.

+

This interface is meant to represent URIs according to RFC 3986 and to +provide methods for most common operations. Additional functionality for +working with URIs can be provided on top of the interface or externally. +Its primary use is for HTTP requests, but may also be used in other +contexts.

+

Instances of this interface are considered immutable; all methods that +might change state MUST be implemented such that they retain the internal +state of the current instance and return an instance that contains the +changed state.

+

Typically the Host header will be also be present in the request message. +For server-side requests, the scheme will typically be discoverable in the +server parameters.

+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/RuntimeException.html b/docs/RuntimeException.html new file mode 100644 index 0000000..39549a6 --- /dev/null +++ b/docs/RuntimeException.html @@ -0,0 +1,195 @@ + + + + + + + + Class RuntimeException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class RuntimeException +

+ + + + + + + + + + + +
extends +Exception
+ + + +
+ +
+ + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/SeekableIterator.html b/docs/SeekableIterator.html new file mode 100644 index 0000000..de64847 --- /dev/null +++ b/docs/SeekableIterator.html @@ -0,0 +1,205 @@ + + + + + + + + Interface SeekableIterator | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface SeekableIterator +

+ + + + + + + + +
extends +Iterator
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from Iterator
+current(), next(), key(), valid(), rewind()
+ + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Serializable.html b/docs/Serializable.html new file mode 100644 index 0000000..0bf5b1b --- /dev/null +++ b/docs/Serializable.html @@ -0,0 +1,230 @@ + + + + + + + + Interface Serializable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Serializable +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Stringable.html b/docs/Stringable.html new file mode 100644 index 0000000..185ca19 --- /dev/null +++ b/docs/Stringable.html @@ -0,0 +1,363 @@ + + + + + + + + Interface Stringable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Stringable +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + +
Methods
+ + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.AccessException.html b/docs/Symfony.Component.OptionsResolver.Exception.AccessException.html new file mode 100644 index 0000000..c870e06 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.AccessException.html @@ -0,0 +1,260 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\AccessException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\AccessException +

+ + + + + + + + + + + + + + + +
extends +LogicException
implements +ExceptionInterface
+
+

Thrown when trying to read an option outside of or write it inside of +{@link \Symfony\Component\OptionsResolver\Options::resolve()}.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.ExceptionInterface.html b/docs/Symfony.Component.OptionsResolver.Exception.ExceptionInterface.html new file mode 100644 index 0000000..ac03e93 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.ExceptionInterface.html @@ -0,0 +1,274 @@ + + + + + + + + Interface Symfony\Component\OptionsResolver\Exception\ExceptionInterface | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Symfony\Component\OptionsResolver\Exception\ExceptionInterface +

+ + + + + + + + +
extends +Throwable
+
+

Marker interface for all exceptions thrown by the OptionsResolver component.

+
+
+ + + +
+ +
+ + + + + + + + + + +
Methods inherited from Throwable
+getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString()
+ + + + + + + + +
Methods inherited from Stringable
+__toString()
+ + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.InvalidArgumentException.html b/docs/Symfony.Component.OptionsResolver.Exception.InvalidArgumentException.html new file mode 100644 index 0000000..2f33623 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.InvalidArgumentException.html @@ -0,0 +1,294 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\InvalidArgumentException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\InvalidArgumentException +

+ + + + + + + + + + + + + + + +
extends +InvalidArgumentException
implements +ExceptionInterface
+
+

Thrown when an argument is invalid.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.InvalidOptionsException.html b/docs/Symfony.Component.OptionsResolver.Exception.InvalidOptionsException.html new file mode 100644 index 0000000..8a37e57 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.InvalidOptionsException.html @@ -0,0 +1,291 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\InvalidOptionsException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\InvalidOptionsException +

+ + + + + + + + + + + +
extends +InvalidArgumentException
+
+

Thrown when the value of an option does not match its validation rules.

+

You should make sure a valid value is passed to the option.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.MissingOptionsException.html b/docs/Symfony.Component.OptionsResolver.Exception.MissingOptionsException.html new file mode 100644 index 0000000..a0b2070 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.MissingOptionsException.html @@ -0,0 +1,291 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\MissingOptionsException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\MissingOptionsException +

+ + + + + + + + + + + +
extends +InvalidArgumentException
+
+

Exception thrown when a required option is missing.

+

Add the option to the passed options array.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.NoSuchOptionException.html b/docs/Symfony.Component.OptionsResolver.Exception.NoSuchOptionException.html new file mode 100644 index 0000000..b69ed56 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.NoSuchOptionException.html @@ -0,0 +1,281 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\NoSuchOptionException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\NoSuchOptionException +

+ + + + + + + + + + + + + + + +
extends +OutOfBoundsException
implements +ExceptionInterface
+
+

Thrown when trying to read an option that has no value set.

+

When accessing optional options from within a lazy option or normalizer you should first +check whether the optional option is set. You can do this with isset($options['optional']). +In contrast to the {@link UndefinedOptionsException}, this is a runtime exception that can +occur when evaluating lazy options.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.OptionDefinitionException.html b/docs/Symfony.Component.OptionsResolver.Exception.OptionDefinitionException.html new file mode 100644 index 0000000..0ea2ad1 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.OptionDefinitionException.html @@ -0,0 +1,259 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\OptionDefinitionException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\OptionDefinitionException +

+ + + + + + + + + + + + + + + +
extends +LogicException
implements +ExceptionInterface
+
+

Thrown when two lazy options have a cyclic dependency.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Exception.UndefinedOptionsException.html b/docs/Symfony.Component.OptionsResolver.Exception.UndefinedOptionsException.html new file mode 100644 index 0000000..e988bd9 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Exception.UndefinedOptionsException.html @@ -0,0 +1,292 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException +

+ + + + + + + + + + + +
extends +InvalidArgumentException
+
+

Exception thrown when an undefined option is passed.

+

You should remove the options in question from your code or define them +beforehand.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + +
Methods inherited from Exception
+__construct(), __wakeup(), getMessage(), getCode(), getFile(), getLine(), getTrace(), getPrevious(), getTraceAsString(), __toString()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.OptionConfigurator.html b/docs/Symfony.Component.OptionsResolver.OptionConfigurator.html new file mode 100644 index 0000000..650e184 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.OptionConfigurator.html @@ -0,0 +1,539 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\OptionConfigurator | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\OptionConfigurator +

+ + + + + + + +
final
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.Options.html b/docs/Symfony.Component.OptionsResolver.Options.html new file mode 100644 index 0000000..5d96d01 --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.Options.html @@ -0,0 +1,209 @@ + + + + + + + + Interface Symfony\Component\OptionsResolver\Options | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Symfony\Component\OptionsResolver\Options +

+ + + + + + + + +
extends +ArrayAccess, Countable
+
+

Contains resolved option values.

+
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + +
Methods inherited from ArrayAccess
+offsetExists(), offsetGet(), offsetSet(), offsetUnset()
+ + + + + + + + +
Methods inherited from Countable
+count()
+ + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Symfony.Component.OptionsResolver.OptionsResolver.html b/docs/Symfony.Component.OptionsResolver.OptionsResolver.html new file mode 100644 index 0000000..0ff224d --- /dev/null +++ b/docs/Symfony.Component.OptionsResolver.OptionsResolver.html @@ -0,0 +1,1662 @@ + + + + + + + + Class Symfony\Component\OptionsResolver\OptionsResolver | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Class Symfony\Component\OptionsResolver\OptionsResolver +

+ + + + + + + + + + + +
implements +Options
+
+

Validates options and merges them with default values.

+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Throwable.html b/docs/Throwable.html new file mode 100644 index 0000000..7ad68a9 --- /dev/null +++ b/docs/Throwable.html @@ -0,0 +1,553 @@ + + + + + + + + Interface Throwable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Throwable +

+ + + + + + + + +
extends +Stringable
+ +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods
+ + + + + + + +
Methods inherited from Stringable
+__toString()
+ + + + + + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/Traversable.html b/docs/Traversable.html new file mode 100644 index 0000000..23ef6e2 --- /dev/null +++ b/docs/Traversable.html @@ -0,0 +1,192 @@ + + + + + + + + Interface Traversable | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ Interface Traversable +

+ + + + +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+ + diff --git a/docs/assets/elements.js b/docs/assets/elements.js new file mode 100644 index 0000000..5c5b5dc --- /dev/null +++ b/docs/assets/elements.js @@ -0,0 +1 @@ +window.ApiGen?.resolveElements({"namespace":[["EventSauce","namespace-EventSauce.html"],["EventSauce\\ObjectHydrator","namespace-EventSauce.ObjectHydrator.html"],["Http","namespace-Http.html"],["Http\\Client","namespace-Http.Client.html"],["Http\\Client\\Common","namespace-Http.Client.Common.html"],["Http\\Promise","namespace-Http.Promise.html"],["IPay","namespace-IPay.html"],["IPay\\Api","namespace-IPay.Api.html"],["IPay\\Encryption","namespace-IPay.Encryption.html"],["IPay\\Entity","namespace-IPay.Entity.html"],["IPay\\Exception","namespace-IPay.Exception.html"],["IPay\\Http","namespace-IPay.Http.html"],["IPay\\Http\\Plugin","namespace-IPay.Http.Plugin.html"],["Psr","namespace-Psr.html"],["Psr\\Http","namespace-Psr.Http.html"],["Psr\\Http\\Client","namespace-Psr.Http.Client.html"],["Psr\\Http\\Message","namespace-Psr.Http.Message.html"],["Symfony","namespace-Symfony.html"],["Symfony\\Component","namespace-Symfony.Component.html"],["Symfony\\Component\\OptionsResolver","namespace-Symfony.Component.OptionsResolver.html"],["Symfony\\Component\\OptionsResolver\\Exception","namespace-Symfony.Component.OptionsResolver.Exception.html"],["","namespace-none.html"]],"classLike":[["ArrayAccess","ArrayAccess.html",{"method":[["offsetExists","_offsetExists"],["offsetGet","_offsetGet"],["offsetSet","_offsetSet"],["offsetUnset","_offsetUnset"]]}],["ArrayIterator","ArrayIterator.html",{"method":[["__construct","___construct"],["offsetExists","_offsetExists"],["offsetGet","_offsetGet"],["offsetSet","_offsetSet"],["offsetUnset","_offsetUnset"],["append","_append"],["getArrayCopy","_getArrayCopy"],["count","_count"],["getFlags","_getFlags"],["setFlags","_setFlags"],["asort","_asort"],["ksort","_ksort"],["uasort","_uasort"],["uksort","_uksort"],["natsort","_natsort"],["natcasesort","_natcasesort"],["unserialize","_unserialize"],["serialize","_serialize"],["__serialize","___serialize"],["__unserialize","___unserialize"],["rewind","_rewind"],["current","_current"],["key","_key"],["next","_next"],["valid","_valid"],["seek","_seek"],["__debugInfo","___debugInfo"]]}],["ArrayObject","ArrayObject.html",{"method":[["__construct","___construct"],["offsetExists","_offsetExists"],["offsetGet","_offsetGet"],["offsetSet","_offsetSet"],["offsetUnset","_offsetUnset"],["append","_append"],["getArrayCopy","_getArrayCopy"],["count","_count"],["getFlags","_getFlags"],["setFlags","_setFlags"],["asort","_asort"],["ksort","_ksort"],["uasort","_uasort"],["uksort","_uksort"],["natsort","_natsort"],["natcasesort","_natcasesort"],["unserialize","_unserialize"],["serialize","_serialize"],["__serialize","___serialize"],["__unserialize","___unserialize"],["getIterator","_getIterator"],["exchangeArray","_exchangeArray"],["setIteratorClass","_setIteratorClass"],["getIteratorClass","_getIteratorClass"],["__debugInfo","___debugInfo"]]}],["Closure","Closure.html",{"method":[["bind","_bind"],["bindTo","_bindTo"],["call","_call"],["fromCallable","_fromCallable"]]}],["Countable","Countable.html",{"method":[["count","_count"]]}],["DateInterval","DateInterval.html",{"method":[["__construct","___construct"],["createFromDateString","_createFromDateString"],["format","_format"],["__serialize","___serialize"],["__unserialize","___unserialize"],["__wakeup","___wakeup"],["__set_state","___set_state"]]}],["DateTime","DateTime.html",{"method":[["__construct","___construct"],["__serialize","___serialize"],["__unserialize","___unserialize"],["__wakeup","___wakeup"],["__set_state","___set_state"],["createFromImmutable","_createFromImmutable"],["createFromInterface","_createFromInterface"],["createFromFormat","_createFromFormat"],["getLastErrors","_getLastErrors"],["format","_format"],["modify","_modify"],["add","_add"],["sub","_sub"],["getTimezone","_getTimezone"],["setTimezone","_setTimezone"],["getOffset","_getOffset"],["setTime","_setTime"],["setDate","_setDate"],["setISODate","_setISODate"],["setTimestamp","_setTimestamp"],["getTimestamp","_getTimestamp"],["diff","_diff"]]}],["DateTimeImmutable","DateTimeImmutable.html",{"method":[["__construct","___construct"],["__serialize","___serialize"],["__unserialize","___unserialize"],["__wakeup","___wakeup"],["__set_state","___set_state"],["createFromFormat","_createFromFormat"],["getLastErrors","_getLastErrors"],["format","_format"],["getTimezone","_getTimezone"],["getOffset","_getOffset"],["getTimestamp","_getTimestamp"],["diff","_diff"],["modify","_modify"],["add","_add"],["sub","_sub"],["setTimezone","_setTimezone"],["setTime","_setTime"],["setDate","_setDate"],["setISODate","_setISODate"],["setTimestamp","_setTimestamp"],["createFromMutable","_createFromMutable"],["createFromInterface","_createFromInterface"]]}],["DateTimeInterface","DateTimeInterface.html",{"method":[["format","_format"],["getTimezone","_getTimezone"],["getOffset","_getOffset"],["getTimestamp","_getTimestamp"],["diff","_diff"],["__wakeup","___wakeup"],["__serialize","___serialize"],["__unserialize","___unserialize"]]}],["DateTimeZone","DateTimeZone.html",{"method":[["__construct","___construct"],["getName","_getName"],["getOffset","_getOffset"],["getTransitions","_getTransitions"],["getLocation","_getLocation"],["listAbbreviations","_listAbbreviations"],["listIdentifiers","_listIdentifiers"],["__serialize","___serialize"],["__unserialize","___unserialize"],["__wakeup","___wakeup"],["__set_state","___set_state"]]}],["ErrorException","ErrorException.html",{"method":[["__construct","___construct"],["getSeverity","_getSeverity"]]}],["EventSauce\\ObjectHydrator\\IterableList","EventSauce.ObjectHydrator.IterableList.html",{"method":[["__construct","___construct"],["getIterator","_getIterator"],["toArray","_toArray"]]}],["EventSauce\\ObjectHydrator\\ObjectMapper","EventSauce.ObjectHydrator.ObjectMapper.html",{"method":[["hydrateObject","_hydrateObject"],["hydrateObjects","_hydrateObjects"],["serializeObject","_serializeObject"],["serializeObjectOfType","_serializeObjectOfType"],["serializeObjects","_serializeObjects"]]}],["EventSauce\\ObjectHydrator\\UnableToHydrateObject","EventSauce.ObjectHydrator.UnableToHydrateObject.html",{"method":[["missingFields","_missingFields"],["stack","_stack"],["dueToError","_dueToError"],["dueToMissingFields","_dueToMissingFields"],["noHydrationDefined","_noHydrationDefined"],["classIsNotInstantiable","_classIsNotInstantiable"]]}],["EventSauce\\ObjectHydrator\\UnableToSerializeObject","EventSauce.ObjectHydrator.UnableToSerializeObject.html",{"method":[["dueToError","_dueToError"]]}],["Exception","Exception.html",{"method":[["__construct","___construct"],["__wakeup","___wakeup"],["getMessage","_getMessage"],["getCode","_getCode"],["getFile","_getFile"],["getLine","_getLine"],["getTrace","_getTrace"],["getPrevious","_getPrevious"],["getTraceAsString","_getTraceAsString"],["__toString","___toString"]]}],["Http\\Client\\Common\\HttpMethodsClientInterface","Http.Client.Common.HttpMethodsClientInterface.html",{"method":[["get","_get"],["head","_head"],["trace","_trace"],["post","_post"],["put","_put"],["patch","_patch"],["delete","_delete"],["options","_options"],["send","_send"]]}],["Http\\Client\\Common\\Plugin","Http.Client.Common.Plugin.html",{"method":[["handleRequest","_handleRequest"]]}],["Http\\Client\\Exception","Http.Client.Exception.html",[]],["Http\\Client\\HttpClient","Http.Client.HttpClient.html",[]],["Http\\Promise\\Promise","Http.Promise.Promise.html",{"constant":[["PENDING","PENDING"],["FULFILLED","FULFILLED"],["REJECTED","REJECTED"]],"method":[["then","_then"],["getState","_getState"],["wait","_wait"]]}],["InvalidArgumentException","InvalidArgumentException.html",[]],["IPay\\Api\\AbstractApi","IPay.Api.AbstractApi.html",{"property":[["objectMapper","$objectMapper"],["iPayClient","$iPayClient"]],"method":[["__construct","___construct"],["post","_post"],["createOptionsResolver","_createOptionsResolver"],["getSession","_getSession"]]}],["IPay\\Api\\AuthenticatedApi","IPay.Api.AuthenticatedApi.html",{"method":[["customer","_customer"],["accounts","_accounts"],["historyTransactions","_historyTransactions"]]}],["IPay\\Api\\AuthenticatedSession","IPay.Api.AuthenticatedSession.html",{"method":[["__construct","___construct"],["getRequestParameters","_getRequestParameters"],["getSessionId","_getSessionId"]]}],["IPay\\Api\\BodyBuilder","IPay.Api.BodyBuilder.html",{"method":[["from","_from"],["enhance","_enhance"],["build","_build"],["encrypt","_encrypt"],["__toString","___toString"],["jsonSerialize","_jsonSerialize"]]}],["IPay\\Api\\SessionInterface","IPay.Api.SessionInterface.html",{"method":[["getRequestParameters","_getRequestParameters"]]}],["IPay\\Api\\UnauthenticatedApi","IPay.Api.UnauthenticatedApi.html",{"method":[["login","_login"]]}],["IPay\\Api\\UnauthenticatedSession","IPay.Api.UnauthenticatedSession.html",{"method":[["getRequestParameters","_getRequestParameters"]]}],["IPay\\Encryption\\Encrypter","IPay.Encryption.Encrypter.html",{"method":[["encrypt","_encrypt"]]}],["IPay\\Entity\\Account","IPay.Entity.Account.html",{"property":[["title","$title"],["number","$number"],["currencyCode","$currencyCode"],["accountState","$accountState"]],"method":[["__construct","___construct"]]}],["IPay\\Entity\\AccountState","IPay.Entity.AccountState.html",{"property":[["availableBalance","$availableBalance"],["balance","$balance"]],"method":[["__construct","___construct"]]}],["IPay\\Entity\\Customer","IPay.Entity.Customer.html",{"property":[["name","$name"],["phone","$phone"],["job","$job"],["accountNumber","$accountNumber"]],"method":[["__construct","___construct"]]}],["IPay\\Entity\\Transaction","IPay.Entity.Transaction.html",{"property":[["currency","$currency"],["amount","$amount"],["remark","$remark"],["corresponsiveAccount","$corresponsiveAccount"],["corresponsiveName","$corresponsiveName"],["processDate","$processDate"]],"method":[["__construct","___construct"]]}],["IPay\\Exception\\LoginFailedException","IPay.Exception.LoginFailedException.html",[]],["IPay\\Exception\\SessionExpiredException","IPay.Exception.SessionExpiredException.html",[]],["IPay\\Http\\Plugin\\ExceptionThrower","IPay.Http.Plugin.ExceptionThrower.html",{"method":[["handleRequest","_handleRequest"]]}],["IPay\\IPayClient","IPay.IPayClient.html",{"method":[["create","_create"],["getClient","_getClient"],["guest","_guest"],["session","_session"]]}],["Iterator","Iterator.html",{"method":[["current","_current"],["next","_next"],["key","_key"],["valid","_valid"],["rewind","_rewind"]]}],["IteratorAggregate","IteratorAggregate.html",{"method":[["getIterator","_getIterator"]]}],["JsonSerializable","JsonSerializable.html",{"method":[["jsonSerialize","_jsonSerialize"]]}],["LogicException","LogicException.html",[]],["OutOfBoundsException","OutOfBoundsException.html",[]],["Psr\\Http\\Client\\ClientExceptionInterface","Psr.Http.Client.ClientExceptionInterface.html",[]],["Psr\\Http\\Client\\ClientInterface","Psr.Http.Client.ClientInterface.html",{"method":[["sendRequest","_sendRequest"]]}],["Psr\\Http\\Message\\MessageInterface","Psr.Http.Message.MessageInterface.html",{"method":[["getProtocolVersion","_getProtocolVersion"],["withProtocolVersion","_withProtocolVersion"],["getHeaders","_getHeaders"],["hasHeader","_hasHeader"],["getHeader","_getHeader"],["getHeaderLine","_getHeaderLine"],["withHeader","_withHeader"],["withAddedHeader","_withAddedHeader"],["withoutHeader","_withoutHeader"],["getBody","_getBody"],["withBody","_withBody"]]}],["Psr\\Http\\Message\\RequestInterface","Psr.Http.Message.RequestInterface.html",{"method":[["getRequestTarget","_getRequestTarget"],["withRequestTarget","_withRequestTarget"],["getMethod","_getMethod"],["withMethod","_withMethod"],["getUri","_getUri"],["withUri","_withUri"]]}],["Psr\\Http\\Message\\ResponseInterface","Psr.Http.Message.ResponseInterface.html",{"method":[["getStatusCode","_getStatusCode"],["withStatus","_withStatus"],["getReasonPhrase","_getReasonPhrase"]]}],["Psr\\Http\\Message\\StreamInterface","Psr.Http.Message.StreamInterface.html",{"method":[["__toString","___toString"],["close","_close"],["detach","_detach"],["getSize","_getSize"],["tell","_tell"],["eof","_eof"],["isSeekable","_isSeekable"],["seek","_seek"],["rewind","_rewind"],["isWritable","_isWritable"],["write","_write"],["isReadable","_isReadable"],["read","_read"],["getContents","_getContents"],["getMetadata","_getMetadata"]]}],["Psr\\Http\\Message\\UriInterface","Psr.Http.Message.UriInterface.html",{"method":[["getScheme","_getScheme"],["getAuthority","_getAuthority"],["getUserInfo","_getUserInfo"],["getHost","_getHost"],["getPort","_getPort"],["getPath","_getPath"],["getQuery","_getQuery"],["getFragment","_getFragment"],["withScheme","_withScheme"],["withUserInfo","_withUserInfo"],["withHost","_withHost"],["withPort","_withPort"],["withPath","_withPath"],["withQuery","_withQuery"],["withFragment","_withFragment"],["__toString","___toString"]]}],["RuntimeException","RuntimeException.html",[]],["SeekableIterator","SeekableIterator.html",{"method":[["seek","_seek"]]}],["Serializable","Serializable.html",{"method":[["serialize","_serialize"],["unserialize","_unserialize"]]}],["Stringable","Stringable.html",{"method":[["__toString","___toString"]]}],["Symfony\\Component\\OptionsResolver\\Exception\\AccessException","Symfony.Component.OptionsResolver.Exception.AccessException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface","Symfony.Component.OptionsResolver.Exception.ExceptionInterface.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException","Symfony.Component.OptionsResolver.Exception.InvalidArgumentException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException","Symfony.Component.OptionsResolver.Exception.InvalidOptionsException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException","Symfony.Component.OptionsResolver.Exception.MissingOptionsException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException","Symfony.Component.OptionsResolver.Exception.NoSuchOptionException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException","Symfony.Component.OptionsResolver.Exception.OptionDefinitionException.html",[]],["Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException","Symfony.Component.OptionsResolver.Exception.UndefinedOptionsException.html",[]],["Symfony\\Component\\OptionsResolver\\OptionConfigurator","Symfony.Component.OptionsResolver.OptionConfigurator.html",{"method":[["__construct","___construct"],["allowedTypes","_allowedTypes"],["allowedValues","_allowedValues"],["default","_default"],["define","_define"],["deprecated","_deprecated"],["normalize","_normalize"],["required","_required"],["info","_info"],["ignoreUndefined","_ignoreUndefined"]]}],["Symfony\\Component\\OptionsResolver\\Options","Symfony.Component.OptionsResolver.Options.html",[]],["Symfony\\Component\\OptionsResolver\\OptionsResolver","Symfony.Component.OptionsResolver.OptionsResolver.html",{"method":[["setDefault","_setDefault"],["setDefaults","_setDefaults"],["hasDefault","_hasDefault"],["setRequired","_setRequired"],["isRequired","_isRequired"],["getRequiredOptions","_getRequiredOptions"],["isMissing","_isMissing"],["getMissingOptions","_getMissingOptions"],["setDefined","_setDefined"],["isDefined","_isDefined"],["getDefinedOptions","_getDefinedOptions"],["isNested","_isNested"],["setDeprecated","_setDeprecated"],["isDeprecated","_isDeprecated"],["setNormalizer","_setNormalizer"],["addNormalizer","_addNormalizer"],["setAllowedValues","_setAllowedValues"],["addAllowedValues","_addAllowedValues"],["setAllowedTypes","_setAllowedTypes"],["addAllowedTypes","_addAllowedTypes"],["define","_define"],["setInfo","_setInfo"],["getInfo","_getInfo"],["setPrototype","_setPrototype"],["isPrototype","_isPrototype"],["remove","_remove"],["clear","_clear"],["resolve","_resolve"],["offsetGet","_offsetGet"],["offsetExists","_offsetExists"],["offsetSet","_offsetSet"],["offsetUnset","_offsetUnset"],["count","_count"],["setIgnoreUndefined","_setIgnoreUndefined"]]}],["Throwable","Throwable.html",{"method":[["getMessage","_getMessage"],["getCode","_getCode"],["getFile","_getFile"],["getLine","_getLine"],["getTrace","_getTrace"],["getPrevious","_getPrevious"],["getTraceAsString","_getTraceAsString"]]}],["Traversable","Traversable.html",[]]],"function":[["ipay","function-ipay.html"]]}) \ No newline at end of file diff --git a/docs/assets/main.css b/docs/assets/main.css new file mode 100644 index 0000000..a43a751 --- /dev/null +++ b/docs/assets/main.css @@ -0,0 +1,569 @@ +/* variables */ +:root { + --font-family-text: Verdana, Geneva CE, lucida, sans-serif; + --font-family-heading: Trebuchet MS, Geneva CE, lucida, sans-serif; + --font-family-code: Consolas, monospace; + --color-heading-dark: #053368; + --color-heading-light: #1e5eb6; + --color-link: #006aeb; + --color-selected: #fffbdd; + --border-color: #cccccc; + --background-color: #ecede5; +} + + +/* reset */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +body, +h1, +h2, +h3, +h4, +p, +pre, +ul, +ol, +li, +td, +th { + margin: 0; + padding: 0; +} + +table { + border-collapse: collapse; +} + +ul, ol { + list-style: none; +} + + +/* base */ +body { + min-height: 100vh; + font: 13px/1.5 var(--font-family-text); + background: #ffffff; + color: #333333; +} + +h1, h2, h3, h4 { + font-family: var(--font-family-heading); + color: var(--color-heading-dark); +} + +h1 { + color: var(--color-heading-light); + font-size: 230%; + font-weight: normal; + margin-top: .3em; +} + +h2 { + color: var(--color-heading-light); + font-size: 150%; + font-weight: normal; + margin-top: .3em; +} + +h1 + h2 { + margin-top: 0; +} + +h3 { + font-size: 1.6em; + font-weight: normal; + margin-bottom: 2px; + margin-top: 1em; +} + +h4 { + font-size: 100%; + font-weight: bold; + padding: 0; + margin-top: 1em; +} + +h4 + * { + margin-left: 1em; +} + +a { + color: var(--color-link); + padding: 3px 1px; + text-decoration: none; +} + +h1 a { + color: var(--color-heading-light); +} + +a:hover, a:active, a:focus, a:hover b, a:hover var { + background-color: var(--color-link); + color: #ffffff !important; +} + +code, var, pre { + font-family: var(--font-family-code); + tab-size: 4; + white-space: pre-wrap; +} + +code.nowrap { + white-space: nowrap; +} + +var, var a { + font-weight: bold; + font-style: normal; + color: #ca8a04; +} + +var a:hover { + background-color: #ca8a04; + color: white; +} + +code a b { + color: #000000; +} + +.deprecated { + text-decoration: line-through; + opacity: 50%; +} + + +/* classLikeDescription */ +.classLikeDescription { + margin-top: 1em; + border: 1px solid var(--border-color); + background-color: var(--background-color); + padding: 10px; +} + + +/* classLikeSection */ +.classLikeSection { + margin-top: 1em; +} + + +/* classLikeSignatureTable */ +.classLikeSignatureTable { + font-size: 16px; +} + +.classLikeSignatureTable th { + font-weight: normal; + text-align: left; + color: var(--color-heading-dark); + vertical-align: top; + padding-right: 12px; +} + + +/* classTree */ +.classTree .classTree li { + position: relative; + margin-left: 19px; + border-left: 1px solid black; + padding-left: 10px; +} + +.classTree .classTree li:last-child { + border-left-color: transparent; +} + +.classTree .classTree li::before { + content: ''; + position: absolute; + left: -1px; + width: 10px; + height: 10px; + border-left: 1px solid black; + border-bottom: 1px solid black; +} + + +/* description */ +.description *:first-child { + margin-top: 0; +} + +.description p { + margin-top: 1em; + padding: 0; +} + +.description ul { + margin-top: 1em; + padding-left: 2em; + list-style-type: disc; +} + + +/* expandable */ +.expandable.collapsed:not(:target) .expandable-expandedView, +.expandable:not(.collapsed:not(:target)) .expandable-collapsedView { + display: none; +} + + +/* elementSummary */ +.elementSummary .table-cell:first-child { + width: 200px; +} + + +/* layout */ +.layout { + display: flex; + flex-direction: row; +} + +.layout-aside { + width: 300px; + position: fixed; + top: 0; + bottom: 0; + overflow-y: auto; + scrollbar-width: none; + background-color: white; + border-right: 1px solid var(--border-color); +} + +.layout-aside::-webkit-scrollbar { + width: 0; + height: 0; +} + +.layout-main { + flex: 1 1 0; + display: flex; + flex-direction: column; + min-width: calc(min(1300px, 100%) - 300px); + max-width: fit-content; + margin-left: 300px; + margin-right: 0; +} + +.layout-content { + flex: 1 1 0; + padding: 0 20px; +} + +.layout-footer { + margin: 20px auto; + padding: 0 20px; + color: #929292; +} + +.layout-rest { + flex: 1 1 0; +} + +.layout-rest > .navbar { + height: 40px; +} + +/* menu */ +.menu { + display: flex; + flex-direction: column; + gap: 20px; + padding: 10px; +} + +.menu ul ul { + padding-left: 10px; +} + +.menu li { + white-space: nowrap; +} + +.menu a { + display: block; + padding: 0 2px; +} + +.menu .active > a { + color: #333333; + background: none; + font-weight: bold; +} + +.menu .active > a:hover, +.menu .active > a:active, +.menu .active > a:focus { + background-color: var(--color-link); +} + +.menu-section > *:first-child { + margin-top: 0; +} + + +/* navbar */ +.navbar { + display: flex; + flex-direction: row; + justify-content: space-between; + flex-wrap: wrap; + align-items: center; + gap: 10px 20px; + padding: 4px 8px 4px 8px; + border-bottom: 1px solid var(--border-color); + background-color: var(--background-color); + font-size: 14px; +} + +.navbar-links { + display: flex; + flex-direction: row; + align-items: center; + gap: 8px; + font-family: var(--font-family-heading); + font-weight: bold; +} + +.navbar-links li.active { + background-color: var(--color-heading-dark); + color: white; +} + +.navbar-links li > * { + display: block; + padding: 6px 6px; + line-height: 1; +} + +.navbar-links li > a { + color: inherit; +} + +.navbar-links li > span { + cursor: default; + color: #888; +} + +.navbar-right { + flex: 0 1 300px; +} + + +/* php */ +.php-tag { + color: #ff0000; + font-weight: bold; +} + +.php-kw { + color: #e71818; + font-weight: bold; +} + +.php-var { + color: #d59401; + font-weight: bold; +} + +.php-num { + color: #cd0673; +} + +.php-str { + color: #008000; +} + +.php-comment { + color: #929292; +} + + +/* search */ +.search { + position: relative; +} + +.search-input { + display: flex; + width: 100%; + border: 1px solid var(--border-color); + border-radius: 0; + padding: 6px; + outline: none; + font-family: inherit; + font-size: inherit; + line-height: 1; +} + +.search-input:focus { + border-color: var(--color-heading-dark); +} + +.search-results { + display: none; + position: absolute; + top: 30px; + width: fit-content; + min-width: 100%; + max-width: calc(100vw - 16px); + overflow: hidden; + background-color: white; + border: 1px solid #888; + z-index: 1; +} + +.search:focus-within .search-results:not(:empty) { + display: block; +} + +.search-results a { + display: block; + color: inherit; + padding: 0 8px; +} + +.search-results li:hover, .search-results li.active { + background-color: var(--color-link); + color: white; +} + + +/* source */ +.source { + font-family: var(--font-family-code); + tab-size: 4; + white-space: pre-wrap; + width: 100%; +} + +.source td:first-child { + width: 0; + white-space: pre; +} + +.source td { + vertical-align: top; +} + +.source-line.selected { + background: var(--color-selected); +} + +.source-lineNum { + user-select: none; + padding-left: 2px; + color: #c0c0c0; +} + +.source-lineNum:hover, .source-lineNum:active, .source-lineNum:focus { + background: transparent; + color: #c0c0c0 !important; +} + + +/* table */ +.table { + width: min-content; + min-width: 100%; + margin: 1.2em 0 2.4em; +} + +.table-heading { + border: 1px solid var(--border-color); + padding: 3px 5px; + background: var(--background-color); + color: var(--color-heading-dark); + font-family: var(--font-family-heading); + font-size: 1.2em; + font-weight: bold; + text-align: left; +} + +.table-heading.sortable { + cursor: pointer; + background-image: url(data:image/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAJAQMAAADnzfU1AAAABlBMVEUAAAAjLTCZnys1AAAAAXRSTlMAQObYZgAAAB5JREFUCNdjYFBgYGAoAOIfDAyMfxiAAEr/AIuD5AFa2gULVBsRKgAAAABJRU5ErkJggg==); + background-position: center right; + background-repeat: no-repeat; +} + +.table-cell, +.table-anchor { + margin: 0; + border: 1px solid var(--border-color); + padding: 3px 10px; + vertical-align: top; +} + +.table-cell:not(:last-child) { + border-right: none; +} + +.table-shrink { + width: 1px; +} + +.table-anchor { + width: 1px; + padding: 3px 6px 3px 0; + border-left: none; +} + +.table-anchor > a { + padding: 0; +} + +.table-spacer { + height: 30px; + background: transparent !important; +} + +.table tr:hover td { + background-color: #f6f6f4; +} + +.table tr:target td { + background-color: var(--color-selected); +} + + +/* mobile */ +@media (max-width: 980px) { + .layout { + flex-direction: column; + } + + .layout-aside { + position: static; + border-right: none; + width: auto; + } + + .layout-rest { + display: none; + } + + .layout-main { + min-width: 100%; + margin-left: 0; + flex-grow: 0; + order: -1; + } + + .menu { + flex-direction: row; + flex-wrap: wrap; + } + + .menu-section { + flex: 1 1 200px; + } +} diff --git a/docs/assets/main.js b/docs/assets/main.js new file mode 100644 index 0000000..6ab1e35 --- /dev/null +++ b/docs/assets/main.js @@ -0,0 +1,243 @@ +// open details +document.querySelectorAll('.expandable').forEach(el => { + el.addEventListener('click', e => { + e.currentTarget.classList.toggle('collapsed') + }) +}) + + +// table sort +document.querySelectorAll('.sortable').forEach(el => { + const table = el.closest('table') + const items = Array.from(table.querySelectorAll('[data-order]')) + let orderBy = 'order' + + items.forEach((item, i) => { + item.dataset.orderNatural = i.toString(10).padStart(3, '0') + }) + + el.addEventListener('click', () => { + items.sort((a, b) => a.dataset[orderBy].localeCompare(b.dataset[orderBy])) + table.append(...items) + orderBy = orderBy === 'order' ? 'orderNatural' : 'order' + }) +}) + + +// search +document.querySelectorAll('.search').forEach(el => { + function tokenize(s, offset = 0) { + return Array.from(s.matchAll(/[A-Z]{2,}|[a-zA-Z][a-z]*|\S/g)).map(it => ([it.index + offset, it[0].toLowerCase()])) + } + + function prefix(a, aa, b, bb) { + let len = 0 + while (aa < a.length && bb < b.length && a[aa++] === b[bb++]) len++ + return len + } + + function matchTokens(elementTokens, queryTokens, i = 0, ii = 0, j = 0, jj = 0) { + if (i === queryTokens.length) { + return [] + + } else if (j === elementTokens.length) { + return null + } + + const [elementOffset, elementToken] = elementTokens[j] + const [, queryToken] = queryTokens[i] + const prefixLength = prefix(queryToken, ii, elementToken, jj) + + const subMatches = ii + prefixLength === queryToken.length + ? matchTokens(elementTokens, queryTokens, i + 1, 0, j, jj + prefixLength) + : jj + prefixLength === elementToken.length + ? matchTokens(elementTokens, queryTokens, i, ii + prefixLength, j + 1, 0) + : null + + return subMatches + ? [[elementOffset + jj, prefixLength], ...subMatches] + : matchTokens(elementTokens, queryTokens, i, ii, j + 1, 0) + } + + function* getResults(query, dataset) { + const queryTokens = tokenize(query) + + for (const [name, path, tokens] of dataset) { + const matches = matchTokens(tokens, queryTokens) + yield* matches !== null ? [[name, path, matches]] : [] + } + } + + function* iteratorSlice(it, length) { + while (length--) { + const item = it.next() + + if (item.done) { + return + } + + yield item.value + } + } + + function* iteratorMap(it, fn) { + for (const item of it) { + yield fn(item) + } + } + + function renderResult([name, path, matches]) { + const li = document.createElement('li') + const anchor = li.appendChild(document.createElement('a')) + anchor.href = path + + let i = 0 + for (const [matchOffset, matchLength] of matches) { + anchor.append(name.slice(i, matchOffset)) + anchor.appendChild(document.createElement('b')).innerText = name.slice(matchOffset, matchOffset + matchLength) + i = matchOffset + matchLength + } + + if (i < name.length) { + anchor.append(name.slice(i)) + } + + return li + } + + const searchInput = el.querySelector('.search-input') + const resultsDiv = el.querySelector('.search-results') + + let dataset = null + let datasetPromise = null + let resultIterator = [][Symbol.iterator]() + let resultNext = resultIterator.next() + let resultItems = [] + let headIndex = 0 + let activeIndex = 0 + + const VISIBLE_COUNT = 20 + + searchInput.addEventListener('input', async () => { + dataset ??= await (datasetPromise ??= new Promise(resolve => { + const script = document.createElement('script') + script.src = el.dataset.elements + document.head.appendChild(script) + window.ApiGen ??= {} + window.ApiGen.resolveElements = (elements) => { + const unified = [ + ...(elements.namespace ?? []).map(([name, path]) => [name, path, tokenize(name)]), + ...(elements.function ?? []).map(([name, path]) => [name, path, tokenize(name)]), + ...(elements.classLike ?? []).flatMap(([classLikeName, path, members]) => [ + [classLikeName, path, tokenize(classLikeName)], + ...(members.constant ?? []).map(([constantName, anchor]) => [`${classLikeName}::${constantName}`, `${path}#${anchor}`, tokenize(`${constantName}`, classLikeName.length + 2)]), + ...(members.property ?? []).map(([propertyName, anchor]) => [`${classLikeName}::\$${propertyName}`, `${path}#${anchor}`, tokenize(`\$${propertyName}`, classLikeName.length + 2)]), + ...(members.method ?? []).map(([methodName, anchor]) => [`${classLikeName}::${methodName}()`, `${path}#${anchor}`, tokenize(`${methodName}()`, classLikeName.length + 2)]), + ]), + ] + + resolve(unified.sort((a, b) => a[0].localeCompare(b[0]))) + } + })) + + resultIterator = iteratorMap(getResults(searchInput.value, dataset), renderResult) + resultItems = Array.from(iteratorSlice(resultIterator, VISIBLE_COUNT)) + resultNext = resultIterator.next() + resultsDiv.replaceChildren(...resultItems) + headIndex = 0 + activeIndex = 0 + resultItems[activeIndex]?.classList.add('active') + }) + + searchInput.addEventListener('keydown', e => { + if (e.key === 'Escape') { + searchInput.blur() + + } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') { + e.preventDefault() + let nextIndex = activeIndex + { ArrowUp: -1, ArrowDown: +1 }[e.key] + + if (nextIndex < 0) { + while (!resultNext.done) { + resultItems.push(resultNext.value) + resultNext = resultIterator.next() + } + + } else if (nextIndex === resultItems.length) { + if (!resultNext.done) { + resultItems.push(resultNext.value) + resultNext = resultIterator.next() + } + } + + nextIndex = (nextIndex + resultItems.length) % resultItems.length + headIndex = Math.max(headIndex, 0, nextIndex - VISIBLE_COUNT + 1) + headIndex = Math.min(headIndex, nextIndex) + + resultsDiv.replaceChildren(...resultItems.slice(headIndex, headIndex + VISIBLE_COUNT)) + resultItems[activeIndex]?.classList.remove('active') + resultItems[nextIndex]?.classList.add('active') + activeIndex = nextIndex + + } else if (e.key === 'Enter') { + e.preventDefault() + const active = resultsDiv.querySelector('.active') ?? resultsDiv.firstElementChild + active?.querySelector('a').click() + } + }) +}) + + +// line selection +let ranges = [] +let last = null +const match = window.location.hash.slice(1).match(/^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$/) + +const handleLinesSelectionChange = () => { + history.replaceState({}, '', '#' + ranges.map(([a, b]) => a === b ? a : `${a}-${b}`).join(',')) + document.querySelectorAll('.source-line.selected').forEach(el => el.classList.remove('selected')) + + for (let [a, b] of ranges) { + for (let i = a; i <= b; i++) { + document.getElementById(`${i}`).classList.add('selected') + } + } +} + +if (match) { + ranges = match[0].split(',').map(range => range.split('-').map(n => Number.parseInt(n))) + ranges = ranges.map(([a, b]) => b === undefined ? [a, a] : [a, b]) + ranges = ranges.filter(([a, b]) => a <= b) + handleLinesSelectionChange() + + const first = Math.max(1, Math.min(...ranges.flat()) - 3) + requestAnimationFrame(() => document.getElementById(`${first}`).scrollIntoView()) +} + +document.querySelectorAll('.source-lineNum').forEach(a => { + a.addEventListener('click', e => { + e.preventDefault() + const line = e.currentTarget.closest('tr') + const n = Number.parseInt(line.id) + const selected = line.classList.contains('selected') && e.ctrlKey + const extending = e.shiftKey && ranges.length > 0 + + if (!e.ctrlKey) { + ranges = extending ? [ranges[ranges.length - 1]] : [] + } + + if (extending) { + ranges[ranges.length - 1] = [Math.min(n, last), Math.max(n, last)] + + } else if (selected) { + ranges = ranges.flatMap(([a, b]) => (a <= n && n <= b) ? [[a, n - 1], [n + 1, b]] : [[a, b]]) + ranges = ranges.filter(([a, b]) => a <= b) + + } else { + ranges[ranges.length] = [n, n] + last = n + } + + handleLinesSelectionChange() + }) +}) diff --git a/docs/function-ipay.html b/docs/function-ipay.html new file mode 100644 index 0000000..d89ae1c --- /dev/null +++ b/docs/function-ipay.html @@ -0,0 +1,119 @@ + + + + + + + + ipay | API + + + + + +
+ +
+ +
+
+ +
+ +
+

+ipay

+ + + +
+ Located at functions.php +
+ + + + + + + + + + +
Returns
+ IPayClient +
+ +
+ + +
+ +
+ +
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..6936ea2 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,123 @@ + + + + + + + + API + + + + + +
+ +
+ +
+
+ +
+ +
+

API documentation

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Namespaces
IPay
IPay\Api
IPay\Encryption
IPay\Entity
IPay\Exception
IPay\Http
IPay\Http\Plugin
none
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-EventSauce.ObjectHydrator.html b/docs/namespace-EventSauce.ObjectHydrator.html new file mode 100644 index 0000000..26d700e --- /dev/null +++ b/docs/namespace-EventSauce.ObjectHydrator.html @@ -0,0 +1,174 @@ + + + + + + + + Namespace EventSauce\ObjectHydrator | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace EventSauce\ObjectHydrator

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes
IterableList
Interfaces
ObjectMapper
Exceptions
UnableToHydrateObject
UnableToSerializeObject
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-EventSauce.html b/docs/namespace-EventSauce.html new file mode 100644 index 0000000..d2619e1 --- /dev/null +++ b/docs/namespace-EventSauce.html @@ -0,0 +1,107 @@ + + + + + + + + Namespace EventSauce | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace EventSauce

+ + + + + + + + + + + + + +
Namespaces
EventSauce\ObjectHydrator
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Http.Client.Common.html b/docs/namespace-Http.Client.Common.html new file mode 100644 index 0000000..9b027fb --- /dev/null +++ b/docs/namespace-Http.Client.Common.html @@ -0,0 +1,136 @@ + + + + + + + + Namespace Http\Client\Common | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Http\Client\Common

+ + + + + + + + + + + + + + + + + + +
Interfaces
HttpMethodsClientInterfaceConvenience HTTP client that integrates the MessageFactory in order to send +requests in the following form:.
PluginA plugin is a middleware to transform the request and/or the response.
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Http.Client.html b/docs/namespace-Http.Client.html new file mode 100644 index 0000000..cfc05a1 --- /dev/null +++ b/docs/namespace-Http.Client.html @@ -0,0 +1,143 @@ + + + + + + + + Namespace Http\Client | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Http\Client

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Interfaces
ExceptionEvery HTTP Client related Exception must implement this interface.
HttpClient{@inheritdoc}
Namespaces
Http\Client\Common
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Http.Promise.html b/docs/namespace-Http.Promise.html new file mode 100644 index 0000000..c0206be --- /dev/null +++ b/docs/namespace-Http.Promise.html @@ -0,0 +1,122 @@ + + + + + + + + Namespace Http\Promise | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Http\Promise

+ + + + + + + + + + + + + + +
Interfaces
PromisePromise represents a value that may not be available yet, but will be resolved at some point in future. +It acts like a…
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Http.html b/docs/namespace-Http.html new file mode 100644 index 0000000..1e45b3f --- /dev/null +++ b/docs/namespace-Http.html @@ -0,0 +1,110 @@ + + + + + + + + Namespace Http | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Http

+ + + + + + + + + + + + + + + + +
Namespaces
Http\Client
Http\Promise
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Api.html b/docs/namespace-IPay.Api.html new file mode 100644 index 0000000..0c9251d --- /dev/null +++ b/docs/namespace-IPay.Api.html @@ -0,0 +1,180 @@ + + + + + + + + Namespace IPay\Api | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Api

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes
AbstractApi
AuthenticatedApi
AuthenticatedSession
BodyBuilder
UnauthenticatedApi
UnauthenticatedSession
Interfaces
SessionInterface
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Encryption.html b/docs/namespace-IPay.Encryption.html new file mode 100644 index 0000000..9d50d02 --- /dev/null +++ b/docs/namespace-IPay.Encryption.html @@ -0,0 +1,113 @@ + + + + + + + + Namespace IPay\Encryption | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Encryption

+ + + + + + + + + + + + + + +
Classes
Encrypter
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Entity.html b/docs/namespace-IPay.Entity.html new file mode 100644 index 0000000..9916991 --- /dev/null +++ b/docs/namespace-IPay.Entity.html @@ -0,0 +1,140 @@ + + + + + + + + Namespace IPay\Entity | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Entity

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes
Account
AccountState
Customer
Transaction
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Exception.html b/docs/namespace-IPay.Exception.html new file mode 100644 index 0000000..5ce2c00 --- /dev/null +++ b/docs/namespace-IPay.Exception.html @@ -0,0 +1,122 @@ + + + + + + + + Namespace IPay\Exception | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Exception

+ + + + + + + + + + + + + + + + + + +
Exceptions
LoginFailedException
SessionExpiredException
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Http.Plugin.html b/docs/namespace-IPay.Http.Plugin.html new file mode 100644 index 0000000..1c14efd --- /dev/null +++ b/docs/namespace-IPay.Http.Plugin.html @@ -0,0 +1,118 @@ + + + + + + + + Namespace IPay\Http\Plugin | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Http\Plugin

+ + + + + + + + + + + + + + +
Classes
ExceptionThrower
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.Http.html b/docs/namespace-IPay.Http.html new file mode 100644 index 0000000..9777a63 --- /dev/null +++ b/docs/namespace-IPay.Http.html @@ -0,0 +1,107 @@ + + + + + + + + Namespace IPay\Http | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay\Http

+ + + + + + + + + + + + + +
Namespaces
IPay\Http\Plugin
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-IPay.html b/docs/namespace-IPay.html new file mode 100644 index 0000000..e2904cf --- /dev/null +++ b/docs/namespace-IPay.html @@ -0,0 +1,136 @@ + + + + + + + + Namespace IPay | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace IPay

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes
IPayClient
Namespaces
IPay\Api
IPay\Encryption
IPay\Entity
IPay\Exception
IPay\Http
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Psr.Http.Client.html b/docs/namespace-Psr.Http.Client.html new file mode 100644 index 0000000..3bc14c8 --- /dev/null +++ b/docs/namespace-Psr.Http.Client.html @@ -0,0 +1,135 @@ + + + + + + + + Namespace Psr\Http\Client | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Psr\Http\Client

+ + + + + + + + + + + + + + + + + + +
Interfaces
ClientExceptionInterfaceEvery HTTP client related exception MUST implement this interface.
ClientInterface
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Psr.Http.Message.html b/docs/namespace-Psr.Http.Message.html new file mode 100644 index 0000000..3fd1306 --- /dev/null +++ b/docs/namespace-Psr.Http.Message.html @@ -0,0 +1,163 @@ + + + + + + + + Namespace Psr\Http\Message | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Psr\Http\Message

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Interfaces
MessageInterfaceHTTP messages consist of requests from a client to a server and responses +from a server to a client. This interface…
RequestInterfaceRepresentation of an outgoing, client-side request.
ResponseInterfaceRepresentation of an outgoing, server-side response.
StreamInterfaceDescribes a data stream.
UriInterfaceValue object representing a URI.
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Psr.Http.html b/docs/namespace-Psr.Http.html new file mode 100644 index 0000000..29012cb --- /dev/null +++ b/docs/namespace-Psr.Http.html @@ -0,0 +1,115 @@ + + + + + + + + Namespace Psr\Http | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Psr\Http

+ + + + + + + + + + + + + + + + +
Namespaces
Psr\Http\Client
Psr\Http\Message
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Psr.html b/docs/namespace-Psr.html new file mode 100644 index 0000000..7a19b88 --- /dev/null +++ b/docs/namespace-Psr.html @@ -0,0 +1,107 @@ + + + + + + + + Namespace Psr | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Psr

+ + + + + + + + + + + + + +
Namespaces
Psr\Http
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Symfony.Component.OptionsResolver.Exception.html b/docs/namespace-Symfony.Component.OptionsResolver.Exception.html new file mode 100644 index 0000000..e0c933b --- /dev/null +++ b/docs/namespace-Symfony.Component.OptionsResolver.Exception.html @@ -0,0 +1,208 @@ + + + + + + + + Namespace Symfony\Component\OptionsResolver\Exception | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Symfony\Component\OptionsResolver\Exception

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Interfaces
ExceptionInterfaceMarker interface for all exceptions thrown by the OptionsResolver component.
Exceptions
AccessExceptionThrown when trying to read an option outside of or write it inside of +{@link \Symfony\Component\OptionsResolver\Options…
InvalidArgumentExceptionThrown when an argument is invalid.
InvalidOptionsExceptionThrown when the value of an option does not match its validation rules.
MissingOptionsExceptionException thrown when a required option is missing.
NoSuchOptionExceptionThrown when trying to read an option that has no value set.
OptionDefinitionExceptionThrown when two lazy options have a cyclic dependency.
UndefinedOptionsExceptionException thrown when an undefined option is passed.
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Symfony.Component.OptionsResolver.html b/docs/namespace-Symfony.Component.OptionsResolver.html new file mode 100644 index 0000000..ffa2681 --- /dev/null +++ b/docs/namespace-Symfony.Component.OptionsResolver.html @@ -0,0 +1,170 @@ + + + + + + + + Namespace Symfony\Component\OptionsResolver | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Symfony\Component\OptionsResolver

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Classes
OptionConfigurator
OptionsResolverValidates options and merges them with default values.
Interfaces
OptionsContains resolved option values.
Namespaces
Symfony\Component\OptionsResolver\Exception
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Symfony.Component.html b/docs/namespace-Symfony.Component.html new file mode 100644 index 0000000..384410e --- /dev/null +++ b/docs/namespace-Symfony.Component.html @@ -0,0 +1,112 @@ + + + + + + + + Namespace Symfony\Component | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Symfony\Component

+ + + + + + + + + + + + + +
Namespaces
Symfony\Component\OptionsResolver
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-Symfony.html b/docs/namespace-Symfony.html new file mode 100644 index 0000000..ad2a6c1 --- /dev/null +++ b/docs/namespace-Symfony.html @@ -0,0 +1,107 @@ + + + + + + + + Namespace Symfony | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Namespace Symfony

+ + + + + + + + + + + + + +
Namespaces
Symfony\Component
+
+ + +
+ +
+ +
+ + diff --git a/docs/namespace-none.html b/docs/namespace-none.html new file mode 100644 index 0000000..7e67fe7 --- /dev/null +++ b/docs/namespace-none.html @@ -0,0 +1,127 @@ + + + + + + + + No namespace | API + + + + + +
+ +
+ +
+
+ +
+ +
+

No namespace

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Functions
ipay
Namespaces
IPay
none
+
+ + +
+ +
+ +
+ + diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..3818f77 --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,51 @@ + + + index.html + + tree.html + + namespace-IPay.html + namespace-IPay.Api.html + namespace-IPay.Encryption.html + namespace-IPay.Entity.html + namespace-IPay.Exception.html + namespace-IPay.Http.html + namespace-IPay.Http.Plugin.html + namespace-none.html + + IPay.Api.AbstractApi.html + IPay.Api.AuthenticatedApi.html + IPay.Api.AuthenticatedSession.html + IPay.Api.BodyBuilder.html + IPay.Api.SessionInterface.html + IPay.Api.UnauthenticatedApi.html + IPay.Api.UnauthenticatedSession.html + IPay.Encryption.Encrypter.html + IPay.Entity.Account.html + IPay.Entity.AccountState.html + IPay.Entity.Customer.html + IPay.Entity.Transaction.html + IPay.Exception.LoginFailedException.html + IPay.Exception.SessionExpiredException.html + IPay.Http.Plugin.ExceptionThrower.html + IPay.IPayClient.html + + function-ipay.html + + source-Api.AbstractApi.html + source-Api.AuthenticatedApi.html + source-Api.AuthenticatedSession.html + source-Api.BodyBuilder.html + source-Api.SessionInterface.html + source-Api.UnauthenticatedApi.html + source-Api.UnauthenticatedSession.html + source-Encryption.Encrypter.html + source-Entity.Account.html + source-Entity.Customer.html + source-Entity.Transaction.html + source-Exception.LoginFailedException.html + source-Exception.SessionExpiredException.html + source-Http.Plugin.ExceptionThrower.html + source-IPayClient.html + source-functions.html + diff --git a/docs/source-Api.AbstractApi.html b/docs/source-Api.AbstractApi.html new file mode 100644 index 0000000..9af5c23 --- /dev/null +++ b/docs/source-Api.AbstractApi.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/AbstractApi.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: use EventSauce\ObjectHydrator\DefinitionProvider;
6: use EventSauce\ObjectHydrator\KeyFormatterWithoutConversion;
7: use EventSauce\ObjectHydrator\ObjectMapper;
8: use EventSauce\ObjectHydrator\ObjectMapperUsingReflection;
9: use IPay\IPayClient;
10: use Nette\Utils\Json;
11: use Symfony\Component\OptionsResolver\OptionsResolver;
12:
13: /**
14: * @template T of SessionInterface
15: */
16: abstract class AbstractApi
17: {
18: protected ObjectMapper $objectMapper;
19:
20: /**
21: * @param T $session
22: */
23: public function __construct(
24: protected IPayClient $iPayClient,
25: private SessionInterface $session,
26: ) {
27: $this->objectMapper = new ObjectMapperUsingReflection(
28: new DefinitionProvider(
29: keyFormatter: new KeyFormatterWithoutConversion(),
30: ),
31: );
32: }
33:
34: /**
35: * @param string[] $data
36: *
37: * @return mixed[]
38: */
39: protected function post(string $uri, array $data = []): array
40: {
41: $response = $this->iPayClient->getClient()->post(
42: $uri,
43: [],
44: BodyBuilder::from($data)
45: ->enhance($this->getSession()->getRequestParameters())
46: ->build()
47: ->encrypt()
48: );
49:
50: return Json::decode((string) $response->getBody(), true);
51: }
52:
53: protected static function createOptionsResolver(): OptionsResolver
54: {
55: return new OptionsResolver();
56: }
57:
58: /**
59: * @return T
60: */
61: public function getSession(): SessionInterface
62: {
63: return $this->session;
64: }
65: }
66:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.AuthenticatedApi.html b/docs/source-Api.AuthenticatedApi.html new file mode 100644 index 0000000..ec6b88a --- /dev/null +++ b/docs/source-Api.AuthenticatedApi.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/AuthenticatedApi.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: use IPay\Entity\Account;
6: use IPay\Entity\Customer;
7: use IPay\Entity\Transaction;
8: use Symfony\Component\OptionsResolver\Options;
9:
10: /**
11: * @extends AbstractApi<AuthenticatedSession>
12: */
13: class AuthenticatedApi extends AbstractApi
14: {
15: public function customer(): Customer
16: {
17: return $this->objectMapper->hydrateObject(
18: Customer::class,
19: $this->post('/getCustomerDetails')['customerInfo'],
20: );
21: }
22:
23: /**
24: * @return list<Account>
25: */
26: public function accounts(): array
27: {
28: return $this->objectMapper->hydrateObjects(
29: Account::class,
30: $this->post('/getEntitiesAndAccounts')['accounts'],
31: )->toArray();
32: }
33:
34: /**
35: * @param array{
36: * accountNumber: string,
37: * tranType?: 'Credit'|'Debit'|'',
38: * startDate?: \DateTimeInterface,
39: * endDate?: \DateTimeInterface,
40: * } $parameters
41: *
42: * @return \Iterator<int, Transaction>
43: */
44: public function historyTransactions(array $parameters): \Iterator
45: {
46: $datetimeNormalizer = static function (
47: Options $resolver,
48: \DateTimeInterface $value
49: ): string {
50: return $value->format('Y-m-d');
51: };
52:
53: $resolver = self::createOptionsResolver()
54: ->setRequired([
55: 'accountNumber',
56: 'tranType',
57: 'startDate',
58: 'endDate',
59: ])
60: ->setAllowedTypes('accountNumber', 'string')
61: ->setAllowedValues('tranType', ['Credit', 'Debit', ''])
62: ->setAllowedTypes('startDate', \DateTimeInterface::class)
63: ->setAllowedTypes('endDate', \DateTimeInterface::class)
64: ->setNormalizer('startDate', $datetimeNormalizer)
65: ->setNormalizer('endDate', $datetimeNormalizer)
66: ->setDefaults([
67: 'tranType' => 'Credit',
68: 'startDate' => new \DateTimeImmutable(),
69: 'endDate' => new \DateTimeImmutable(),
70: ])
71: ;
72:
73: $parameters = $resolver->resolve($parameters);
74:
75: $parameters['pageNumber'] = 0;
76: do {
77: $transactions = $this->post(
78: '/getHistTransactions',
79: $parameters
80: )['transactions'];
81: foreach ($this->objectMapper->hydrateObjects(
82: Transaction::class,
83: $transactions
84: )->getIterator() as $transaction) {
85: yield $transaction;
86: }
87: ++$parameters['pageNumber'];
88: } while (count($transactions) > 0);
89: }
90: }
91:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.AuthenticatedSession.html b/docs/source-Api.AuthenticatedSession.html new file mode 100644 index 0000000..3c75748 --- /dev/null +++ b/docs/source-Api.AuthenticatedSession.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/AuthenticatedSession.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: final class AuthenticatedSession extends UnauthenticatedSession
6: {
7: public function __construct(private string $sessionId)
8: {
9: }
10:
11: public function getRequestParameters(): array
12: {
13: return get_object_vars($this) + parent::getRequestParameters();
14: }
15:
16: public function getSessionId(): string
17: {
18: return $this->sessionId;
19: }
20: }
21:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.BodyBuilder.html b/docs/source-Api.BodyBuilder.html new file mode 100644 index 0000000..91322cb --- /dev/null +++ b/docs/source-Api.BodyBuilder.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/BodyBuilder.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: use IPay\Encryption\Encrypter;
6: use Nette\Utils\Json;
7:
8: /**
9: * @extends \ArrayObject<string,string>
10: */
11: final class BodyBuilder extends \ArrayObject implements \Stringable, \JsonSerializable
12: {
13: /**
14: * @param string[] $data
15: */
16: private function __construct(array $data)
17: {
18: parent::__construct($data);
19: }
20:
21: /**
22: * @param string[] $data
23: */
24: public static function from(array $data): static
25: {
26: return new static($data);
27: }
28:
29: /**
30: * @param string[] $parameters
31: */
32: public function enhance(array $parameters): static
33: {
34: return static::from($this->getArrayCopy() + $parameters);
35: }
36:
37: public function build(): self
38: {
39: $this->ksort();
40:
41: $this['signature'] = md5(http_build_query($this->getArrayCopy()));
42:
43: return $this;
44: }
45:
46: public function encrypt(): string
47: {
48: return static::from(['encrypted' => Encrypter::encrypt($this)]);
49: }
50:
51: public function __toString(): string
52: {
53: return Json::encode($this);
54: }
55:
56: /**
57: * @return string[]
58: */
59: #[\ReturnTypeWillChange]
60: public function jsonSerialize(): array
61: {
62: return $this->getArrayCopy();
63: }
64: }
65:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.SessionInterface.html b/docs/source-Api.SessionInterface.html new file mode 100644 index 0000000..52be69c --- /dev/null +++ b/docs/source-Api.SessionInterface.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/SessionInterface.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: interface SessionInterface
6: {
7: /**
8: * @return string[]
9: */
10: public function getRequestParameters(): array;
11: }
12:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.UnauthenticatedApi.html b/docs/source-Api.UnauthenticatedApi.html new file mode 100644 index 0000000..1ff554b --- /dev/null +++ b/docs/source-Api.UnauthenticatedApi.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/UnauthenticatedApi.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: /**
6: * @extends AbstractApi<UnauthenticatedSession>
7: */
8: class UnauthenticatedApi extends AbstractApi
9: {
10: /**
11: * @param array{
12: * userName: string,
13: * accessCode: string,
14: * captchaCode: string,
15: * captchaId: string,
16: * } $credentials
17: */
18: public function login(array $credentials): AuthenticatedApi
19: {
20: $resolver = self::createOptionsResolver()
21: ->setRequired([
22: 'userName',
23: 'accessCode',
24: 'captchaCode',
25: 'captchaId',
26: ])
27: ->setAllowedTypes('userName', 'string')
28: ->setAllowedTypes('accessCode', 'string')
29: ->setAllowedTypes('captchaCode', 'string')
30: ->setAllowedTypes('captchaId', 'string')
31: ;
32:
33: /** @var array{sessionId: string, ...} */
34: $result = $this->post('/signIn', $resolver->resolve($credentials));
35:
36: return new AuthenticatedApi(
37: $this->iPayClient,
38: new AuthenticatedSession($result['sessionId'])
39: );
40: }
41: }
42:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Api.UnauthenticatedSession.html b/docs/source-Api.UnauthenticatedSession.html new file mode 100644 index 0000000..0a87f18 --- /dev/null +++ b/docs/source-Api.UnauthenticatedSession.html @@ -0,0 +1,133 @@ + + + + + + + + File Api/UnauthenticatedSession.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Api;
4:
5: use Nette\Utils\Random;
6:
7: class UnauthenticatedSession implements SessionInterface
8: {
9: public function getRequestParameters(): array
10: {
11: return [
12: 'lang' => 'en',
13: 'requestId' => Random::generate(12, '0-9A-Z').'|'.time(),
14: ];
15: }
16: }
17:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Encryption.Encrypter.html b/docs/source-Encryption.Encrypter.html new file mode 100644 index 0000000..44618c0 --- /dev/null +++ b/docs/source-Encryption.Encrypter.html @@ -0,0 +1,98 @@ + + + + + + + + File Encryption/Encrypter.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Encryption;
4:
5: const IPAY_PUBLIC_KEY = <<<PUB
6: -----BEGIN PUBLIC KEY-----
7: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLenQHmHpaqYX4IrRVM8H1uB21
8: xWuY+clsvn79pMUYR2KwIEfeHcnZFFshjDs3D2ae4KprjkOFZPYzEWzakg2nOIUV
9: WO+Q6RlAU1+1fxgTvEXi4z7yi+n0Zs0puOycrm8i67jsQfHi+HgdMxCaKzHvbECr
10: +JWnLxnEl6615hEeMQIDAQAB
11: -----END PUBLIC KEY-----
12: PUB;
13:
14: class Encrypter
15: {
16: public static function encrypt(string $message): string
17: {
18: $mlen = strlen($message);
19:
20: $result = '';
21: foreach (str_split(
22: $message,
23: (int) ceil($mlen / ceil($mlen / 86))
24: ) as $part) {
25: openssl_public_encrypt(
26: $part,
27: $part,
28: IPAY_PUBLIC_KEY,
29: OPENSSL_PKCS1_OAEP_PADDING
30: );
31:
32: $result .= $part;
33: }
34:
35: return base64_encode($result);
36: }
37: }
38:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Entity.Account.html b/docs/source-Entity.Account.html new file mode 100644 index 0000000..e7d20ed --- /dev/null +++ b/docs/source-Entity.Account.html @@ -0,0 +1,113 @@ + + + + + + + + File Entity/Account.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Entity;
4:
5: readonly class AccountState
6: {
7: public function __construct(
8: public int $availableBalance,
9: public int $balance,
10: ) {
11: }
12: }
13:
14: readonly class Account
15: {
16: public function __construct(
17: public string $title,
18: public string $number,
19: public string $currencyCode,
20: public AccountState $accountState,
21: ) {
22: }
23: }
24:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Entity.Customer.html b/docs/source-Entity.Customer.html new file mode 100644 index 0000000..7e04ee6 --- /dev/null +++ b/docs/source-Entity.Customer.html @@ -0,0 +1,113 @@ + + + + + + + + File Entity/Customer.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Entity;
4:
5: use EventSauce\ObjectHydrator\MapFrom;
6:
7: #[MapFrom([
8: 'fullname' => 'name',
9: 'phone' => 'phone',
10: 'jobTitle' => 'job',
11: 'feeAcctNo' => 'accountNumber',
12: ])]
13: readonly class Customer
14: {
15: public function __construct(
16: public string $name,
17: public string $phone,
18: public string $job,
19: public string $accountNumber
20: ) {
21: }
22: }
23:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Entity.Transaction.html b/docs/source-Entity.Transaction.html new file mode 100644 index 0000000..8ff6e37 --- /dev/null +++ b/docs/source-Entity.Transaction.html @@ -0,0 +1,113 @@ + + + + + + + + File Entity/Transaction.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Entity;
4:
5: use EventSauce\ObjectHydrator\PropertyCasters\CastToDateTimeImmutable;
6: use EventSauce\ObjectHydrator\PropertyCasters\CastToType;
7:
8: readonly class Transaction
9: {
10: public function __construct(
11: public string $currency,
12: #[CastToType('integer')]
13: public int $amount,
14: public string $remark,
15: public string $corresponsiveAccount,
16: public string $corresponsiveName,
17: #[CastToDateTimeImmutable('d-m-Y H:i:s')]
18: public \DateTimeImmutable $processDate,
19: ) {
20: }
21: }
22:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Exception.LoginFailedException.html b/docs/source-Exception.LoginFailedException.html new file mode 100644 index 0000000..c42cef6 --- /dev/null +++ b/docs/source-Exception.LoginFailedException.html @@ -0,0 +1,103 @@ + + + + + + + + File Exception/LoginFailedException.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Exception;
4:
5: class LoginFailedException extends \ErrorException
6: {
7: }
8:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Exception.SessionExpiredException.html b/docs/source-Exception.SessionExpiredException.html new file mode 100644 index 0000000..b1b0ebf --- /dev/null +++ b/docs/source-Exception.SessionExpiredException.html @@ -0,0 +1,103 @@ + + + + + + + + File Exception/SessionExpiredException.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Exception;
4:
5: class SessionExpiredException extends \Exception
6: {
7: }
8:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-Http.Plugin.ExceptionThrower.html b/docs/source-Http.Plugin.ExceptionThrower.html new file mode 100644 index 0000000..312f462 --- /dev/null +++ b/docs/source-Http.Plugin.ExceptionThrower.html @@ -0,0 +1,103 @@ + + + + + + + + File Http/Plugin/ExceptionThrower.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay\Http\Plugin;
4:
5: use Http\Client\Common\Plugin;
6: use Http\Promise\Promise;
7: use IPay\Exception\SessionExpiredException;
8: use Nette\Utils\Json;
9: use Psr\Http\Message\RequestInterface;
10: use Psr\Http\Message\ResponseInterface;
11:
12: final class ExceptionThrower implements Plugin
13: {
14: public function handleRequest(RequestInterface $request, callable $next, callable $first): Promise
15: {
16: return $next($request)->then(function (ResponseInterface $response): ResponseInterface {
17: if (200 !== $response->getStatusCode()) {
18: /** @var object{errorCode:string} */
19: $error = Json::decode((string) $response->getBody());
20:
21: throw self::createException($error->errorCode);
22: }
23:
24: return $response;
25: });
26: }
27:
28: private static function createException(string $code): \Throwable
29: {
30: return match ($code) {
31: '96', '99' => new SessionExpiredException('The session has expired.'),
32: default => new \RuntimeException('Unknown error.'),
33: };
34: }
35: }
36:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-IPayClient.html b/docs/source-IPayClient.html new file mode 100644 index 0000000..d6dc6b4 --- /dev/null +++ b/docs/source-IPayClient.html @@ -0,0 +1,98 @@ + + + + + + + + File IPayClient.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: namespace IPay;
4:
5: use Http\Client\Common\HttpMethodsClient;
6: use Http\Client\Common\HttpMethodsClientInterface;
7: use Http\Client\Common\Plugin\BaseUriPlugin;
8: use Http\Client\Common\Plugin\ContentTypePlugin;
9: use Http\Client\Common\PluginClient;
10: use Http\Discovery\Psr17FactoryDiscovery;
11: use Http\Discovery\Psr18ClientDiscovery;
12: use IPay\Api\AuthenticatedApi;
13: use IPay\Api\AuthenticatedSession;
14: use IPay\Api\UnauthenticatedApi;
15: use IPay\Api\UnauthenticatedSession;
16: use IPay\Http\Plugin\ExceptionThrower;
17:
18: final class IPayClient
19: {
20: public static function create(): static
21: {
22: return new self(
23: new HttpMethodsClient(
24: new PluginClient(Psr18ClientDiscovery::find(), [
25: new BaseUriPlugin(Psr17FactoryDiscovery::findUriFactory()
26: ->createUri('https://api-ipay.vietinbank.vn/ipay/wa')
27: ),
28: new ContentTypePlugin(),
29: new ExceptionThrower(),
30: ]),
31: Psr17FactoryDiscovery::findRequestFactory(),
32: Psr17FactoryDiscovery::findStreamFactory(),
33: ),
34: );
35: }
36:
37: private function __construct(
38: private HttpMethodsClientInterface $client,
39: ) {
40: }
41:
42: public function getClient(): HttpMethodsClientInterface
43: {
44: return $this->client;
45: }
46:
47: public function guest(): UnauthenticatedApi
48: {
49: return new UnauthenticatedApi($this, new UnauthenticatedSession());
50: }
51:
52: public function session(string $id): AuthenticatedApi
53: {
54: return new AuthenticatedApi($this, new AuthenticatedSession($id));
55: }
56: }
57:
+
+ + +
+ +
+ +
+ + diff --git a/docs/source-functions.html b/docs/source-functions.html new file mode 100644 index 0000000..ccde1bd --- /dev/null +++ b/docs/source-functions.html @@ -0,0 +1,98 @@ + + + + + + + + File functions.php | API + + + + + +
+ +
+ +
+
+ +
+ +
+
1: <?php
2:
3: use IPay\IPayClient;
4:
5: if (!function_exists('ipay')) {
6: function ipay(): IPayClient
7: {
8: return IPayClient::create();
9: }
10: }
11:
+
+ + +
+ +
+ +
+ + diff --git a/docs/tree.html b/docs/tree.html new file mode 100644 index 0000000..d2313fb --- /dev/null +++ b/docs/tree.html @@ -0,0 +1,513 @@ + + + + + + + + Tree | API + + + + + +
+ +
+ +
+
+ +
+ +
+

Tree

+ +

Classes

+ + +

Interfaces

+ + + +
+ + +
+ +
+ +
+ + diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..09bd621 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,6 @@ +parameters: + ignoreErrors: + - + message: "#^Parameter \\#2 \\$length of function str_split expects int\\<1, max\\>, int given\\.$#" + count: 1 + path: src/Encryption/Encrypter.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 6e451fa..b9ca222 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,4 +1,7 @@ parameters: - level: 6 + level: 8 paths: - src + +includes: + - phpstan-baseline.neon diff --git a/src/Api/AbstractApi.php b/src/Api/AbstractApi.php index 04ca40c..bd2e9b5 100644 --- a/src/Api/AbstractApi.php +++ b/src/Api/AbstractApi.php @@ -2,22 +2,30 @@ namespace IPay\Api; +use EventSauce\ObjectHydrator\DefinitionProvider; +use EventSauce\ObjectHydrator\KeyFormatterWithoutConversion; +use EventSauce\ObjectHydrator\ObjectMapper; +use EventSauce\ObjectHydrator\ObjectMapperUsingReflection; use IPay\IPayClient; -use League\ObjectMapper\KeyFormatterWithoutConversion; -use League\ObjectMapper\ObjectMapper; -use League\ObjectMapper\ObjectMapperUsingReflection; -use League\ObjectMapper\ReflectionDefinitionProvider; use Nette\Utils\Json; +use Symfony\Component\OptionsResolver\OptionsResolver; +/** + * @template T of SessionInterface + */ abstract class AbstractApi { - private ObjectMapper $objectMapper; + protected ObjectMapper $objectMapper; + /** + * @param T $session + */ public function __construct( - protected IPayClient $client, + protected IPayClient $iPayClient, + private SessionInterface $session, ) { $this->objectMapper = new ObjectMapperUsingReflection( - new ReflectionDefinitionProvider( + new DefinitionProvider( keyFormatter: new KeyFormatterWithoutConversion(), ), ); @@ -30,24 +38,28 @@ public function __construct( */ protected function post(string $uri, array $data = []): array { - $response = $this->client->getClient()->post( + $response = $this->iPayClient->getClient()->post( $uri, [], - $this->configureFieldBuilder( - FieldBuilder::with($data) - )->encrypt() + BodyBuilder::from($data) + ->enhance($this->getSession()->getRequestParameters()) + ->build() + ->encrypt() ); return Json::decode((string) $response->getBody(), true); } - protected function configureFieldBuilder(FieldBuilder $builder): FieldBuilder + protected static function createOptionsResolver(): OptionsResolver { - return $builder->withRequiredFields(); + return new OptionsResolver(); } - public function getObjectMapper(): ObjectMapper + /** + * @return T + */ + public function getSession(): SessionInterface { - return $this->objectMapper; + return $this->session; } } diff --git a/src/Api/Auth.php b/src/Api/Auth.php deleted file mode 100644 index e6dbcde..0000000 --- a/src/Api/Auth.php +++ /dev/null @@ -1,17 +0,0 @@ -post('/signIn', get_defined_vars()); - - return new Session($result['sessionId'], $this->client); - } -} diff --git a/src/Api/AuthenticatedApi.php b/src/Api/AuthenticatedApi.php new file mode 100644 index 0000000..9d1f2f1 --- /dev/null +++ b/src/Api/AuthenticatedApi.php @@ -0,0 +1,90 @@ + + */ +class AuthenticatedApi extends AbstractApi +{ + public function customer(): Customer + { + return $this->objectMapper->hydrateObject( + Customer::class, + $this->post('/getCustomerDetails')['customerInfo'], + ); + } + + /** + * @return list + */ + public function accounts(): array + { + return $this->objectMapper->hydrateObjects( + Account::class, + $this->post('/getEntitiesAndAccounts')['accounts'], + )->toArray(); + } + + /** + * @param array{ + * accountNumber: string, + * tranType?: 'Credit'|'Debit'|'', + * startDate?: \DateTimeInterface, + * endDate?: \DateTimeInterface, + * } $parameters + * + * @return \Iterator + */ + public function historyTransactions(array $parameters): \Iterator + { + $datetimeNormalizer = static function ( + Options $resolver, + \DateTimeInterface $value + ): string { + return $value->format('Y-m-d'); + }; + + $resolver = self::createOptionsResolver() + ->setRequired([ + 'accountNumber', + 'tranType', + 'startDate', + 'endDate', + ]) + ->setAllowedTypes('accountNumber', 'string') + ->setAllowedValues('tranType', ['Credit', 'Debit', '']) + ->setAllowedTypes('startDate', \DateTimeInterface::class) + ->setAllowedTypes('endDate', \DateTimeInterface::class) + ->setNormalizer('startDate', $datetimeNormalizer) + ->setNormalizer('endDate', $datetimeNormalizer) + ->setDefaults([ + 'tranType' => 'Credit', + 'startDate' => new \DateTimeImmutable(), + 'endDate' => new \DateTimeImmutable(), + ]) + ; + + $parameters = $resolver->resolve($parameters); + + $parameters['pageNumber'] = 0; + do { + $transactions = $this->post( + '/getHistTransactions', + $parameters + )['transactions']; + foreach ($this->objectMapper->hydrateObjects( + Transaction::class, + $transactions + )->getIterator() as $transaction) { + yield $transaction; + } + ++$parameters['pageNumber']; + } while (count($transactions) > 0); + } +} diff --git a/src/Api/AuthenticatedSession.php b/src/Api/AuthenticatedSession.php new file mode 100644 index 0000000..1f945b6 --- /dev/null +++ b/src/Api/AuthenticatedSession.php @@ -0,0 +1,20 @@ +sessionId; + } +} diff --git a/src/Api/FieldBuilder.php b/src/Api/BodyBuilder.php similarity index 65% rename from src/Api/FieldBuilder.php rename to src/Api/BodyBuilder.php index f013b4c..42b3db2 100644 --- a/src/Api/FieldBuilder.php +++ b/src/Api/BodyBuilder.php @@ -4,12 +4,11 @@ use IPay\Encryption\Encrypter; use Nette\Utils\Json; -use Nette\Utils\Random; /** * @extends \ArrayObject */ -final class FieldBuilder extends \ArrayObject implements \Stringable, \JsonSerializable +final class BodyBuilder extends \ArrayObject implements \Stringable, \JsonSerializable { /** * @param string[] $data @@ -22,17 +21,17 @@ private function __construct(array $data) /** * @param string[] $data */ - public static function with(array $data): static + public static function from(array $data): static { return new static($data); } - public function withRequiredFields(): self + /** + * @param string[] $parameters + */ + public function enhance(array $parameters): static { - $this['lang'] = 'en'; - $this['requestId'] = Random::generate(12, '0-9A-Z').'|'.time(); - - return $this; + return static::from($this->getArrayCopy() + $parameters); } public function build(): self @@ -46,9 +45,7 @@ public function build(): self public function encrypt(): string { - return new static([ - 'encrypted' => Encrypter::encrypt($this->build()), - ]); + return static::from(['encrypted' => Encrypter::encrypt($this)]); } public function __toString(): string diff --git a/src/Api/Session.php b/src/Api/Session.php deleted file mode 100644 index e8ed17e..0000000 --- a/src/Api/Session.php +++ /dev/null @@ -1,31 +0,0 @@ -getObjectMapper()->hydrateObject( - Customer::class, - $this->post('/getCustomerDetails'), - ); - } - - protected function configureFieldBuilder(FieldBuilder $builder): FieldBuilder - { - $builder['sessionId'] = $this->id; - - return parent::configureFieldBuilder($builder); - } -} diff --git a/src/Api/SessionInterface.php b/src/Api/SessionInterface.php new file mode 100644 index 0000000..bada074 --- /dev/null +++ b/src/Api/SessionInterface.php @@ -0,0 +1,11 @@ + + */ +class UnauthenticatedApi extends AbstractApi +{ + /** + * @param array{ + * userName: string, + * accessCode: string, + * captchaCode: string, + * captchaId: string, + * } $credentials + */ + public function login(array $credentials): AuthenticatedApi + { + $resolver = self::createOptionsResolver() + ->setRequired([ + 'userName', + 'accessCode', + 'captchaCode', + 'captchaId', + ]) + ->setAllowedTypes('userName', 'string') + ->setAllowedTypes('accessCode', 'string') + ->setAllowedTypes('captchaCode', 'string') + ->setAllowedTypes('captchaId', 'string') + ; + + /** @var array{sessionId: string, ...} */ + $result = $this->post('/signIn', $resolver->resolve($credentials)); + + return new AuthenticatedApi( + $this->iPayClient, + new AuthenticatedSession($result['sessionId']) + ); + } +} diff --git a/src/Api/UnauthenticatedSession.php b/src/Api/UnauthenticatedSession.php new file mode 100644 index 0000000..d6b5bd9 --- /dev/null +++ b/src/Api/UnauthenticatedSession.php @@ -0,0 +1,16 @@ + 'en', + 'requestId' => Random::generate(12, '0-9A-Z').'|'.time(), + ]; + } +} diff --git a/src/Encryption/Encrypter.php b/src/Encryption/Encrypter.php index da4d9db..7339402 100644 --- a/src/Encryption/Encrypter.php +++ b/src/Encryption/Encrypter.php @@ -18,12 +18,10 @@ public static function encrypt(string $message): string $mlen = strlen($message); $result = ''; - foreach ( - str_split( - $message, - (int) ceil($mlen / ceil($mlen / 86)) - ) as $part - ) { + foreach (str_split( + $message, + (int) ceil($mlen / ceil($mlen / 86)) + ) as $part) { openssl_public_encrypt( $part, $part, diff --git a/src/Entity/Account.php b/src/Entity/Account.php new file mode 100644 index 0000000..a2153a3 --- /dev/null +++ b/src/Entity/Account.php @@ -0,0 +1,23 @@ + 'name', @@ -10,11 +10,8 @@ 'jobTitle' => 'job', 'feeAcctNo' => 'accountNumber', ])] -readonly class Info +readonly class Customer { - /** - * @internal - */ public function __construct( public string $name, public string $phone, @@ -23,16 +20,3 @@ public function __construct( ) { } } - -readonly class Customer -{ - /** - * @internal - */ - public function __construct( - public string $userName, - #[MapFrom('customerInfo')] - public Info $info, - ) { - } -} diff --git a/src/Entity/Transaction.php b/src/Entity/Transaction.php new file mode 100644 index 0000000..4e9d0d5 --- /dev/null +++ b/src/Entity/Transaction.php @@ -0,0 +1,21 @@ +client; } - public function auth(): Auth + public function guest(): UnauthenticatedApi { - return new Auth($this); + return new UnauthenticatedApi($this, new UnauthenticatedSession()); + } + + public function session(string $id): AuthenticatedApi + { + return new AuthenticatedApi($this, new AuthenticatedSession($id)); } } diff --git a/src/functions.php b/src/functions.php new file mode 100644 index 0000000..844e2b7 --- /dev/null +++ b/src/functions.php @@ -0,0 +1,10 @@ +