diff --git a/README.md b/README.md index 88f1d23e..4908bb86 100644 --- a/README.md +++ b/README.md @@ -34,31 +34,38 @@ The plugin integrates card component (Secured Fields) using Adyen Checkout for a ### Supported payment methods - Credit and debit cards (non 3D secure, 3D secure 1, 3D secure 2 native) - Stored card payment methods (One click payment methods) + - Affirm - AfterPay invoice + - Alipay , Alipay HK - Amazon Pay - Apple Pay - Bancontact - Blik + - Clearpay - Dotpay - - Google Pay + - Electronic Payment Service (EPS) - Gift cards - GiroPay + - Google Pay - iDeal - Klarna Pay Later - - Klarna Pay Over Time - Klarna Pay Now - - RatePay, RatePay Direct Debit + - Klarna Pay Over Time + - MB Way + - MobilePay + - Multibanco + - Oney (3x, 4x, 6x, 10x, 12x) + - PayBright - PayPal + - PaySafeCard + - RatePay, RatePay Direct Debit - SEPA Direct Debit - - Twint - - Electronic Payment Service (EPS) - - Swish - - Alipay , Alipay HK - Sofort - - Clearpay - - Oney (3x, 4x, 6x, 10x, 12x) + - Swish - Trustly - - PaySafeCard + - Twint + - Vipps + - WeChat Pay ## API Library This module is using the Adyen APIs Library for PHP for all (API) connections to Adyen. diff --git a/composer.json b/composer.json index 655e66ea..f1239016 100644 --- a/composer.json +++ b/composer.json @@ -6,14 +6,14 @@ } ], "description": "Official Shopware 6 Plugin to connect to Payment Service Provider Adyen", - "version": "3.6.0", + "version": "3.7.0", "type": "shopware-platform-plugin", "license": "MIT", "require": { "shopware/core": "^6.4.0.0", "shopware/storefront": "^6.4.0.0", - "adyen/php-api-library": "^11", - "adyen/php-webhook-module": "0.5", + "adyen/php-api-library": "13.0.2", + "adyen/php-webhook-module": "0.6.0", "monolog/monolog": "^1.16 || ^2.0", "ext-json": "*" }, diff --git a/composer.lock b/composer.lock index f71a1505..cc46e510 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dcc0c9c2555ceb19dd544e7d70e91f80", + "content-hash": "b889f6543bff2c6d81b032fad012fac1", "packages": [ { "name": "adyen/php-api-library", - "version": "11.0.0", + "version": "13.0.2", "source": { "type": "git", "url": "https://github.com/Adyen/adyen-php-api-library.git", - "reference": "c2207139042d09c46954512f2333eac7330cef34" + "reference": "84845f9f7ea4aab3cce3ca4575026c45c22e37c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Adyen/adyen-php-api-library/zipball/c2207139042d09c46954512f2333eac7330cef34", - "reference": "c2207139042d09c46954512f2333eac7330cef34", + "url": "https://api.github.com/repos/Adyen/adyen-php-api-library/zipball/84845f9f7ea4aab3cce3ca4575026c45c22e37c3", + "reference": "84845f9f7ea4aab3cce3ca4575026c45c22e37c3", "shasum": "" }, "require": { @@ -30,11 +30,11 @@ "php": ">=7.3" }, "require-dev": { - "dms/phpunit-arraysubset-asserts": "0.3.0", + "dms/phpunit-arraysubset-asserts": "0.4.0", "friendsofphp/php-cs-fixer": "*", - "php-coveralls/php-coveralls": "2.4.3", - "phpunit/phpunit": "9.5.10", - "squizlabs/php_codesniffer": "3.6.1" + "php-coveralls/php-coveralls": "2.5.2", + "phpunit/phpunit": "9.5.24", + "squizlabs/php_codesniffer": "3.7.1" }, "type": "library", "autoload": { @@ -53,34 +53,31 @@ ], "support": { "issues": "https://github.com/Adyen/adyen-php-api-library/issues", - "source": "https://github.com/Adyen/adyen-php-api-library/tree/11.0.0" + "source": "https://github.com/Adyen/adyen-php-api-library/tree/13.0.2" }, - "time": "2021-10-18T07:52:10+00:00" + "time": "2022-09-01T11:23:47+00:00" }, { "name": "adyen/php-webhook-module", - "version": "0.5.0", + "version": "0.6.0", "source": { "type": "git", "url": "https://github.com/Adyen/php-webhook-module.git", - "reference": "3b21ea97cfd05a883a4ce37c6ebe300769db8dfe" + "reference": "1106faadc94a803f6803d38032811a991d2d6f27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Adyen/php-webhook-module/zipball/3b21ea97cfd05a883a4ce37c6ebe300769db8dfe", - "reference": "3b21ea97cfd05a883a4ce37c6ebe300769db8dfe", + "url": "https://api.github.com/repos/Adyen/php-webhook-module/zipball/1106faadc94a803f6803d38032811a991d2d6f27", + "reference": "1106faadc94a803f6803d38032811a991d2d6f27", "shasum": "" }, "require": { - "adyen/php-api-library": "^11" + "monolog/monolog": "^1.16 || ^2.0" }, "require-dev": { "phpunit/phpunit": "^9.5.0", "squizlabs/php_codesniffer": "^3.5" }, - "suggest": { - "monolog/monolog": "~2.2.0" - }, "type": "library", "autoload": { "psr-4": { @@ -99,9 +96,9 @@ "description": "Webhook module for Adyen Payment Integrations", "support": { "issues": "https://github.com/Adyen/php-webhook-module/issues", - "source": "https://github.com/Adyen/php-webhook-module/tree/0.5.0" + "source": "https://github.com/Adyen/php-webhook-module/tree/0.6.0" }, - "time": "2022-01-12T09:34:16+00:00" + "time": "2022-03-28T13:42:57+00:00" }, { "name": "aws/aws-crt-php", @@ -155,16 +152,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.234.6", + "version": "3.236.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "c0ae9fbc8295678502a8fde6a2ecc49f2bd39580" + "reference": "1e8d1abe7582968df16a2e7a87c5dcc51d0dfd1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c0ae9fbc8295678502a8fde6a2ecc49f2bd39580", - "reference": "c0ae9fbc8295678502a8fde6a2ecc49f2bd39580", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1e8d1abe7582968df16a2e7a87c5dcc51d0dfd1b", + "reference": "1e8d1abe7582968df16a2e7a87c5dcc51d0dfd1b", "shasum": "" }, "require": { @@ -183,6 +180,7 @@ "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", "composer/composer": "^1.10.22", + "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", @@ -190,10 +188,11 @@ "ext-sockets": "*", "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3", + "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3" + "sebastian/comparator": "^1.2.3 || ^4.0", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -241,9 +240,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.234.6" + "source": "https://github.com/aws/aws-sdk-php/tree/3.236.1" }, - "time": "2022-08-30T20:25:10+00:00" + "time": "2022-09-27T18:19:10+00:00" }, { "name": "brick/math", @@ -1154,16 +1153,16 @@ }, { "name": "doctrine/collections", - "version": "1.7.2", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "3fe77330f5591108bbf1315da7377a7e704ed8a0" + "reference": "09dde3eb237756190f2de738d3c97cff10a8407b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/3fe77330f5591108bbf1315da7377a7e704ed8a0", - "reference": "3fe77330f5591108bbf1315da7377a7e704ed8a0", + "url": "https://api.github.com/repos/doctrine/collections/zipball/09dde3eb237756190f2de738d3c97cff10a8407b", + "reference": "09dde3eb237756190f2de738d3c97cff10a8407b", "shasum": "" }, "require": { @@ -1218,9 +1217,9 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.7.2" + "source": "https://github.com/doctrine/collections/tree/1.7.3" }, - "time": "2022-08-27T16:08:58+00:00" + "time": "2022-09-01T19:34:23+00:00" }, { "name": "doctrine/dbal", @@ -2482,16 +2481,16 @@ }, { "name": "google/auth", - "version": "v1.21.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "aa3b9ca29258ac6347ce3c8937a2418c5d78f840" + "reference": "8da16102d2cd1bdc128d97f323553df465ee7701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/aa3b9ca29258ac6347ce3c8937a2418c5d78f840", - "reference": "aa3b9ca29258ac6347ce3c8937a2418c5d78f840", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/8da16102d2cd1bdc128d97f323553df465ee7701", + "reference": "8da16102d2cd1bdc128d97f323553df465ee7701", "shasum": "" }, "require": { @@ -2534,9 +2533,9 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.21.1" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.23.0" }, - "time": "2022-05-16T19:34:15+00:00" + "time": "2022-09-27T16:27:23+00:00" }, { "name": "google/cloud-core", @@ -3147,16 +3146,16 @@ }, { "name": "laminas/laminas-code", - "version": "4.6.0", + "version": "4.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "16ec7577ff315d53ac2e1b1f03a344d8fe680a6e" + "reference": "0337d9265bc2e6376babad8c511500821620cb30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/16ec7577ff315d53ac2e1b1f03a344d8fe680a6e", - "reference": "16ec7577ff315d53ac2e1b1f03a344d8fe680a6e", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/0337d9265bc2e6376babad8c511500821620cb30", + "reference": "0337d9265bc2e6376babad8c511500821620cb30", "shasum": "" }, "require": { @@ -3209,7 +3208,7 @@ "type": "community_bridge" } ], - "time": "2022-07-28T22:46:52+00:00" + "time": "2022-09-13T10:33:30+00:00" }, { "name": "lcobucci/clock", @@ -3760,16 +3759,16 @@ }, { "name": "league/uri", - "version": "6.7.1", + "version": "6.7.2", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea" + "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/2d7c87a0860f3126a39f44a8a9bf2fed402dcfea", - "reference": "2d7c87a0860f3126a39f44a8a9bf2fed402dcfea", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/d3b50812dd51f3fbf176344cc2981db03d10fe06", + "reference": "d3b50812dd51f3fbf176344cc2981db03d10fe06", "shasum": "" }, "require": { @@ -3847,7 +3846,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.7.1" + "source": "https://github.com/thephpleague/uri/tree/6.7.2" }, "funding": [ { @@ -3855,7 +3854,7 @@ "type": "github" } ], - "time": "2022-06-29T09:48:18+00:00" + "time": "2022-09-13T19:50:42+00:00" }, { "name": "league/uri-interfaces", @@ -5513,16 +5512,16 @@ }, { "name": "seld/phar-utils", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "9f3452c93ff423469c0d56450431562ca423dcee" + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/9f3452c93ff423469c0d56450431562ca423dcee", - "reference": "9f3452c93ff423469c0d56450431562ca423dcee", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", "shasum": "" }, "require": { @@ -5555,22 +5554,22 @@ ], "support": { "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.0" + "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" }, - "time": "2021-12-10T11:20:11+00:00" + "time": "2022-08-31T10:31:18+00:00" }, { "name": "sensio/framework-extra-bundle", - "version": "v6.2.7", + "version": "v6.2.8", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "b27b8d6a43c508db1ea0df6c87774dd49014913c" + "reference": "bb962f8aed09e60b0942545f6e4842ffeee4aafd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/b27b8d6a43c508db1ea0df6c87774dd49014913c", - "reference": "b27b8d6a43c508db1ea0df6c87774dd49014913c", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb962f8aed09e60b0942545f6e4842ffeee4aafd", + "reference": "bb962f8aed09e60b0942545f6e4842ffeee4aafd", "shasum": "" }, "require": { @@ -5633,9 +5632,9 @@ ], "support": { "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.7" + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.8" }, - "time": "2022-06-16T09:06:24+00:00" + "time": "2022-09-05T16:44:56+00:00" }, { "name": "setasign/fpdi", @@ -5741,23 +5740,23 @@ }, { "name": "shopware/core", - "version": "6.4.14.0", + "version": "6.4.15.1", "source": { "type": "git", "url": "https://github.com/shopware/core.git", - "reference": "2a0b985775b54e8f622183a4266d2d9269b59530" + "reference": "b289bcec6e57d169ca593073f83c5dd692a3cc18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shopware/core/zipball/2a0b985775b54e8f622183a4266d2d9269b59530", - "reference": "2a0b985775b54e8f622183a4266d2d9269b59530", + "url": "https://api.github.com/repos/shopware/core/zipball/b289bcec6e57d169ca593073f83c5dd692a3cc18", + "reference": "b289bcec6e57d169ca593073f83c5dd692a3cc18", "shasum": "" }, "require": { "aws/aws-sdk-php": "^3.198.5", "cocur/slugify": "4.0.0", "composer-runtime-api": "^2.0", - "composer/composer": "^2.1.9", + "composer/composer": "^2.2.17", "composer/semver": "^3.2", "doctrine/annotations": "1.13.1", "doctrine/dbal": "~2.13.8", @@ -5808,13 +5807,13 @@ "superbalist/flysystem-google-storage": "~7.2.2", "symfony/asset": "~5.4.0", "symfony/cache": "~5.4.0", - "symfony/cache-contracts": "2.2.0", + "symfony/cache-contracts": "v2.5.2", "symfony/config": "~5.4.0", "symfony/console": "~5.4.1", "symfony/debug-bundle": "~5.4.0", "symfony/dependency-injection": "~5.4.1", "symfony/deprecation-contracts": "2.2.0", - "symfony/dotenv": "~5.4.0", + "symfony/dotenv": "~5.4.5", "symfony/error-handler": "~5.4.1", "symfony/event-dispatcher": "~5.4.0", "symfony/event-dispatcher-contracts": "2.2.0", @@ -5911,23 +5910,23 @@ "docs": "https://developer.shopware.com", "forum": "https://forum.shopware.com", "issues": "https://issues.shopware.com", - "source": "https://github.com/shopware/core/tree/v6.4.14.0", + "source": "https://github.com/shopware/core/tree/v6.4.15.1", "wiki": "https://developer.shopware.com" }, - "time": "2022-08-01T03:12:48+00:00" + "time": "2022-09-21T08:13:35+00:00" }, { "name": "shopware/storefront", - "version": "6.4.14.0", + "version": "6.4.15.1", "source": { "type": "git", "url": "https://github.com/shopware/storefront.git", - "reference": "eb390cde73812a0042210763dec58dcc7422ebf0" + "reference": "150c4427fb9a455db199ac8e51bb3d097b64335b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shopware/storefront/zipball/eb390cde73812a0042210763dec58dcc7422ebf0", - "reference": "eb390cde73812a0042210763dec58dcc7422ebf0", + "url": "https://api.github.com/repos/shopware/storefront/zipball/150c4427fb9a455db199ac8e51bb3d097b64335b", + "reference": "150c4427fb9a455db199ac8e51bb3d097b64335b", "shasum": "" }, "require": { @@ -5937,9 +5936,9 @@ "padaliyajay/php-autoprefixer": "1.3", "php": "^7.4.3 || ^8.0", "scssphp/scssphp": "1.10.0", - "shopware/core": "v6.4.14.0", + "shopware/core": "v6.4.15.1", "symfony/cache": "~5.4.0", - "symfony/cache-contracts": "2.2.0", + "symfony/cache-contracts": "v2.5.2", "symfony/config": "~5.4.0", "symfony/console": "~5.4.1", "symfony/dependency-injection": "~5.4.1", @@ -5989,10 +5988,10 @@ "docs": "https://developer.shopware.com", "forum": "https://forum.shopware.com", "issues": "https://issues.shopware.com", - "source": "https://github.com/shopware/storefront/tree/v6.4.14.0", + "source": "https://github.com/shopware/storefront/tree/v6.4.15.1", "wiki": "https://developer.shopware.com" }, - "time": "2022-08-01T03:12:50+00:00" + "time": "2022-09-21T08:13:38+00:00" }, { "name": "shopwarelabs/dompdf", @@ -6483,21 +6482,21 @@ }, { "name": "symfony/cache-contracts", - "version": "v2.2.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", - "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", + "reference": "64be4a7acb83b6f2bf6de9a02cee6dad41277ebc", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/cache": "^1.0" + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { "symfony/cache-implementation": "" @@ -6505,7 +6504,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -6542,7 +6541,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.2" }, "funding": [ { @@ -6558,7 +6557,7 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/config", @@ -11740,16 +11739,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -11790,9 +11789,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "phar-io/manifest", @@ -12225,16 +12224,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.24", + "version": "9.5.25", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", - "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", "shasum": "" }, "require": { @@ -12256,14 +12255,14 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.1", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { @@ -12307,7 +12306,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" }, "funding": [ { @@ -12317,9 +12316,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-30T07:42:16+00:00" + "time": "2022-09-25T03:44:45+00:00" }, { "name": "sebastian/cli-parser", @@ -12490,16 +12493,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -12552,7 +12555,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -12560,7 +12563,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -12750,16 +12753,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -12815,7 +12818,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -12823,7 +12826,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -13178,16 +13181,16 @@ }, { "name": "sebastian/type", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb44e1cc6e557418387ad815780360057e40753e" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", - "reference": "fb44e1cc6e557418387ad815780360057e40753e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -13199,7 +13202,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -13222,7 +13225,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -13230,7 +13233,7 @@ "type": "github" } ], - "time": "2022-08-29T06:55:37+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -13401,5 +13404,5 @@ "ext-json": "*" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/src/AdyenPaymentShopware6.php b/src/AdyenPaymentShopware6.php index 9f3e9d6f..e2f17be9 100644 --- a/src/AdyenPaymentShopware6.php +++ b/src/AdyenPaymentShopware6.php @@ -127,6 +127,10 @@ public function update(UpdateContext $updateContext): void if (\version_compare($currentVersion, '3.5.0', '<')) { $this->updateTo350($updateContext); } + + if (\version_compare($currentVersion, '3.7.0', '<')) { + $this->updateTo370($updateContext); + } } private function addPaymentMethod(PaymentMethods\PaymentMethodInterface $paymentMethod, Context $context): void @@ -468,6 +472,34 @@ private function updateTo350(UpdateContext $updateContext): void ); } } + + private function updateTo370(UpdateContext $updateContext): void + { + /* + * Version 3.7.0 introduces following payment methods. + * MB Way, Multibanco, WeChat Pay, MobilePay, Vipps, Affirm & PayBright + */ + foreach ([ + new PaymentMethods\MbwayPaymentMethod(), + new PaymentMethods\MultibancoPaymentMethod(), + new PaymentMethods\WechatpayqrPaymentMethod(), + new PaymentMethods\WechatpaywebPaymentMethod(), + new PaymentMethods\MobilePayPaymentMethod(), + new PaymentMethods\VippsPaymentMethod(), + new PaymentMethods\AffirmPaymentMethod(), + new PaymentMethods\PayBrightPaymentMethod() + ] as $method) { + $this->addPaymentMethod( + $method, + $updateContext->getContext() + ); + $this->setPaymentMethodIsActive( + true, + $updateContext->getContext(), + $method + ); + } + } } if (file_exists(__DIR__ . '/../vendor/autoload.php')) { diff --git a/src/Command/ProcessWebhooksCommand.php b/src/Command/ProcessWebhooksCommand.php new file mode 100644 index 00000000..67ce9e8b --- /dev/null +++ b/src/Command/ProcessWebhooksCommand.php @@ -0,0 +1,58 @@ + + */ + +namespace Adyen\Shopware\Command; + +use Adyen\Shopware\ScheduledTask\ProcessNotificationsHandler; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ProcessWebhooksCommand extends Command +{ + protected static $defaultName = 'adyen:process-webhooks'; + + /** + * @var ProcessNotificationsHandler + */ + protected $handler; + + public function __construct(ProcessNotificationsHandler $handler) + { + parent::__construct(); + $this->handler = $handler; + } + + protected function configure() + { + $this->setDescription('Process webhook notifications.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->handler->run(); + $output->writeln('Webhook notifications have been processed.'); + return 0; + } +} diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 01c613f4..d9770146 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -27,7 +27,6 @@ use Adyen\Client; use Adyen\Service\Checkout; use Adyen\Shopware\Entity\Notification\NotificationEntity; -use Adyen\Shopware\Entity\PaymentCapture\PaymentCaptureEntity; use Adyen\Shopware\Entity\Refund\RefundEntity; use Adyen\Shopware\Exception\CaptureException; use Adyen\Shopware\Service\CaptureService; @@ -48,6 +47,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\RouterInterface; /** * @RouteScope(scopes={"administration"}) @@ -357,6 +357,10 @@ public function getOrderNotifications(string $orderId): JsonResponse : NotificationEntity::NOTIFICATION_STATUS_PENDING, 'createdAt' => $notification->getCreatedAt()->format(self::ADMIN_DATETIME_FORMAT), 'updatedAt' => $notification->getUpdatedAt()->format(self::ADMIN_DATETIME_FORMAT), + 'notificationId' => $notification->getId(), + 'canBeRescheduled' => $this->notificationService->canBeRescheduled($notification), + 'errorCount' => $notification->getErrorCount(), + 'errorMessage' => $notification->getErrorMessage() ]; } @@ -395,4 +399,33 @@ private function buildResponseData(array $entities) return $result; } + + /** + * @Route( + * "/api/adyen/reschedule-notification/{notificationId}", + * name="admin.action.adyen.reschedule-notification", + * methods={"GET"} + * ) + * + * @param string $notificationId + * @return JsonResponse + */ + public function rescheduleNotification(string $notificationId): JsonResponse + { + $notification = $this->notificationService->getNotificationById($notificationId); + + if ($this->notificationService->canBeRescheduled($notification)) { + $scheduledProcessingTime = $this->notificationService->calculateScheduledProcessingTime( + $notification, + true + ); + // If notification was stuck in state Processing=true, reset the state and reschedule. + if ($notification->getProcessing()) { + $this->notificationService->changeNotificationState($notification->getId(), 'processing', false); + } + $this->notificationService->setNotificationSchedule($notification->getId(), $scheduledProcessingTime); + } + + return new JsonResponse($notificationId); + } } diff --git a/src/Entity/Notification/NotificationEntity.php b/src/Entity/Notification/NotificationEntity.php index dbd9b8eb..90ba3c5a 100644 --- a/src/Entity/Notification/NotificationEntity.php +++ b/src/Entity/Notification/NotificationEntity.php @@ -95,7 +95,7 @@ class NotificationEntity extends Entity protected $done; /** - * @var string + * @var bool */ protected $processing; @@ -307,17 +307,17 @@ public function setDone(bool $done): void } /** - * @return string + * @return bool */ - public function getProcessing(): string + public function getProcessing(): bool { return $this->processing; } /** - * @param string $processing + * @param bool $processing */ - public function setProcessing(string $processing): void + public function setProcessing(bool $processing): void { $this->processing = $processing; } @@ -357,7 +357,7 @@ public function setErrorCount(string $errorCount): void /** * @return string */ - public function getErrorMessage(): string + public function getErrorMessage(): ?string { return $this->errorMessage; } diff --git a/src/Handlers/AbstractPaymentMethodHandler.php b/src/Handlers/AbstractPaymentMethodHandler.php index a2718d07..12f43e27 100644 --- a/src/Handlers/AbstractPaymentMethodHandler.php +++ b/src/Handlers/AbstractPaymentMethodHandler.php @@ -61,6 +61,7 @@ use Shopware\Core\System\Currency\CurrencyEntity; use Adyen\Shopware\Exception\CurrencyNotFoundException; use Shopware\Core\System\SalesChannel\SalesChannelContext; +use Shopware\Storefront\Framework\Routing\Router; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Session; @@ -318,7 +319,7 @@ public function pay( } // Payment had no error, continue the process - return new RedirectResponse($this->getAdyenReturnUrl($transaction)); + return new RedirectResponse($this->getAdyenReturnUrl($transaction, $salesChannelContext)); } /** @@ -416,7 +417,7 @@ protected function preparePaymentsRequest( $shippingState = $salesChannelContext->getShippingLocation() ->getAddress()->getCountryState()->getShortCode(); } else { - $shippingState = ''; + $shippingState = 'n/a'; } $shippingStreetAddress = $this->getSplitStreetAddressHouseNumber( @@ -439,7 +440,7 @@ protected function preparePaymentsRequest( $billingState = $salesChannelContext->getCustomer() ->getActiveBillingAddress()->getCountryState()->getShortCode(); } else { - $billingState = ''; + $billingState = 'n/a'; } $billingStreetAddress = $this->getSplitStreetAddressHouseNumber( @@ -548,7 +549,7 @@ protected function preparePaymentsRequest( ), $transaction->getOrder()->getOrderNumber(), $this->configurationService->getMerchantAccount($salesChannelContext->getSalesChannel()->getId()), - $this->getAdyenReturnUrl($transaction), + $this->getAdyenReturnUrl($transaction, $salesChannelContext), $request ); @@ -565,7 +566,6 @@ protected function preparePaymentsRequest( //Getting line price $price = $orderLine->getPrice(); - if (empty($orderLine->getProductId()) || $orderLine->getType() !== LineItem::PRODUCT_LINE_ITEM_TYPE) { continue; } @@ -587,6 +587,15 @@ protected function preparePaymentsRequest( $transaction->getOrder()->getCurrencyId(), $salesChannelContext->getContext() ); + + if (!is_null($product->getSeoUrls())) { + $hostname = $salesChannelContext->getSalesChannel()->getDomains()->first()->getUrl(); + $productPath = $product->getSeoUrls()->first()->getPathInfo(); + $productUrl = str_replace('//', '/', $hostname . $productPath); + } else { + $productUrl = null; + } + //Building open invoice line $lineItems[] = $this->openInvoiceBuilder->buildOpenInvoiceLineItem( $productName, @@ -602,7 +611,14 @@ protected function preparePaymentsRequest( $taxRate * 100, $orderLine->getQuantity(), '', - $productNumber + $productNumber, + $productUrl, + $product->getCover() ? $product->getCover()->getMedia()->getUrl() : null, + $this->currency->sanitize( + $price->getUnitPrice(), + $currency + ), + $product->getCategories() ? $product->getCategories()->first()->getName() : null ); } @@ -613,7 +629,8 @@ protected function preparePaymentsRequest( if (!empty($stateDataAdditionalData['origin'])) { $request['origin'] = $stateDataAdditionalData['origin']; } else { - $request['origin'] = $this->salesChannelRepository->getSalesChannelUrl($salesChannelContext); + $origin = $this->salesChannelRepository->getCurrentDomainUrl($salesChannelContext); + $request['origin'] = $origin; } $request['additionalData']['allow3DS2'] = true; @@ -636,7 +653,7 @@ protected function preparePaymentsRequest( * @return string * @throws AsyncPaymentProcessException */ - private function getAdyenReturnUrl(AsyncPaymentTransactionStruct $transaction): string + private function getAdyenReturnUrl(AsyncPaymentTransactionStruct $transaction, SalesChannelContext $context): string { // Parse the original return URL to retrieve the query parameters $returnUrlQuery = parse_url($transaction->getReturnUrl(), PHP_URL_QUERY); @@ -649,19 +666,21 @@ private function getAdyenReturnUrl(AsyncPaymentTransactionStruct $transaction): ); } + $baseUrl = $this->salesChannelRepository->getCurrentDomainUrl($context); + // Generate the custom Adyen endpoint to receive the redirect from the issuer page - $adyenReturnUrl = $this->router->generate( + $adyenReturnPath = $this->router->generate( 'payment.adyen.redirect_result', [ RedirectResultController::CSRF_TOKEN => $this->csrfTokenManager->getToken( 'payment.finalize.transaction' )->getValue() ], - RouterInterface::ABSOLUTE_URL + RouterInterface::ABSOLUTE_PATH ); // Create the adyen redirect result URL with the same query as the original return URL - return $adyenReturnUrl . '&' . $returnUrlQuery; + return $baseUrl . $adyenReturnPath . '&' . $returnUrlQuery; } /** @@ -693,6 +712,10 @@ private function getProduct(string $productId, Context $context): ProductEntity { $criteria = new Criteria([$productId]); + $criteria->addAssociation('seoUrls'); + $criteria->addAssociation('cover'); + $criteria->addAssociation('categories'); + /** @var ProductCollection $productCollection */ $productCollection = $this->productRepository->search($criteria, $context); diff --git a/src/Handlers/AffirmPaymentMethodHandler.php b/src/Handlers/AffirmPaymentMethodHandler.php new file mode 100644 index 00000000..3aa8fb88 --- /dev/null +++ b/src/Handlers/AffirmPaymentMethodHandler.php @@ -0,0 +1,36 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class AffirmPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static $isOpenInvoice = true; + + public static function getPaymentMethodCode() + { + return 'affirm'; + } +} diff --git a/src/Handlers/MbwayPaymentMethodHandler.php b/src/Handlers/MbwayPaymentMethodHandler.php new file mode 100644 index 00000000..7dadeb73 --- /dev/null +++ b/src/Handlers/MbwayPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class MbwayPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'mbway'; + } +} diff --git a/src/Handlers/MobilePayPaymentMethodHandler.php b/src/Handlers/MobilePayPaymentMethodHandler.php new file mode 100644 index 00000000..a9fa5274 --- /dev/null +++ b/src/Handlers/MobilePayPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class MobilePayPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'mobilepay'; + } +} diff --git a/src/Handlers/MultibancoPaymentMethodHandler.php b/src/Handlers/MultibancoPaymentMethodHandler.php new file mode 100644 index 00000000..33ad4c6f --- /dev/null +++ b/src/Handlers/MultibancoPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class MultibancoPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'multibanco'; + } +} diff --git a/src/Handlers/PayBrightPaymentMethodHandler.php b/src/Handlers/PayBrightPaymentMethodHandler.php new file mode 100644 index 00000000..3a11fa77 --- /dev/null +++ b/src/Handlers/PayBrightPaymentMethodHandler.php @@ -0,0 +1,36 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class PayBrightPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static $isOpenInvoice = true; + + public static function getPaymentMethodCode() + { + return 'paybright'; + } +} diff --git a/src/Handlers/VippsPaymentMethodHandler.php b/src/Handlers/VippsPaymentMethodHandler.php new file mode 100644 index 00000000..029533ee --- /dev/null +++ b/src/Handlers/VippsPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class VippsPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'vipps'; + } +} diff --git a/src/Handlers/WechatpayqrPaymentMethodHandler.php b/src/Handlers/WechatpayqrPaymentMethodHandler.php new file mode 100644 index 00000000..ed084e91 --- /dev/null +++ b/src/Handlers/WechatpayqrPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class WechatpayqrPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'wechatpayQR'; + } +} diff --git a/src/Handlers/WechatpaywebPaymentMethodHandler.php b/src/Handlers/WechatpaywebPaymentMethodHandler.php new file mode 100644 index 00000000..c6ae186d --- /dev/null +++ b/src/Handlers/WechatpaywebPaymentMethodHandler.php @@ -0,0 +1,34 @@ + + */ + +namespace Adyen\Shopware\Handlers; + +class WechatpaywebPaymentMethodHandler extends AbstractPaymentMethodHandler +{ + public static function getPaymentMethodCode() + { + return 'wechatpayWeb'; + } +} diff --git a/src/PaymentMethods/AffirmPaymentMethod.php b/src/PaymentMethods/AffirmPaymentMethod.php new file mode 100755 index 00000000..2b282097 --- /dev/null +++ b/src/PaymentMethods/AffirmPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\AffirmPaymentMethodHandler; + +class AffirmPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'Affirm'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Buy now, pay later'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return AffirmPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_AFFIRM'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'affirm.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/MbwayPaymentMethod.php b/src/PaymentMethods/MbwayPaymentMethod.php new file mode 100755 index 00000000..457a2ded --- /dev/null +++ b/src/PaymentMethods/MbwayPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\MbwayPaymentMethodHandler; + +class MbwayPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'MB Way'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Digital wallet'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return MbwayPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_MBWAY'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'mbway.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/MobilePayPaymentMethod.php b/src/PaymentMethods/MobilePayPaymentMethod.php new file mode 100755 index 00000000..9a70f516 --- /dev/null +++ b/src/PaymentMethods/MobilePayPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\MobilePayPaymentMethodHandler; + +class MobilePayPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'MobilePay'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Digital wallet'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return MobilePayPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_MOBILEPAY'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'mobilepay.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/MultibancoPaymentMethod.php b/src/PaymentMethods/MultibancoPaymentMethod.php new file mode 100755 index 00000000..2fd68984 --- /dev/null +++ b/src/PaymentMethods/MultibancoPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\MultibancoPaymentMethodHandler; + +class MultibancoPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'Multibanco'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Voucher payment method'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return MultibancoPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_MULTIBANCO'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'multibanco.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/PayBrightPaymentMethod.php b/src/PaymentMethods/PayBrightPaymentMethod.php new file mode 100755 index 00000000..96cc39ad --- /dev/null +++ b/src/PaymentMethods/PayBrightPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\PayBrightPaymentMethodHandler; + +class PayBrightPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'PayBright'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Buy now, pay later'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return PayBrightPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_PAYBRIGHT'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'paybright.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/PaymentMethods.php b/src/PaymentMethods/PaymentMethods.php index 263ce313..4a047fc3 100644 --- a/src/PaymentMethods/PaymentMethods.php +++ b/src/PaymentMethods/PaymentMethods.php @@ -73,6 +73,14 @@ class PaymentMethods BeautyGiftCardPaymentMethod::class, SVSGiftCardPaymentMethod::class, FashionChequeGiftCardPaymentMethod::class, - DeCadeaukaartGiftCardPaymentMethod::class + DeCadeaukaartGiftCardPaymentMethod::class, + PayBrightPaymentMethod::class, + AffirmPaymentMethod::class, + WechatpaywebPaymentMethod::class, + WechatpayqrPaymentMethod::class, + MultibancoPaymentMethod::class, + MbwayPaymentMethod::class, + VippsPaymentMethod::class, + MobilePayPaymentMethod::class ]; } diff --git a/src/PaymentMethods/VippsPaymentMethod.php b/src/PaymentMethods/VippsPaymentMethod.php new file mode 100755 index 00000000..596a1143 --- /dev/null +++ b/src/PaymentMethods/VippsPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\VippsPaymentMethodHandler; + +class VippsPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'Vipps'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Digital wallet'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return VippsPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_VIPPS'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'vipps.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/WechatpayqrPaymentMethod.php b/src/PaymentMethods/WechatpayqrPaymentMethod.php new file mode 100755 index 00000000..8d35194f --- /dev/null +++ b/src/PaymentMethods/WechatpayqrPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\WechatpayqrPaymentMethodHandler; + +class WechatpayqrPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'WeChat Pay QR'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Digital wallet'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return WechatpayqrPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_WECHATPAYQR'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'wechatpay.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/PaymentMethods/WechatpaywebPaymentMethod.php b/src/PaymentMethods/WechatpaywebPaymentMethod.php new file mode 100755 index 00000000..c4cf2043 --- /dev/null +++ b/src/PaymentMethods/WechatpaywebPaymentMethod.php @@ -0,0 +1,100 @@ + + */ + +namespace Adyen\Shopware\PaymentMethods; + +use Adyen\Shopware\Handlers\WechatpaywebPaymentMethodHandler; + +class WechatpaywebPaymentMethod implements PaymentMethodInterface +{ + /** + * {@inheritDoc} + * + * @return string + */ + public function getName(): string + { + return 'WeChat Pay Web'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getDescription(): string + { + return 'Digital wallet'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getPaymentHandler(): string + { + return WechatpaywebPaymentMethodHandler::class; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getGatewayCode(): string + { + return 'ADYEN_WECHATPAYWEB'; + } + + /** + * {@inheritDoc} + * + * @return string|null + */ + public function getTemplate(): ?string + { + return null; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getLogo(): string + { + return 'wechatpay.png'; + } + + /** + * {@inheritDoc} + * + * @return string + */ + public function getType(): string + { + return 'redirect'; + } +} diff --git a/src/Resources/app/administration/src/component/adyen-notifications/adyen-notifications.html.twig b/src/Resources/app/administration/src/component/adyen-notifications/adyen-notifications.html.twig index d158d7f9..cb176c26 100644 --- a/src/Resources/app/administration/src/component/adyen-notifications/adyen-notifications.html.twig +++ b/src/Resources/app/administration/src/component/adyen-notifications/adyen-notifications.html.twig @@ -1,12 +1,28 @@
+ v-if="notifications.length" + :dataSource="notifications" + :columns="columns" + :showActions="true" + :showSelection="false" + :showSettings="true" + > + {% block sw_data_grid_body_columns %} + {% block sw_data_grid_column_actions %} + + {% endblock %} + {% endblock %} +

{{ $tc('adyen.noNotificationsReceived') }}

-
\ No newline at end of file + diff --git a/src/Resources/app/administration/src/component/adyen-notifications/index.js b/src/Resources/app/administration/src/component/adyen-notifications/index.js index 7b84b092..2e081bf2 100644 --- a/src/Resources/app/administration/src/component/adyen-notifications/index.js +++ b/src/Resources/app/administration/src/component/adyen-notifications/index.js @@ -20,7 +20,7 @@ * */ -const { Component } = Shopware; +const { Component, Mixin } = Shopware; import template from './adyen-notifications.html.twig'; @@ -29,6 +29,10 @@ Component.register('adyen-notifications', { inject: ['adyenService'], + mixins: [ + Mixin.getByName('notification') + ], + props: { order: { type: Object, @@ -47,6 +51,8 @@ Component.register('adyen-notifications', { { property: 'status', label: this.$tc('adyen.columnHeaders.status') }, { property: 'createdAt', label: this.$tc('adyen.columnHeaders.created') }, { property: 'updatedAt', label: this.$tc('adyen.columnHeaders.updated') }, + { property: 'errorCount', label: this.$tc('adyen.columnHeaders.errorCount') }, + { property: 'errorMessage', label: this.$tc('adyen.columnHeaders.errorMessage') }, ], showWidget: false, } @@ -57,6 +63,17 @@ Component.register('adyen-notifications', { this.adyenService.fetchNotifications(this.order.id).then((res) => { this.notifications = res; }); + }, + + onReschedule(item) { + this.adyenService.rescheduleNotification(item.notificationId).then((response) => { + this.createNotificationSuccess({ + title: this.$tc('adyen.reprocessNotification'), + message: this.$tc('adyen.notificationRescheduleSuccess') + }); + + this.fetchNotifications(); + }); } }, @@ -66,4 +83,4 @@ Component.register('adyen-notifications', { this.fetchNotifications(); } } -}) \ No newline at end of file +}) diff --git a/src/Resources/app/administration/src/service/adyenService.js b/src/Resources/app/administration/src/service/adyenService.js index 835e425c..bd129e57 100644 --- a/src/Resources/app/administration/src/service/adyenService.js +++ b/src/Resources/app/administration/src/service/adyenService.js @@ -114,6 +114,21 @@ class ApiClient extends ApiService { }); } + rescheduleNotification(notificationId) { + const headers = this.getBasicHeaders({}); + + return this.httpClient + .get(this.getApiBasePath() + '/reschedule-notification/' + notificationId , { + headers + }) + .then((response) => { + return ApiService.handleResponse(response); + }).catch((error) => { + console.error('An error occurred: ' + error.message); + throw error; + }); + } + isAdyenOrder(order) { const orderTransactions = order.transactions; let isAdyen = false; diff --git a/src/Resources/app/administration/src/snippet/en_GB.json b/src/Resources/app/administration/src/snippet/en_GB.json index ce675a8e..240ff452 100644 --- a/src/Resources/app/administration/src/snippet/en_GB.json +++ b/src/Resources/app/administration/src/snippet/en_GB.json @@ -19,8 +19,12 @@ "event": "Event", "success": "Success", "created": "Created", - "updated": "Updated" + "updated": "Updated", + "errorCount": "Error Count", + "errorMessage": "Error Message" }, + "reprocessNotification": "Reprocess Notification", + "notificationRescheduleSuccess": "Notification will be processed again.", "notificationsTitle": "Adyen Webhook Notifications", "noNotificationsReceived": "No webhook notifications received.", "adyenPaymentCaptureTitle": "Adyen Capture Requests", diff --git a/src/Resources/app/storefront/dist/storefront/js/adyen-payment-shopware6.js b/src/Resources/app/storefront/dist/storefront/js/adyen-payment-shopware6.js index 7e852a21..dc898fe4 100644 --- a/src/Resources/app/storefront/dist/storefront/js/adyen-payment-shopware6.js +++ b/src/Resources/app/storefront/dist/storefront/js/adyen-payment-shopware6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([["adyen-payment-shopware6"],{YcTq:function(e,t,n){"use strict";t.a={updatablePaymentMethods:["scheme","ideal","sepadirectdebit","oneclick","dotpay","bcmc","bcmc_mobile","blik","eps","facilypay_3x","facilypay_4x","facilypay_6x","facilypay_10x","facilypay_12x","afterpay_default","ratepay","ratepay_directdebit","giftcard"],componentsWithPayButton:{applepay:{extra:{},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)}},paywithgoogle:{extra:{buttonSizeMode:"fill"},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)},onError:function(e,t,n){"CANCELED"!==e.statusCode&&("statusMessage"in e?console.log(e.statusMessage):console.log(e.statusCode))}},paypal:{extra:{},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()},onError:function(e,t,n){t.setStatus("ready"),window.location.href=n.errorUrl.toString()},onCancel:function(e,t,n){t.setStatus("ready"),window.location.href=n.errorUrl.toString()},responseHandler:function(e,t){try{(t=JSON.parse(t)).isFinal&&(location.href=e.returnUrl),this.handleAction(t.action)}catch(e){console.error(e)}}},amazonpay:{extra:{productType:"PayAndShip",checkoutMode:"ProcessOrder",returnUrl:location.href},prePayRedirect:!0,sessionKey:"amazonCheckoutSessionId",onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)},onError:function(e,t){console.log(e),t.setStatus("ready")}}},paymentMethodTypeHandlers:{scheme:"handler_adyen_cardspaymentmethodhandler",ideal:"handler_adyen_idealpaymentmethodhandler",klarna:"handler_adyen_klarnapaylaterpaymentmethodhandler",klarna_account:"handler_adyen_klarnaaccountpaymentmethodhandler",klarna_paynow:"handler_adyen_klarnapaynowpaymentmethodhandler",ratepay:"handler_adyen_ratepaypaymentmethodhandler",ratepay_directdebit:"handler_adyen_ratepaydirectdebitpaymentmethodhandler",sepadirectdebit:"handler_adyen_sepapaymentmethodhandler",sofort:"handler_adyen_sofortpaymentmethodhandler",paypal:"handler_adyen_paypalpaymentmethodhandler",oneclick:"handler_adyen_oneclickpaymentmethodhandler",giropay:"handler_adyen_giropaypaymentmethodhandler",applepay:"handler_adyen_applepaypaymentmethodhandler",paywithgoogle:"handler_adyen_googlepaypaymentmethodhandler",dotpay:"handler_adyen_dotpaypaymentmethodhandler",bcmc:"handler_adyen_bancontactcardpaymentmethodhandler",bcmc_mobile:"handler_adyen_bancontactmobilepaymentmethodhandler",amazonpay:"handler_adyen_amazonpaypaymentmethodhandler",twint:"handler_adyen_twintpaymentmethodhandler",eps:"handler_adyen_epspaymentmethodhandler",swish:"handler_adyen_swishpaymentmethodhandler",alipay:"handler_adyen_alipaypaymentmethodhandler",alipay_hk:"handler_adyen_alipayhkpaymentmethodhandler",blik:"handler_adyen_blikpaymentmethodhandler",clearpay:"handler_adyen_clearpaypaymentmethodhandler",facilypay_3x:"handler_adyen_facilypay3xpaymentmethodhandler",facilypay_4x:"handler_adyen_facilypay4xpaymentmethodhandler",facilypay_6x:"handler_adyen_facilypay6xpaymentmethodhandler",facilypay_10x:"handler_adyen_facilypay10xpaymentmethodhandler",facilypay_12x:"handler_adyen_facilypay12xpaymentmethodhandler",afterpay_default:"handler_adyen_afterpaydefaultpaymentmethodhandler",trustly:"handler_adyen_trustlypaymentmethodhandler",paysafecard:"handler_adyen_paysafecardpaymentmethodhandler",givex:"handler_adyen_givexgiftcardpaymentmethodhandler",webshopgiftcard:"handler_adyen_webshopgiftcardpaymentmethodhandler",kadowereld:"handler_adyen_kadowereldgiftcardpaymentmethodhandler",tcstestgiftcard:"handler_adyen_tcstestgiftcardpaymentmethodhandler",albelligiftcard:"handler_adyen_albelligiftcardpaymentmethodhandler",bijcadeaucard:"handler_adyen_bijenkorfgiftcardpaymentmethodhandler",vvvgiftcard:"handler_adyen_vvvgiftcardpaymentmethodhandler",genericgiftcard:"handler_adyen_genericgiftcardpaymentmethodhandler",gallgall:"handler_adyen_gallgallgiftcardpaymentmethodhandler",hmlingerie:"handler_adyen_hunkemollerlingeriegiftcardpaymentmethodhandler",beautycadeaukaart:"handler_adyen_beautygiftcardpaymentmethodhandler",svs:"handler_adyen_svsgiftcardpaymentmethodhandler",fashioncheque:"handler_adyen_fashionchequegiftcardpaymentmethodhandler",decadeaukaart:"handler_adyen_decadeaukaartgiftcardpaymentmethodhandler"}}},j5lx:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return _}));var a=n("FGIj"),r=n("gHbT"),o=n("p4AR"),i=n("2Y4b"),d=n("u0Tz"),s=n("YcTq");function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(){return(h=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},n=adyenCheckoutOptions.orderId,a=null,r=null;n?(e.set("orderId",n),a=adyenCheckoutOptions.updatePaymentUrl,r=this.afterSetPayment.bind(this,t)):(a=adyenCheckoutOptions.checkoutOrderUrl,r=this.afterCreateOrder.bind(this,t)),this._client.post(a,e,r)}},{key:"afterCreateOrder",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;try{e=JSON.parse(n)}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",n)}this.orderId=e.id,this.finishUrl=new URL(location.origin+adyenCheckoutOptions.paymentFinishUrl),this.finishUrl.searchParams.set("orderId",e.id),this.errorUrl=new URL(location.origin+adyenCheckoutOptions.paymentErrorUrl),this.errorUrl.searchParams.set("orderId",e.id);var a={orderId:this.orderId,finishUrl:this.finishUrl.toString(),errorUrl:this.errorUrl.toString()};for(var r in t)a[r]=t[r];this._client.post(adyenCheckoutOptions.paymentHandleUrl,JSON.stringify(a),this.afterPayOrder.bind(this,this.orderId))}},{key:"afterSetPayment",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;try{var n=JSON.parse(t);n.success&&this.afterCreateOrder(e,JSON.stringify({id:adyenCheckoutOptions.orderId}))}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",t)}}},{key:"afterPayOrder",value:function(e,t){try{t=JSON.parse(t),this.returnUrl=t.redirectUrl}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",t)}this.returnUrl===this.errorUrl.toString()&&(location.href=this.returnUrl);try{this._client.post("".concat(adyenCheckoutOptions.paymentStatusUrl),JSON.stringify({orderId:e}),this.responseHandler.bind(this))}catch(e){console.log(e)}}},{key:"handlePaymentAction",value:function(t){try{var n=JSON.parse(t);n.isFinal&&(location.href=this.returnUrl),n.action&&(this.adyenCheckout.createFromAction(n.action).mount("[data-adyen-payment-action-container]"),["threeDS2","qrCode"].includes(n.action.type)&&e("[data-adyen-payment-action-modal]").modal({show:!0}))}catch(e){console.log(e)}}},{key:"initializeCustomPayButton",value:function(){var e=this,t=s.a.componentsWithPayButton[this.selectedAdyenPaymentMethod];this.completePendingPayment(this.selectedAdyenPaymentMethod,t);var n=this.adyenCheckout.paymentMethodsResponse.paymentMethods.filter((function(t){return t.type===e.selectedAdyenPaymentMethod}));if(!(n.length<1)){var a=n[0];if(adyenCheckoutOptions.amount)if(t.prePayRedirect)this.renderPrePaymentButton(t,a);else{var r=h(t.extra,a,{amount:{value:adyenCheckoutOptions.amount,currency:adyenCheckoutOptions.currency},data:{personalDetails:shopperDetails,billingAddress:activeBillingAddress,deliveryAddress:activeShippingAddress},onClick:function(n,a){if(!t.onClick(n,a,e))return!1;d.a.create(document.body)},onSubmit:function(e,n){if(e.isValid){var a={stateData:JSON.stringify(e.data)},r=i.a.serialize(this.confirmOrderForm);"responseHandler"in t&&(this.responseHandler=t.responseHandler.bind(n,this)),this.confirmOrder(r,a)}else n.showValidation(),"test"===this.adyenCheckout.options.environment&&console.log("Payment failed: ",e)}.bind(this),onCancel:function(n,a){d.a.remove(document.body),t.onCancel(n,a,e)},onError:function(n,a){"PayPal"===a.props.name&&"CANCEL"===n.name&&e._client.post("".concat(adyenCheckoutOptions.cancelOrderTransactionUrl),JSON.stringify({orderId:e.orderId})),d.a.remove(document.body),t.onError(n,a,e),console.log(n)}}),o=this.adyenCheckout.create(a.type,r);try{"isAvailable"in o?o.isAvailable().then(function(){this.mountCustomPayButton(o)}.bind(this)).catch((function(e){console.log(a.type+" is not available",e)})):this.mountCustomPayButton(o)}catch(e){console.log(e)}}else console.error("Failed to fetch Cart/Order total amount.")}}},{key:"renderPrePaymentButton",value:function(e,t){var n=this;"amazonpay"===t.type&&(e.extra=this.setAddressDetails(e.extra));var a=h(e.extra,t,{configuration:t.configuration,amount:{value:adyenCheckoutOptions.amount,currency:adyenCheckoutOptions.currency},onClick:function(t,a){if(!e.onClick(t,a,n))return!1;d.a.create(document.body)},onError:function(t,a){d.a.remove(document.body),e.onError(t,a,n),console.log(t)}}),r=this.adyenCheckout.create(t.type,a);this.mountCustomPayButton(r)}},{key:"completePendingPayment",value:function(e,t){var n=new URL(location.href);if(n.searchParams.has(t.sessionKey)){var a;d.a.create(document.body);var r=this.adyenCheckout.create(e,(l(a={},t.sessionKey,n.searchParams.get(t.sessionKey)),l(a,"showOrderButton",!1),l(a,"onSubmit",function(e,t){if(e.isValid){var n={stateData:JSON.stringify(e.data)},a=i.a.serialize(this.confirmOrderForm);this.confirmOrder(a,n)}}.bind(this)),a));this.mountCustomPayButton(r),r.submit()}}},{key:"getSelectedPaymentMethodKey",value:function(){return Object.keys(s.a.paymentMethodTypeHandlers).find((function(e){return s.a.paymentMethodTypeHandlers[e]===adyenCheckoutOptions.selectedPaymentMethodHandler}))}},{key:"mountCustomPayButton",value:function(e){var t=document.querySelector("#confirmOrderForm");if(t){var n=t.querySelector("button[type=submit]");if(n&&!n.disabled){var a=document.createElement("div");a.id="adyen-confirm-button",a.setAttribute("data-adyen-confirm-button",""),t.appendChild(a),e.mount(a),n.remove()}}}},{key:"mountPaymentComponent",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=h({},e,{data:{personalDetails:shopperDetails,billingAddress:activeBillingAddress,deliveryAddress:activeShippingAddress},onSubmit:function(e,t){if(e.isValid){var n={stateData:JSON.stringify(e.data)},a=i.a.serialize(this.confirmOrderForm);d.a.create(document.body),this.confirmOrder(a,n)}else t.showValidation(),"test"===this.adyenCheckout.options.environment&&console.log("Payment failed: ",e)}.bind(this)});!t&&"scheme"===e.type&&adyenCheckoutOptions.displaySaveCreditCardOption&&(n.enableStoreDetails=!0);try{var a=this.adyenCheckout.create(e.type,n);a.mount("#"+this.el.id),this.confirmFormSubmit.addEventListener("click",function(e){r.a.querySelector(document,"#confirmOrderForm").checkValidity()&&(e.preventDefault(),this.el.parentNode.scrollIntoView({behavior:"smooth",block:"start"}),a.submit())}.bind(this))}catch(t){return console.error(e.type,t),!1}}},{key:"setAddressDetails",value:function(e){return""!==activeShippingAddress.phoneNumber?e.addressDetails={name:shopperDetails.firstName+" "+shopperDetails.lastName,addressLine1:activeShippingAddress.street,city:activeShippingAddress.city,postalCode:activeShippingAddress.postalCode,countryCode:activeShippingAddress.country,phoneNumber:activeShippingAddress.phoneNumber}:e.productType="PayOnly",e}}])&&m(a.prototype,c),_&&m(a,_),n}(a.a)}).call(this,n("UoTJ"))},jC4o:function(e,t,n){"use strict";n.r(t);var a=n("j5lx");window.PluginManager.register("ConfirmOrderPlugin",a.a,"#adyen-payment-checkout-mask")}},[["jC4o","runtime","vendor-node","vendor-shared"]]]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([["adyen-payment-shopware6"],{HNRU:function(e,t,n){"use strict";t.a={updatablePaymentMethods:["scheme","ideal","sepadirectdebit","oneclick","dotpay","bcmc","bcmc_mobile","blik","eps","facilypay_3x","facilypay_4x","facilypay_6x","facilypay_10x","facilypay_12x","afterpay_default","ratepay","ratepay_directdebit","giftcard","paybright","affirm","multibanco","mbway","vipps","mobilepay","wechatpayQR","wechatpayWeb"],componentsWithPayButton:{applepay:{extra:{},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)}},paywithgoogle:{extra:{buttonSizeMode:"fill"},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)},onError:function(e,t,n){"CANCELED"!==e.statusCode&&("statusMessage"in e?console.log(e.statusMessage):console.log(e.statusCode))}},paypal:{extra:{},onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()},onError:function(e,t,n){t.setStatus("ready"),window.location.href=n.errorUrl.toString()},onCancel:function(e,t,n){t.setStatus("ready"),window.location.href=n.errorUrl.toString()},responseHandler:function(e,t){try{(t=JSON.parse(t)).isFinal&&(location.href=e.returnUrl),this.handleAction(t.action)}catch(e){console.error(e)}}},amazonpay:{extra:{productType:"PayAndShip",checkoutMode:"ProcessOrder",returnUrl:location.href},prePayRedirect:!0,sessionKey:"amazonCheckoutSessionId",onClick:function(e,t,n){return n.confirmOrderForm.checkValidity()?(e(),!0):(t(),!1)},onError:function(e,t){console.log(e),t.setStatus("ready")}}},paymentMethodTypeHandlers:{scheme:"handler_adyen_cardspaymentmethodhandler",ideal:"handler_adyen_idealpaymentmethodhandler",klarna:"handler_adyen_klarnapaylaterpaymentmethodhandler",klarna_account:"handler_adyen_klarnaaccountpaymentmethodhandler",klarna_paynow:"handler_adyen_klarnapaynowpaymentmethodhandler",ratepay:"handler_adyen_ratepaypaymentmethodhandler",ratepay_directdebit:"handler_adyen_ratepaydirectdebitpaymentmethodhandler",sepadirectdebit:"handler_adyen_sepapaymentmethodhandler",sofort:"handler_adyen_sofortpaymentmethodhandler",paypal:"handler_adyen_paypalpaymentmethodhandler",oneclick:"handler_adyen_oneclickpaymentmethodhandler",giropay:"handler_adyen_giropaypaymentmethodhandler",applepay:"handler_adyen_applepaypaymentmethodhandler",paywithgoogle:"handler_adyen_googlepaypaymentmethodhandler",dotpay:"handler_adyen_dotpaypaymentmethodhandler",bcmc:"handler_adyen_bancontactcardpaymentmethodhandler",bcmc_mobile:"handler_adyen_bancontactmobilepaymentmethodhandler",amazonpay:"handler_adyen_amazonpaypaymentmethodhandler",twint:"handler_adyen_twintpaymentmethodhandler",eps:"handler_adyen_epspaymentmethodhandler",swish:"handler_adyen_swishpaymentmethodhandler",alipay:"handler_adyen_alipaypaymentmethodhandler",alipay_hk:"handler_adyen_alipayhkpaymentmethodhandler",blik:"handler_adyen_blikpaymentmethodhandler",clearpay:"handler_adyen_clearpaypaymentmethodhandler",facilypay_3x:"handler_adyen_facilypay3xpaymentmethodhandler",facilypay_4x:"handler_adyen_facilypay4xpaymentmethodhandler",facilypay_6x:"handler_adyen_facilypay6xpaymentmethodhandler",facilypay_10x:"handler_adyen_facilypay10xpaymentmethodhandler",facilypay_12x:"handler_adyen_facilypay12xpaymentmethodhandler",afterpay_default:"handler_adyen_afterpaydefaultpaymentmethodhandler",trustly:"handler_adyen_trustlypaymentmethodhandler",paysafecard:"handler_adyen_paysafecardpaymentmethodhandler",givex:"handler_adyen_givexgiftcardpaymentmethodhandler",webshopgiftcard:"handler_adyen_webshopgiftcardpaymentmethodhandler",kadowereld:"handler_adyen_kadowereldgiftcardpaymentmethodhandler",tcstestgiftcard:"handler_adyen_tcstestgiftcardpaymentmethodhandler",albelligiftcard:"handler_adyen_albelligiftcardpaymentmethodhandler",bijcadeaucard:"handler_adyen_bijenkorfgiftcardpaymentmethodhandler",vvvgiftcard:"handler_adyen_vvvgiftcardpaymentmethodhandler",genericgiftcard:"handler_adyen_genericgiftcardpaymentmethodhandler",gallgall:"handler_adyen_gallgallgiftcardpaymentmethodhandler",hmlingerie:"handler_adyen_hunkemollerlingeriegiftcardpaymentmethodhandler",beautycadeaukaart:"handler_adyen_beautygiftcardpaymentmethodhandler",svs:"handler_adyen_svsgiftcardpaymentmethodhandler",fashioncheque:"handler_adyen_fashionchequegiftcardpaymentmethodhandler",decadeaukaart:"handler_adyen_decadeaukaartgiftcardpaymentmethodhandler",mbway:"handler_adyen_mbwaypaymentmethodhandler",multibanco:"handler_adyen_multibancopaymentmethodhandler",wechatpayQR:"handler_adyen_wechatpayqrpaymentmethodhandler",wechatpayWeb:"handler_adyen_wechatpaywebpaymentmethodhandler",mobilepay:"handler_adyen_mobilepaypaymentmethodhandler",vipps:"handler_adyen_vippspaymentmethodhandler",affirm:"handler_adyen_affirmpaymentmethodhandler",paybright:"handler_adyen_paybrightpaymentmethodhandler"}}},TVZM:function(e,t,n){"use strict";n.r(t);var r=n("h8V8"),a=n("FGIj"),o=(n("gHbT"),n("p4AR"));n("u0Tz");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t,n,r,a,o,i){try{var d=e[o](i),c=d.value}catch(e){return void n(e)}d.done?t(c):Promise.resolve(c).then(r,a)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=adyenCheckoutOptions.orderId,r=null,a=null;n?(e.set("orderId",n),r=adyenCheckoutOptions.updatePaymentUrl,a=this.afterSetPayment.bind(this,t)):(r=adyenCheckoutOptions.checkoutOrderUrl,a=this.afterCreateOrder.bind(this,t)),this._client.post(r,e,a)}},{key:"afterCreateOrder",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;try{e=JSON.parse(n)}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",n)}this.orderId=e.id,this.finishUrl=new URL(location.origin+adyenCheckoutOptions.paymentFinishUrl),this.finishUrl.searchParams.set("orderId",e.id),this.errorUrl=new URL(location.origin+adyenCheckoutOptions.paymentErrorUrl),this.errorUrl.searchParams.set("orderId",e.id);var r={orderId:this.orderId,finishUrl:this.finishUrl.toString(),errorUrl:this.errorUrl.toString()};for(var a in t)r[a]=t[a];this._client.post(adyenCheckoutOptions.paymentHandleUrl,JSON.stringify(r),this.afterPayOrder.bind(this,this.orderId))}},{key:"afterSetPayment",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;try{var n=JSON.parse(t);n.success&&this.afterCreateOrder(e,JSON.stringify({id:adyenCheckoutOptions.orderId}))}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",t)}}},{key:"afterPayOrder",value:function(e,t){try{t=JSON.parse(t),this.returnUrl=t.redirectUrl}catch(e){return d.a.remove(document.body),void console.log("Error: invalid response from Shopware API",t)}this.returnUrl===this.errorUrl.toString()&&(location.href=this.returnUrl);try{this._client.post("".concat(adyenCheckoutOptions.paymentStatusUrl),JSON.stringify({orderId:e}),this.responseHandler.bind(this))}catch(e){console.log(e)}}},{key:"handlePaymentAction",value:function(t){try{var n=JSON.parse(t);(n.isFinal||"voucher"===n.action.type)&&(location.href=this.returnUrl),n.action&&(this.adyenCheckout.createFromAction(n.action).mount("[data-adyen-payment-action-container]"),["threeDS2","qrCode"].includes(n.action.type)&&e("[data-adyen-payment-action-modal]").modal({show:!0}))}catch(e){console.log(e)}}},{key:"initializeCustomPayButton",value:function(){var e=this,t=c.a.componentsWithPayButton[this.selectedAdyenPaymentMethod];this.completePendingPayment(this.selectedAdyenPaymentMethod,t);var n=this.adyenCheckout.paymentMethodsResponse.paymentMethods.filter((function(t){return t.type===e.selectedAdyenPaymentMethod}));if(!(n.length<1)){var r=n[0];if(adyenCheckoutOptions.amount)if(t.prePayRedirect)this.renderPrePaymentButton(t,r);else{var a=y(t.extra,r,{amount:{value:adyenCheckoutOptions.amount,currency:adyenCheckoutOptions.currency},data:{personalDetails:shopperDetails,billingAddress:activeBillingAddress,deliveryAddress:activeShippingAddress},onClick:function(n,r){if(!t.onClick(n,r,e))return!1;d.a.create(document.body)},onSubmit:function(e,n){if(e.isValid){var r={stateData:JSON.stringify(e.data)},a=i.a.serialize(this.confirmOrderForm);"responseHandler"in t&&(this.responseHandler=t.responseHandler.bind(n,this)),this.confirmOrder(a,r)}else n.showValidation(),"test"===this.adyenCheckout.options.environment&&console.log("Payment failed: ",e)}.bind(this),onCancel:function(n,r){d.a.remove(document.body),t.onCancel(n,r,e)},onError:function(n,r){"PayPal"===r.props.name&&"CANCEL"===n.name&&e._client.post("".concat(adyenCheckoutOptions.cancelOrderTransactionUrl),JSON.stringify({orderId:e.orderId})),d.a.remove(document.body),t.onError(n,r,e),console.log(n)}}),o=this.adyenCheckout.create(r.type,a);try{"isAvailable"in o?o.isAvailable().then(function(){this.mountCustomPayButton(o)}.bind(this)).catch((function(e){console.log(r.type+" is not available",e)})):this.mountCustomPayButton(o)}catch(e){console.log(e)}}else console.error("Failed to fetch Cart/Order total amount.")}}},{key:"renderPrePaymentButton",value:function(e,t){var n=this;"amazonpay"===t.type&&(e.extra=this.setAddressDetails(e.extra));var r=y(e.extra,t,{configuration:t.configuration,amount:{value:adyenCheckoutOptions.amount,currency:adyenCheckoutOptions.currency},onClick:function(t,r){if(!e.onClick(t,r,n))return!1;d.a.create(document.body)},onError:function(t,r){d.a.remove(document.body),e.onError(t,r,n),console.log(t)}}),a=this.adyenCheckout.create(t.type,r);this.mountCustomPayButton(a)}},{key:"completePendingPayment",value:function(e,t){var n=new URL(location.href);if(n.searchParams.has(t.sessionKey)){var r;d.a.create(document.body);var a=this.adyenCheckout.create(e,(l(r={},t.sessionKey,n.searchParams.get(t.sessionKey)),l(r,"showOrderButton",!1),l(r,"onSubmit",function(e,t){if(e.isValid){var n={stateData:JSON.stringify(e.data)},r=i.a.serialize(this.confirmOrderForm);this.confirmOrder(r,n)}}.bind(this)),r));this.mountCustomPayButton(a),a.submit()}}},{key:"getSelectedPaymentMethodKey",value:function(){return Object.keys(c.a.paymentMethodTypeHandlers).find((function(e){return c.a.paymentMethodTypeHandlers[e]===adyenCheckoutOptions.selectedPaymentMethodHandler}))}},{key:"mountCustomPayButton",value:function(e){var t=document.querySelector("#confirmOrderForm");if(t){var n=t.querySelector("button[type=submit]");if(n&&!n.disabled){var r=document.createElement("div");r.id="adyen-confirm-button",r.setAttribute("data-adyen-confirm-button",""),t.appendChild(r),e.mount(r),n.remove()}}}},{key:"mountPaymentComponent",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=y({},e,{data:{personalDetails:shopperDetails,billingAddress:activeBillingAddress,deliveryAddress:activeShippingAddress},onSubmit:function(e,t){if(e.isValid){var n={stateData:JSON.stringify(e.data)},r=i.a.serialize(this.confirmOrderForm);d.a.create(document.body),this.confirmOrder(r,n)}else t.showValidation(),"test"===this.adyenCheckout.options.environment&&console.log("Payment failed: ",e)}.bind(this)});!t&&"scheme"===e.type&&adyenCheckoutOptions.displaySaveCreditCardOption&&(n.enableStoreDetails=!0);try{var r=this.adyenCheckout.create(e.type,n);r.mount("#"+this.el.id),this.confirmFormSubmit.addEventListener("click",function(e){a.a.querySelector(document,"#confirmOrderForm").checkValidity()&&(e.preventDefault(),this.el.parentNode.scrollIntoView({behavior:"smooth",block:"start"}),r.submit())}.bind(this))}catch(t){return console.error(e.type,t),!1}}},{key:"setAddressDetails",value:function(e){return""!==activeShippingAddress.phoneNumber?e.addressDetails={name:shopperDetails.firstName+" "+shopperDetails.lastName,addressLine1:activeShippingAddress.street,city:activeShippingAddress.city,postalCode:activeShippingAddress.postalCode,countryCode:activeShippingAddress.country,phoneNumber:activeShippingAddress.phoneNumber}:e.productType="PayOnly",e}}])&&p(r.prototype,s),v&&p(r,v),n}(r.a)}).call(this,n("UoTJ"))}},[["TVZM","runtime","vendor-node","vendor-shared"]]]); \ No newline at end of file diff --git a/src/Resources/app/storefront/src/checkout/confirm-order.plugin.js b/src/Resources/app/storefront/src/checkout/confirm-order.plugin.js index 2191c0a9..bfc5ffeb 100644 --- a/src/Resources/app/storefront/src/checkout/confirm-order.plugin.js +++ b/src/Resources/app/storefront/src/checkout/confirm-order.plugin.js @@ -249,7 +249,7 @@ export default class ConfirmOrderPlugin extends Plugin { handlePaymentAction(response) { try { const paymentResponse = JSON.parse(response); - if (paymentResponse.isFinal) { + if (paymentResponse.isFinal || paymentResponse.action.type === 'voucher') { location.href = this.returnUrl; } if (!!paymentResponse.action) { diff --git a/src/Resources/app/storefront/src/configuration/adyen.js b/src/Resources/app/storefront/src/configuration/adyen.js index f6037f7e..5760514b 100644 --- a/src/Resources/app/storefront/src/configuration/adyen.js +++ b/src/Resources/app/storefront/src/configuration/adyen.js @@ -24,7 +24,8 @@ export default { updatablePaymentMethods: [ 'scheme', 'ideal', 'sepadirectdebit', 'oneclick', 'dotpay', 'bcmc', 'bcmc_mobile', 'blik', 'eps', 'facilypay_3x', 'facilypay_4x', 'facilypay_6x', 'facilypay_10x', 'facilypay_12x', 'afterpay_default', 'ratepay', - 'ratepay_directdebit', 'giftcard' + 'ratepay_directdebit', 'giftcard', 'paybright', 'affirm', 'multibanco', 'mbway', 'vipps', 'mobilepay', + 'wechatpayQR', 'wechatpayWeb' ], componentsWithPayButton: { 'applepay': { @@ -158,6 +159,14 @@ export default { 'beautycadeaukaart': 'handler_adyen_beautygiftcardpaymentmethodhandler', 'svs': 'handler_adyen_svsgiftcardpaymentmethodhandler', 'fashioncheque': 'handler_adyen_fashionchequegiftcardpaymentmethodhandler', - 'decadeaukaart': 'handler_adyen_decadeaukaartgiftcardpaymentmethodhandler' + 'decadeaukaart': 'handler_adyen_decadeaukaartgiftcardpaymentmethodhandler', + 'mbway': 'handler_adyen_mbwaypaymentmethodhandler', + 'multibanco': 'handler_adyen_multibancopaymentmethodhandler', + 'wechatpayQR': 'handler_adyen_wechatpayqrpaymentmethodhandler', + 'wechatpayWeb': 'handler_adyen_wechatpaywebpaymentmethodhandler', + 'mobilepay': 'handler_adyen_mobilepaypaymentmethodhandler', + 'vipps': 'handler_adyen_vippspaymentmethodhandler', + 'affirm': 'handler_adyen_affirmpaymentmethodhandler', + 'paybright': 'handler_adyen_paybrightpaymentmethodhandler' } } diff --git a/src/Resources/app/storefront/src/finish/adyen-success-action.plugin.js b/src/Resources/app/storefront/src/finish/adyen-success-action.plugin.js new file mode 100644 index 00000000..dd7f5a1d --- /dev/null +++ b/src/Resources/app/storefront/src/finish/adyen-success-action.plugin.js @@ -0,0 +1,47 @@ +/* + * ###### + * ###### + * ############ ####( ###### #####. ###### ############ ############ + * ############# #####( ###### #####. ###### ############# ############# + * ###### #####( ###### #####. ###### ##### ###### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ##### ###### + * ###### ###### #####( ###### #####. ###### ##### ##### ###### + * ############# ############# ############# ############# ##### ###### + * ############ ############ ############# ############ ##### ###### + * ###### + * ############# + * ############ + * + * Adyen Payment Module + * + * Copyright (c) 2022 Adyen N.V. + * This file is open source and available under the MIT license. + * See the LICENSE file for more info. + * + */ + +import Plugin from 'src/plugin-system/plugin.class'; +import DomAccess from 'src/helper/dom-access.helper'; +import StoreApiClient from 'src/service/store-api-client.service'; +import ElementLoadingIndicatorUtil from 'src/utility/loading-indicator/element-loading-indicator.util'; + +export default class AdyenSuccessActionPlugin extends Plugin { + init() { + this._client = new StoreApiClient(); + this.adyenCheckout = Promise; + this.initializeCheckoutComponent().bind(this); + } + + async initializeCheckoutComponent () { + const { locale, clientKey, environment, action} = adyenSuccessActionConfiguration; + + const ADYEN_CHECKOUT_CONFIG = { + locale, + clientKey, + environment + }; + + this.adyenCheckout = await AdyenCheckout(ADYEN_CHECKOUT_CONFIG); + this.adyenCheckout.createFromAction(JSON.parse(action)).mount('#success-action-container'); + } +} diff --git a/src/Resources/app/storefront/src/main.js b/src/Resources/app/storefront/src/main.js index 61d42eb7..12a2822a 100644 --- a/src/Resources/app/storefront/src/main.js +++ b/src/Resources/app/storefront/src/main.js @@ -1,8 +1,10 @@ // Import all necessary Storefront plugins and scss files import ConfirmOrderPlugin from './checkout/confirm-order.plugin'; import AdyenGivingPlugin from './finish/adyen-giving.plugin'; +import AdyenSuccessAction from './finish/adyen-success-action.plugin'; // Register them via the existing PluginManager const PluginManager = window.PluginManager; PluginManager.register('ConfirmOrderPlugin', ConfirmOrderPlugin, '#adyen-payment-checkout-mask'); PluginManager.register('AdyenGivingPlugin', AdyenGivingPlugin, '#adyen-giving-container'); +PluginManager.register('AdyenSuccessAction', AdyenSuccessAction, '#adyen-success-action-container'); diff --git a/src/Resources/app/storefront/src/scss/base.scss b/src/Resources/app/storefront/src/scss/base.scss index 07b7fc46..cdd41e25 100644 --- a/src/Resources/app/storefront/src/scss/base.scss +++ b/src/Resources/app/storefront/src/scss/base.scss @@ -34,7 +34,8 @@ vertical-align: top; } -#donation-container { +#donation-container, +#success-action-container { margin-top: -50px; margin-bottom: 50px; } diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml index fd67ac12..02c45566 100644 --- a/src/Resources/config/services.xml +++ b/src/Resources/config/services.xml @@ -60,12 +60,23 @@ + + + + + + + + + + @@ -86,7 +97,7 @@ - + @@ -109,11 +120,6 @@ - - - - diff --git a/src/Resources/config/services/notification-processing.xml b/src/Resources/config/services/notification-processing.xml index ff8819b8..fdab630f 100644 --- a/src/Resources/config/services/notification-processing.xml +++ b/src/Resources/config/services/notification-processing.xml @@ -48,12 +48,10 @@ - - - + diff --git a/src/Resources/config/services/payment-handlers.xml b/src/Resources/config/services/payment-handlers.xml index d23a0453..aa83fda0 100644 --- a/src/Resources/config/services/payment-handlers.xml +++ b/src/Resources/config/services/payment-handlers.xml @@ -237,5 +237,37 @@ parent="Adyen\Shopware\Handlers\AbstractPaymentMethodHandler"> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/public/administration/js/adyen-payment-shopware6.js b/src/Resources/public/administration/js/adyen-payment-shopware6.js index 50794b2f..943e01bc 100644 --- a/src/Resources/public/administration/js/adyen-payment-shopware6.js +++ b/src/Resources/public/administration/js/adyen-payment-shopware6.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/bundles/adyenpaymentshopware6/",n(n.s="RgpO")}({"6MJt":function(e,t,n){},A4Za:function(e,t){e.exports='\n Adyen Payment Reference:\n \n {{ paymentReference }}\n \n\n'},Fxip:function(e,t,n){var r=n("xIYV");r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);(0,n("SZ7m").default)("3299a05e",r,!0,{})},"G9C/":function(e,t){e.exports='{% block sw_order_detail_header_title_new %}\n {% parent %}\n \n{% endblock %}\n'},MTTW:function(e,t){var n=Shopware.Component,r=Shopware.Data.Criteria;n.extend("sw-entity-single-select-override","sw-entity-single-select",{props:{criteria:{type:Object,required:!1,default:function(){var e=new r(1,this.resultLimit);return e.addFilter(r.equals("stateMachine.technicalName","order_delivery.state")),e}}}})},RgpO:function(e,t,n){"use strict";n.r(t);n("UvA/");var r=n("wt28"),o=n.n(r),a=Shopware,i=a.Component,s=a.Mixin;i.register("adyen-config-check-button",{template:o.a,inject:["adyenService"],mixins:[s.getByName("notification")],data:function(){return{isLoading:!1,isSaveSuccessful:!1}},computed:{pluginConfig:function(){for(var e=this.$parent;!e.hasOwnProperty("actualConfigData");)e=e.$parent;var t=e.currentSalesChannelId,n=e.actualConfigData;return Object.assign({},n.null,n[t])}},methods:{saveFinish:function(){this.isSaveSuccessful=!1},check:function(){var e=this;this.isLoading=!0,this.adyenService.check(this.pluginConfig).then((function(t){t.success?(e.isSaveSuccessful=!0,e.createNotificationSuccess({title:e.$tc("adyen.configTestTitle"),message:e.$tc("adyen.configTestSuccess")})):e.createNotificationError({title:e.$tc("adyen.configTestTitle"),message:e.$tc(t.message?t.message:"adyen.configTestFail")}),e.isLoading=!1}))}}});var c=n("uQkf"),u=n.n(c),d=(n("hnQ+"),Shopware),l=d.Component,f=d.Mixin;l.register("adyen-payment-capture",{template:u.a,inject:["adyenService","systemConfigApiService"],mixins:[f.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],showModal:!1,captureRequests:[],allowCapture:!0,captureEnabled:!1,errorOccurred:!1,isLoading:!0,showWidget:!1}},created:function(){this.createdComponent()},methods:{createdComponent:function(){var e=this;return this.systemConfigApiService.getValues("AdyenPaymentShopware6.config").then((function(t){e.captureEnabled=t["AdyenPaymentShopware6.config.manualCaptureEnabled"]||null})).finally((function(){e.isLoading=!1,e.showWidget=e.adyenService.isAdyenOrder(e.order)&&e.captureEnabled}))},openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onSubmitCapture:function(){var e=this;this.isLoading=!0,this.adyenService.capture(this.order.id).then((function(t){t.success?(e.fetchCaptureRequests(),e.createNotificationSuccess({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.captureSuccessful")})):e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoading=!1,e.showModal=!1}))},fetchCaptureRequests:function(){var e=this;this.isLoading=!0,this.adyenService.getCaptureRequests(this.order.id).then((function(t){e.captureRequests=t,e.isCaptureAllowed()})).catch((function(){e.errorOccurred=!0,e.captureRequests=[]})).finally((function(){e.isLoading=!1}))},isCaptureAllowed:function(){var e=this.getAuthorizedAdyenOrderTransaction(),t=this.captureRequests.filter((function(e){return"Pending Webhook"===e.status}));this.allowCapture=e.length>0&&0===t.length},getAuthorizedAdyenOrderTransaction:function(){return this.order.transactions.filter((function(e){var t="originalPspReference"in e.customFields,n="Authorized"===e.stateMachineState.name;return t&&n}))}},beforeMount:function(){this.fetchCaptureRequests()}});var p=n("w8Bj"),h=n.n(p);n("Fxip");function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){s=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(s)throw a}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nt/100},isAdyenOrder:function(){for(var e=this.order.transactions,t=!1,n=0;nn.parts.length&&(r.parts.length=n.parts.length)}else{var i=[];for(o=0;o\n \n \n

{{ $tc(\'adyen.noNotificationsReceived\') }}

\n
\n'},"UvA/":function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:"adyen";return r(this,d),(n=c.call(this,e,t,o)).headers=n.getBasicHeaders({}),n}return t=d,(n=[{key:"check",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.post("_action/".concat(this.getApiBasePath(),"/verify"),e,{headers:t}).then((function(e){return u.handleResponse(e)}))}},{key:"capture",value:function(e){return this.httpClient.post(this.getApiBasePath()+"/capture",{orderId:e},{headers:this.headers}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getCaptureRequests",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/captures",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getRefunds",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/refunds",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during refunds request: "+e.message),e}))}},{key:"postRefund",value:function(e,t){var n=this.getBasicHeaders({});return this.httpClient.post(this.getApiBasePath()+"/refunds",{orderId:e,refundAmount:t},{headers:n}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during post refund request: "+e.message),e}))}},{key:"fetchNotifications",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/notifications",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"isAdyenOrder",value:function(e){for(var t=e.transactions,n=!1,r=0;r\n
\n
\n
\n {{ $tc(\'adyen.noCaptureRequests\') }}\n
\n
\n \n {{ $tc(\'adyen.sendCaptureRequest\') }}\n \n
\n \n \n \n
\n \n \n
\n
\n {{ $tc(\'adyen.error\') }}\n
\n\n'},w8Bj:function(e,t){e.exports='{% block adyen_refund %}\n \n
\n
\n
\n {{ $tc(\'adyen.noRefundsCreated\') }}\n
\n
\n \n {{ $tc(\'sw-order.documentCard.labelCreateNew\') }}\n \n
\n \n
\n \n
\n \n
\n
\n \n \n
\n
\n {{ $tc(\'adyen.refundFetchError\') }}\n
\n
\n{% endblock %}\n'},wt28:function(e,t){e.exports='\n'},xIYV:function(e,t,n){},xJoO:function(e,t){e.exports='{% block sw_order_detail_base_custom_fields %}\n {% parent %}\n \n \n \n{% endblock %}\n'}}); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/bundles/adyenpaymentshopware6/",n(n.s="RgpO")}({"6MJt":function(e,t,n){},Fxip:function(e,t,n){var r=n("xIYV");r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);(0,n("SZ7m").default)("3299a05e",r,!0,{})},MTTW:function(e,t){var n=Shopware.Component,r=Shopware.Data.Criteria;n.extend("sw-entity-single-select-override","sw-entity-single-select",{props:{criteria:{type:Object,required:!1,default:function(){var e=new r(1,this.resultLimit);return e.addFilter(r.equals("stateMachine.technicalName","order_delivery.state")),e}}}})},RgpO:function(e,t,n){"use strict";n.r(t);n("UvA/");var r=n("wt28"),o=n.n(r),i=Shopware,a=i.Component,s=i.Mixin;a.register("adyen-config-check-button",{template:o.a,inject:["adyenService"],mixins:[s.getByName("notification")],data:function(){return{isLoading:!1,isSaveSuccessful:!1}},computed:{pluginConfig:function(){for(var e=this.$parent;!e.hasOwnProperty("actualConfigData");)e=e.$parent;var t=e.currentSalesChannelId,n=e.actualConfigData;return Object.assign({},n.null,n[t])}},methods:{saveFinish:function(){this.isSaveSuccessful=!1},check:function(){var e=this;this.isLoading=!0,this.adyenService.check(this.pluginConfig).then((function(t){t.success?(e.isSaveSuccessful=!0,e.createNotificationSuccess({title:e.$tc("adyen.configTestTitle"),message:e.$tc("adyen.configTestSuccess")})):e.createNotificationError({title:e.$tc("adyen.configTestTitle"),message:e.$tc(t.message?t.message:"adyen.configTestFail")}),e.isLoading=!1}))}}});var c=n("uQkf"),u=n.n(c),d=(n("hnQ+"),Shopware),l=d.Component,f=d.Mixin;l.register("adyen-payment-capture",{template:u.a,inject:["adyenService","systemConfigApiService"],mixins:[f.getByName("notification")],props:{order:{type:Object,required:!0}},data:function(){return{columns:[{property:"pspReference",label:this.$tc("adyen.columnHeaders.pspReference")},{property:"amount",label:this.$tc("adyen.columnHeaders.amount")},{property:"status",label:this.$tc("adyen.columnHeaders.status")},{property:"createdAt",label:this.$tc("adyen.columnHeaders.created")},{property:"updatedAt",label:this.$tc("adyen.columnHeaders.updated")}],showModal:!1,captureRequests:[],allowCapture:!0,captureEnabled:!1,errorOccurred:!1,isLoading:!0,showWidget:!1}},created:function(){this.createdComponent()},methods:{createdComponent:function(){var e=this;return this.systemConfigApiService.getValues("AdyenPaymentShopware6.config").then((function(t){e.captureEnabled=t["AdyenPaymentShopware6.config.manualCaptureEnabled"]||null})).finally((function(){e.isLoading=!1,e.showWidget=e.adyenService.isAdyenOrder(e.order)&&e.captureEnabled}))},openModal:function(){this.showModal=!0},onCloseModal:function(){this.showModal=!1},onSubmitCapture:function(){var e=this;this.isLoading=!0,this.adyenService.capture(this.order.id).then((function(t){t.success?(e.fetchCaptureRequests(),e.createNotificationSuccess({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.captureSuccessful")})):e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc(t.message?t.message:"adyen.error")})})).catch((function(){e.createNotificationError({title:e.$tc("adyen.adyenPaymentCaptureTitle"),message:e.$tc("adyen.error")})})).finally((function(){e.isLoading=!1,e.showModal=!1}))},fetchCaptureRequests:function(){var e=this;this.isLoading=!0,this.adyenService.getCaptureRequests(this.order.id).then((function(t){e.captureRequests=t,e.isCaptureAllowed()})).catch((function(){e.errorOccurred=!0,e.captureRequests=[]})).finally((function(){e.isLoading=!1}))},isCaptureAllowed:function(){var e=this.getAuthorizedAdyenOrderTransaction(),t=this.captureRequests.filter((function(e){return"Pending Webhook"===e.status}));this.allowCapture=e.length>0&&0===t.length},getAuthorizedAdyenOrderTransaction:function(){return this.order.transactions.filter((function(e){var t="originalPspReference"in e.customFields,n="Authorized"===e.stateMachineState.name;return t&&n}))}},beforeMount:function(){this.fetchCaptureRequests()}});var p=n("w8Bj"),h=n.n(p);n("Fxip");function y(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nt/100},isAdyenOrder:function(){for(var e=this.order.transactions,t=!1,n=0;nn.parts.length&&(r.parts.length=n.parts.length)}else{var a=[];for(o=0;o\n \n \n {% block sw_data_grid_body_columns %}\n {% block sw_data_grid_column_actions %}\n \n {% endblock %}\n {% endblock %}\n \n

{{ $tc(\'adyen.noNotificationsReceived\') }}

\n
\n\n'},"UvA/":function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:"adyen";return r(this,d),(n=c.call(this,e,t,o)).headers=n.getBasicHeaders({}),n}return t=d,(n=[{key:"check",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.post("_action/".concat(this.getApiBasePath(),"/verify"),e,{headers:t}).then((function(e){return u.handleResponse(e)}))}},{key:"capture",value:function(e){return this.httpClient.post(this.getApiBasePath()+"/capture",{orderId:e},{headers:this.headers}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getCaptureRequests",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/captures",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during capture request: "+e.message),e}))}},{key:"getRefunds",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/refunds",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during refunds request: "+e.message),e}))}},{key:"postRefund",value:function(e,t){var n=this.getBasicHeaders({});return this.httpClient.post(this.getApiBasePath()+"/refunds",{orderId:e,refundAmount:t},{headers:n}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred during post refund request: "+e.message),e}))}},{key:"fetchNotifications",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/orders/"+e+"/notifications",{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"rescheduleNotification",value:function(e){var t=this.getBasicHeaders({});return this.httpClient.get(this.getApiBasePath()+"/reschedule-notification/"+e,{headers:t}).then((function(e){return u.handleResponse(e)})).catch((function(e){throw console.error("An error occurred: "+e.message),e}))}},{key:"isAdyenOrder",value:function(e){for(var t=e.transactions,n=!1,r=0;r\n
\n
\n
\n {{ $tc(\'adyen.noCaptureRequests\') }}\n
\n
\n \n {{ $tc(\'adyen.sendCaptureRequest\') }}\n \n
\n \n \n \n
\n \n \n
\n
\n {{ $tc(\'adyen.error\') }}\n
\n\n'},w8Bj:function(e,t){e.exports='{% block adyen_refund %}\n \n
\n
\n
\n {{ $tc(\'adyen.noRefundsCreated\') }}\n
\n
\n \n {{ $tc(\'sw-order.documentCard.labelCreateNew\') }}\n \n
\n \n
\n \n
\n \n
\n
\n \n \n
\n
\n {{ $tc(\'adyen.refundFetchError\') }}\n
\n
\n{% endblock %}\n'},wt28:function(e,t){e.exports='\n'},xIYV:function(e,t,n){},xJoO:function(e,t){e.exports='{% block sw_order_detail_base_custom_fields %}\n {% parent %}\n \n \n \n{% endblock %}\n'}}); \ No newline at end of file diff --git a/src/Resources/public/css/adyen.css b/src/Resources/public/css/adyen.css index 3f30c81a..c6ed8730 100644 --- a/src/Resources/public/css/adyen.css +++ b/src/Resources/public/css/adyen.css @@ -1,12 +1,13 @@ .adyen-checkout__spinner__wrapper{align-items:center;display:flex;height:100%;justify-content:center}.adyen-checkout__spinner__wrapper--inline{display:inline-block;height:auto;margin-right:8px}[dir=rtl] .adyen-checkout__spinner__wrapper--inline{margin-left:8px;margin-right:0}.adyen-checkout__spinner{-webkit-animation:rotateSpinner 1.5s linear infinite;animation:rotateSpinner 1.5s linear infinite;border:3px solid #06f;border-radius:50%;border-top-color:transparent;height:43px;width:43px}.adyen-checkout__spinner--large{height:43px;width:43px}.adyen-checkout__spinner--small{border-width:2px;height:16px;width:16px}.adyen-checkout__spinner--medium{height:28px;width:28px}@-webkit-keyframes rotateSpinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes rotateSpinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}} -.adyen-checkout__button{background:#00112c;border:0;border-radius:6px;color:#fff;cursor:pointer;font-size:1em;font-weight:500;height:48px;margin:0;padding:15px;text-decoration:none;transition:background .3s ease-out,box-shadow .3s ease-out;width:100%}.adyen-checkout__button:focus{box-shadow:0 0 0 2px #99c2ff;outline:0}.adyen-checkout__button:hover{background:#1c3045;box-shadow:0 0,0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14)}.adyen-checkout__button:active{background:#3a4a5c}.adyen-checkout__button:hover:focus{box-shadow:0 0 0 2px #99c2ff,0 3px 4px rgba(0,15,45,.2)}.adyen-checkout__button:disabled,.adyen-checkout__button:disabled:hover{box-shadow:none;cursor:not-allowed;opacity:.4;-webkit-user-select:all;-moz-user-select:all;user-select:all}.adyen-checkout__button.adyen-checkout__button--loading{background:#687282;box-shadow:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adyen-checkout__button.adyen-checkout__button--pay{margin-top:24px}.adyen-checkout__button.adyen-checkout__button--pay:disabled{opacity:1}.adyen-checkout__button.adyen-checkout__button--standalone{margin-top:0}.adyen-checkout__button.adyen-checkout__button--inline{display:block;font-size:.81em;height:auto;padding:10px 8px;width:auto}.adyen-checkout__button.adyen-checkout__button--ghost{background:none;border:0;color:#00112c}.adyen-checkout__button.adyen-checkout__button--ghost:hover{background:#f7f8f9;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--ghost:active{background:#e6e9eb;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--secondary{background:#fff;border:1px solid #00112c;color:#00112c;padding:10px 12px}.adyen-checkout__button.adyen-checkout__button--secondary:hover{background:#f7f8f9;box-shadow:0 2px 4px rgba(27,42,60,.2),0 4px 5px rgba(27,42,60,.14)}.adyen-checkout__button.adyen-checkout__button--secondary:active,.adyen-checkout__button.adyen-checkout__button--secondary:active:hover{background:#f7f8f9;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--secondary:disabled,.adyen-checkout__button.adyen-checkout__button--secondary:disabled:hover{background-color:#f7f8f9;border-color:#99A3AD;box-shadow:none;cursor:not-allowed;opacity:.5;-webkit-user-select:all;-moz-user-select:all;user-select:all}.adyen-checkout__button.adyen-checkout__button--secondary .adyen-checkout__spinner{border-color:transparent #00112c #00112c}.adyen-checkout__button.adyen-checkout__button--action{background:rgba(0,102,255,.1);border:1px solid transparent;color:#06f;padding:10px 12px}.adyen-checkout__button.adyen-checkout__button--action:hover{background:rgba(0,102,255,.2);box-shadow:none}.adyen-checkout__button.adyen-checkout__button--action:active,.adyen-checkout__button.adyen-checkout__button--action:active:hover{background:rgba(0,102,255,.3);box-shadow:none}.adyen-checkout__button.adyen-checkout__button--link{background:transparent;border:1px solid transparent;border-radius:3px;color:#06f;font-weight:400;padding:2px}.adyen-checkout__button.adyen-checkout__button--link:hover{background:transparent;box-shadow:none;text-decoration:underline}.adyen-checkout__button.adyen-checkout__button--completed,.adyen-checkout__button.adyen-checkout__button--completed:active,.adyen-checkout__button.adyen-checkout__button--completed:active:hover,.adyen-checkout__button.adyen-checkout__button--completed:hover{background:#0abf53;color:#fff}.adyen-checkout__button.adyen-checkout__button--completed .adyen-checkout__button__icon{filter:brightness(0) invert(1)}.adyen-checkout__button__content{align-items:center;display:flex;height:100%;justify-content:center}.adyen-checkout__button__icon{margin-right:12px}[dir=rtl] .adyen-checkout__button__icon{margin-left:12px;margin-right:0}.adyen-checkout__button__text{display:block;justify-content:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.adyen-checkout__button .adyen-checkout__spinner{border-color:transparent #fff #fff} +.adyen-checkout__button{background:#00112c;border:0;border-radius:6px;color:#fff;cursor:pointer;font-size:1em;font-weight:500;height:48px;margin:0;padding:15px;text-decoration:none;transition:background .3s ease-out,box-shadow .3s ease-out;width:100%}.adyen-checkout__button:focus{box-shadow:0 0 0 2px #99c2ff;outline:0}.adyen-checkout__button:hover{background:#1c3045;box-shadow:0 0,0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14)}.adyen-checkout__button:active{background:#3a4a5c}.adyen-checkout__button:hover:focus{box-shadow:0 0 0 2px #99c2ff,0 3px 4px rgba(0,15,45,.2)}.adyen-checkout__button:disabled,.adyen-checkout__button:disabled:hover{box-shadow:none;cursor:not-allowed;opacity:.4;-webkit-user-select:all;-moz-user-select:all;user-select:all}.adyen-checkout__button.adyen-checkout__button--loading{background:#687282;box-shadow:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adyen-checkout__button.adyen-checkout__button--pay{display:flex;justify-content:center;margin-top:24px}.adyen-checkout__button.adyen-checkout__button--pay:disabled{opacity:1}.adyen-checkout__button.adyen-checkout__button--standalone{margin-top:0}.adyen-checkout__button.adyen-checkout__button--inline{display:block;font-size:.81em;height:auto;padding:10px 8px;width:auto}.adyen-checkout__button.adyen-checkout__button--ghost{background:none;border:0;color:#00112c}.adyen-checkout__button.adyen-checkout__button--ghost:hover{background:#f7f8f9;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--ghost:active{background:#e6e9eb;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--secondary{background:#fff;border:1px solid #00112c;color:#00112c;padding:10px 12px}.adyen-checkout__button.adyen-checkout__button--secondary:hover{background:#f7f8f9;box-shadow:0 2px 4px rgba(27,42,60,.2),0 4px 5px rgba(27,42,60,.14)}.adyen-checkout__button.adyen-checkout__button--secondary:active,.adyen-checkout__button.adyen-checkout__button--secondary:active:hover{background:#f7f8f9;box-shadow:none}.adyen-checkout__button.adyen-checkout__button--secondary:disabled,.adyen-checkout__button.adyen-checkout__button--secondary:disabled:hover{background-color:#f7f8f9;border-color:#99A3AD;box-shadow:none;cursor:not-allowed;opacity:.5;-webkit-user-select:all;-moz-user-select:all;user-select:all}.adyen-checkout__button.adyen-checkout__button--secondary .adyen-checkout__spinner{border-color:transparent #00112c #00112c}.adyen-checkout__button.adyen-checkout__button--action{background:rgba(0,102,255,.1);border:1px solid transparent;color:#06f;padding:10px 12px}.adyen-checkout__button.adyen-checkout__button--action:hover{background:rgba(0,102,255,.2);box-shadow:none}.adyen-checkout__button.adyen-checkout__button--action:active,.adyen-checkout__button.adyen-checkout__button--action:active:hover{background:rgba(0,102,255,.3);box-shadow:none}.adyen-checkout__button.adyen-checkout__button--link{background:transparent;border:1px solid transparent;border-radius:3px;color:#06f;font-weight:400;padding:2px}.adyen-checkout__button.adyen-checkout__button--link:hover{background:transparent;box-shadow:none;text-decoration:underline}.adyen-checkout__button.adyen-checkout__button--completed,.adyen-checkout__button.adyen-checkout__button--completed:active,.adyen-checkout__button.adyen-checkout__button--completed:active:hover,.adyen-checkout__button.adyen-checkout__button--completed:hover{background:#0abf53;color:#fff}.adyen-checkout__button.adyen-checkout__button--completed .adyen-checkout__button__icon{filter:brightness(0) invert(1)}.adyen-checkout__button__content{align-items:center;display:flex;height:100%;justify-content:center}.adyen-checkout__button__icon{margin-right:12px}[dir=rtl] .adyen-checkout__button__icon{margin-left:12px;margin-right:0}.adyen-checkout__button__text{display:block;justify-content:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.adyen-checkout__button .adyen-checkout__spinner{border-color:transparent #fff #fff} +.checkout-secondary-button__text{font-size:.85em;margin-left:5px;margin-top:1px} .adyen-checkout__fieldset{display:block;padding-bottom:8px;width:100%}.adyen-checkout__fieldset:last-of-type{padding-bottom:0}.adyen-checkout__fieldset+.adyen-checkout__fieldset{margin-top:16px}.adyen-checkout__fieldset__title{color:#687282;display:block;font-size:.68em;font-weight:700;letter-spacing:1px;margin:0;padding:0 0 12px;text-transform:uppercase}.adyen-checkout__field-group,.adyen-checkout__fieldset__fields{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.adyen-checkout__field-group:last-of-type .adyen-checkout__field{margin-bottom:0}.adyen-checkout__fieldset--readonly .adyen-checkout__fieldset__fields{color:#00112c;font-size:.81em;line-height:19px;margin:0} -.adyen-checkout__field{display:block;margin-bottom:16px;width:100%}.adyen-checkout__field:last-of-type{margin-bottom:0}.adyen-checkout__label{display:block}.adyen-checkout__helper-text,.adyen-checkout__label__text{color:#00112c;display:block;font-size:.81em;font-weight:400;line-height:13px;padding-bottom:5px}.adyen-checkout__helper-text{color:#687282}.adyen-checkout__label__text{display:block;overflow:hidden;text-overflow:ellipsis;transition:color .1s ease-out;white-space:nowrap}.adyen-checkout__label__text--error{color:#d10244}.adyen-checkout__label--focused .adyen-checkout__label__text{color:#06f}.adyen-checkout__error-text{align-items:center;color:#d10244;display:flex;font-size:.75em;font-weight:400;margin-top:4px} +.adyen-checkout__field{display:block;margin-bottom:16px;width:100%}.adyen-checkout__field:last-of-type{margin-bottom:0}.adyen-checkout__label{display:block;position:relative}.adyen-checkout__helper-text,.adyen-checkout__label__text{color:#00112c;display:block;font-size:.81em;font-weight:400;line-height:13px;padding-bottom:5px}.adyen-checkout__label-adornment--end{position:absolute;right:0;top:0}.adyen-checkout__helper-text{color:#687282}.adyen-checkout__label__text{display:block;overflow:hidden;text-overflow:ellipsis;transition:color .1s ease-out;white-space:nowrap}.adyen-checkout__label__text--error{color:#d10244}.adyen-checkout__label--focused .adyen-checkout__label__text{color:#06f}.adyen-checkout__error-text{align-items:center;color:#d10244;display:flex;font-size:.75em;font-weight:400;margin-top:4px} .adyen-checkout__radio_group+.adyen-checkout-input__inline-validation{display:none}.adyen-checkout__radio_group__input{opacity:0;position:absolute}.adyen-checkout__radio_group__label{color:inherit;display:block;font-size:.81em;font-weight:400;line-height:16px;overflow:visible;padding-bottom:0;padding-left:24px;position:relative}.adyen-checkout__label--focused .adyen-checkout__radio_group__label{color:inherit}.adyen-checkout__radio_group__label:before{background-color:#fff;border:1px solid #b9c4c9;border-radius:50%;content:"";height:16px;left:0;position:absolute;top:0;transition:border-color .2s ease-out,box-shadow .2s ease-out;width:16px}.adyen-checkout__radio_group__label:hover:before{border-color:#99a3ad;box-shadow:0 0 0 2px #d4d9db;cursor:pointer}.adyen-checkout__radio_group__label:after{background-color:#fff;border-radius:50%;box-shadow:0 1px 1px rgba(0,15,45,.25);content:"";display:block;height:6px;left:5px;margin:0 auto;position:absolute;top:5px;transform:scale(0);transition:transform .2s ease-out;width:6px}.adyen-checkout__radio_group__label:hover{border-color:#06f;cursor:pointer}.adyen-checkout__radio_group__input:checked+.adyen-checkout__radio_group__label:before,.adyen-checkout__radio_group__label--selected{background-color:#06f;border:0;transition:all .2s ease-out}.adyen-checkout__radio_group__input:checked+.adyen-checkout__radio_group__label:after{transform:scale(1)}.adyen-checkout__radio_group__input:focus+.adyen-checkout__radio_group__label:before{border-color:#06f;box-shadow:0 0 0 2px rgba(0,102,255,.4)}.adyen-checkout__radio_group__input:checked+.adyen-checkout__radio_group__label:hover:before,.adyen-checkout__radio_group__input:checked:active+.adyen-checkout__radio_group__label:before,.adyen-checkout__radio_group__input:checked:focus+.adyen-checkout__radio_group__label:before{box-shadow:0 0 0 2px rgba(0,102,255,.4)}.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid:before{border:1px solid #d10244} .adyen-checkout__checkbox{display:block}.adyen-checkout__checkbox__label{color:#00112c;cursor:pointer;display:inline-block;font-size:.81em;font-weight:400;line-height:19px;padding-left:24px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[dir=rtl] .adyen-checkout__checkbox__label{padding-left:0;padding-right:24px}.adyen-checkout__checkbox__input{opacity:0;pointer-events:none;position:absolute}.adyen-checkout__checkbox__input:checked+.adyen-checkout__checkbox__label:before{opacity:1}.adyen-checkout__checkbox__input:checked+.adyen-checkout__checkbox__label:after{background-color:#06f;border:1px solid #06f}.adyen-checkout__checkbox__input:checked:hover+.adyen-checkout__checkbox__label:after{border-color:#06f;box-shadow:0 0 0 2px rgba(0,102,255,.4)}.adyen-checkout__checkbox__input:focus+.adyen-checkout__checkbox__label:after{border:1px solid #06f;box-shadow:0 0 0 2px #99c2ff}.adyen-checkout__checkbox__input:hover:not(:focus)+.adyen-checkout__checkbox__label:after{border-color:#99a3ad;box-shadow:0 0 0 2px #d4d9db}.adyen-checkout__checkbox__input+.adyen-checkout__checkbox__label:before{border-bottom:1px solid transparent;border-right:1px solid transparent;border-color:transparent #fff #fff transparent;border-radius:0 2px 1px 2px;border-style:solid;border-width:1px 2px 2px 1px;content:"";height:11px;left:1px;opacity:0;position:absolute;top:2px;transform:rotate(37deg);transform-origin:100% 100%;transition:opacity .2s ease-out;width:6px;z-index:1}[dir=rtl] .adyen-checkout__checkbox__input+.adyen-checkout__checkbox__label:before{left:auto;right:8px}.adyen-checkout__checkbox__input+.adyen-checkout__checkbox__label:after{background-color:#fff;border:1px solid #b9c4c9;border-radius:3px;content:"";height:16px;left:0;position:absolute;top:0;transition:background .15s ease-out,border .05s ease-out,box-shadow .1s ease-out;width:16px;z-index:0}[dir=rtl] .adyen-checkout__checkbox__input+.adyen-checkout__checkbox__label:after{left:auto;right:0}.adyen-checkout__field--consentCheckbox{background:#e6e9eb;border:1px solid #e6e9eb;border-radius:6px;padding:14px 14px 13px}[dir=rtl] .adyen-checkout__field--consentCheckbox{padding:14px 14px 13px}.adyen-checkout__field--consentCheckbox.adyen-checkout__field--error{border-color:#d10244}.adyen-checkout__field--consentCheckbox .adyen-checkout-input__inline-validation{right:-27px;top:10px} .Select-module_adyen-checkout__dropdown__0Mj-n{position:relative}.Select-module_adyen-checkout__dropdown__button__yTyqq{align-items:center;cursor:pointer;display:flex;justify-content:space-between}.Select-module_adyen-checkout__dropdown__button__yTyqq:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.195 6.565a1 1 0 0 0 1.6 0l2.992-3.98a1 1 0 0 0-.8-1.602H1.013a1 1 0 0 0-.8 1.6l2.983 3.982Z' fill='%23687282'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;content:"";height:6px;position:absolute;right:16px;width:8px}[dir=rtl] .Select-module_adyen-checkout__dropdown__button__yTyqq:after{left:16px;right:auto}.Select-module_adyen-checkout__dropdown__button--active__Ej-JR:after{transform:rotate(180deg)}.Select-module_adyen-checkout__filter-input__CwPBS{background:#fff;border:0;caret-color:#06f;color:#00112c;font-family:inherit;font-size:1em;height:100%;padding:0;width:100%}.Select-module_adyen-checkout__filter-input__CwPBS::-moz-placeholder{color:#b9c4c9;font-weight:200}.Select-module_adyen-checkout__filter-input__CwPBS:-ms-input-placeholder{color:#b9c4c9;font-weight:200}.Select-module_adyen-checkout__filter-input__CwPBS::placeholder{color:#b9c4c9;font-weight:200}.Select-module_adyen-checkout__filter-input__CwPBS:active,.Select-module_adyen-checkout__filter-input__CwPBS:focus{outline:0}.Select-module_adyen-checkout__dropdown__list__YtEzj{background:#fff;display:none;list-style:none;margin:0 0 50px;overflow-y:auto;padding:0;position:absolute;width:100%;z-index:1}.Select-module_adyen-checkout__dropdown__list__YtEzj.Select-module_adyen-checkout__dropdown__list--active__Gegw2{display:block}.Select-module_adyen-checkout__dropdown__element__ORU4-{align-items:center;display:flex;justify-content:space-between} .adyen-checkout__image{opacity:0;transition:opacity .6s ease-out}.adyen-checkout__image--loaded{opacity:1} -.adyen-checkout__dropdown{font-size:1em;max-width:100%;width:100%}.adyen-checkout__dropdown__button{background:#fff;border:1px solid #b9c4c9;border-radius:6px;color:#00112c;font-size:1em;height:40px;line-height:20px;outline:0;padding:7px 24px 7px 12px;text-decoration:none;transition:border .2s ease-out,box-shadow .2s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}[dir=rtl] .adyen-checkout__dropdown__button{padding:7px 12px 7px 24px}.adyen-checkout__dropdown__button:hover{border-color:#99a3ad}.adyen-checkout__dropdown__button__icon{border-radius:3px;height:26px;margin-left:auto;margin-right:8px;max-width:40px}.adyen-checkout__dropdown__button--active,.adyen-checkout__dropdown__button--active:hover,.adyen-checkout__dropdown__button:active,.adyen-checkout__dropdown__button:focus{border-color:#06f;box-shadow:0 0 0 2px #99c2ff}.adyen-checkout__dropdown__button--readonly,.adyen-checkout__dropdown__button--readonly--active,.adyen-checkout__dropdown__button--readonly:focus,.adyen-checkout__dropdown__button--readonly:hover{background:#e6e9eb;border-color:transparent;color:#00112c;cursor:not-allowed}.adyen-checkout__dropdown__button--readonly:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.195 6.565a1 1 0 0 0 1.6 0l2.992-3.98a1 1 0 0 0-.8-1.602H1.013a1 1 0 0 0-.8 1.6l2.983 3.982Z' fill='%23B9C4C9'/%3E%3C/svg%3E")}.adyen-checkout__dropdown__button--invalid{border-color:#d10244}.adyen-checkout__dropdown__button--valid{border-bottom-color:#0abf53}.adyen-checkout__dropdown__button__text{overflow:hidden;pointer-events:none;text-overflow:ellipsis;white-space:nowrap}.adyen-checkout__dropdown__list{border-radius:6px;box-shadow:0 2px 7px rgba(0,15,45,.3);max-height:375px;z-index:2}.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active{margin-top:2px}.adyen-checkout__dropdown__element{border:1px solid transparent;cursor:pointer;font-size:.81em;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:20px;outline:0;padding:8px;transition:background .2s ease-out,border-color .2s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;word-break:break-word}.adyen-checkout__dropdown__element:last-child{border-bottom:0}.adyen-checkout__dropdown__element:active,.adyen-checkout__dropdown__element:focus,.adyen-checkout__dropdown__element:hover{background:rgba(230,233,235,.6)}.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active{background:rgba(0,102,255,.1)}.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:active,.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:focus,.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:hover{background:rgba(0,102,255,.15)}.adyen-checkout__dropdown__element--disabled{cursor:not-allowed;opacity:.4}.adyen-checkout__dropdown__element__icon{border-radius:3px;margin-right:8px;max-height:26px;max-width:40px}.adyen-checkout__dropdown__element__flag{margin-left:8px;margin-right:10px;max-height:18px;max-width:27px}.adyen-checkout__dropdown+.adyen-checkout-input__inline-validation{right:32px} +.adyen-checkout__dropdown__button-icon--left{flex-direction:row-reverse;justify-content:flex-end}.adyen-checkout__dropdown__button-icon--left>img{margin-left:0;margin-right:12px}.adyen-checkout__dropdown{font-size:1em;max-width:100%;width:100%}.adyen-checkout__dropdown__button{background:#fff;border:1px solid #b9c4c9;border-radius:6px;color:#00112c;font-size:1em;height:40px;line-height:20px;outline:0;padding:7px 24px 7px 12px;text-decoration:none;transition:border .2s ease-out,box-shadow .2s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}[dir=rtl] .adyen-checkout__dropdown__button{padding:7px 12px 7px 24px}.adyen-checkout__dropdown__button:hover{border-color:#99a3ad}.adyen-checkout__dropdown__button__icon{border-radius:3px;height:26px;margin-left:auto;margin-right:8px;max-width:40px}.adyen-checkout__dropdown__button--active,.adyen-checkout__dropdown__button--active:hover,.adyen-checkout__dropdown__button:active,.adyen-checkout__dropdown__button:focus{border-color:#06f;box-shadow:0 0 0 2px #99c2ff}.adyen-checkout__dropdown__button--readonly,.adyen-checkout__dropdown__button--readonly--active,.adyen-checkout__dropdown__button--readonly:focus,.adyen-checkout__dropdown__button--readonly:hover{background:#e6e9eb;border-color:transparent;color:#00112c;cursor:not-allowed}.adyen-checkout__dropdown__button--readonly:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.195 6.565a1 1 0 0 0 1.6 0l2.992-3.98a1 1 0 0 0-.8-1.602H1.013a1 1 0 0 0-.8 1.6l2.983 3.982Z' fill='%23B9C4C9'/%3E%3C/svg%3E")}.adyen-checkout__dropdown__button--invalid{border-color:#d10244}.adyen-checkout__dropdown__button--valid{border-bottom-color:#0abf53}.adyen-checkout__dropdown__button__text{overflow:hidden;pointer-events:none;text-overflow:ellipsis;white-space:nowrap}.adyen-checkout__dropdown__list{border-radius:6px;box-shadow:0 2px 7px rgba(0,15,45,.3);max-height:375px;z-index:2}.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active{margin-top:2px}.adyen-checkout__dropdown__element{border:1px solid transparent;cursor:pointer;font-size:.81em;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:20px;outline:0;padding:8px;transition:background .2s ease-out,border-color .2s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;word-break:break-word}.adyen-checkout__dropdown__element:last-child{border-bottom:0}.adyen-checkout__dropdown__element:active,.adyen-checkout__dropdown__element:focus,.adyen-checkout__dropdown__element:hover{background:rgba(230,233,235,.6)}.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active{background:rgba(0,102,255,.1)}.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:active,.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:focus,.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:hover{background:rgba(0,102,255,.15)}.adyen-checkout__dropdown__element--disabled{cursor:not-allowed;opacity:.4}.adyen-checkout__dropdown__element__icon{border-radius:3px;margin-right:8px;max-height:26px;max-width:40px}.adyen-checkout__dropdown__element-icon--left{flex-direction:row-reverse;justify-content:flex-end}.adyen-checkout__dropdown__element__flag{margin-left:8px;margin-right:10px;max-height:18px;max-width:27px}.adyen-checkout__dropdown+.adyen-checkout-input__inline-validation{right:32px} .adyen-checkout__field-wrapper{display:flex;width:100%}.adyen-checkout__field--20{width:20%}.adyen-checkout__field--30{width:30%}.adyen-checkout__field--40{width:40%}.adyen-checkout__field--50{width:50%}.adyen-checkout__field--60{width:60%}.adyen-checkout__field--70{width:70%}.adyen-checkout__field--80{width:80%}.adyen-checkout__field--col-70{width:calc(70% - 8px)}.adyen-checkout__field--col-30{width:calc(30% - 8px)}.adyen-checkout__field--col-50{width:calc(50% - 8px)}.adyen-checkout__field-wrapper>.adyen-checkout__field:first-child{margin-right:8px}[dir=rtl] .adyen-checkout__field-wrapper>.adyen-checkout__field:first-child{margin-left:8px;margin-right:0}.adyen-checkout__field-wrapper>.adyen-checkout__field:nth-child(2){margin-left:8px}[dir=rtl] .adyen-checkout__field-wrapper>.adyen-checkout__field:nth-child(2){margin-left:0;margin-right:8px}.adyen-checkout__field-wrapper:last-of-type>.adyen-checkout__field{margin-bottom:0}.adyen-checkout__input{background:#fff;border:1px solid #b9c4c9;border-radius:6px;caret-color:#06f;color:#00112c;display:block;font-family:inherit;font-size:1em;height:40px;outline:none;padding:5px 8px;position:relative;transition:border .2s ease-out,box-shadow .2s ease-out;width:100%}.adyen-checkout__input:hover{border-color:#99a3ad}.adyen-checkout__input:required{box-shadow:none}.adyen-checkout__input--disabled,.adyen-checkout__input[readonly]{background:#e6e9eb;border-color:#e6e9eb}.adyen-checkout__input--disabled:hover{border-color:#e6e9eb}.adyen-checkout__input-wrapper{display:block;position:relative}.adyen-checkout__input-wrapper--block{display:block}.adyen-checkout-input__inline-validation{height:16px;position:absolute;right:14px;top:50%;transform:translateY(-50%);width:16px}[dir=rtl] .adyen-checkout-input__inline-validation{left:14px;right:auto}[dir=ltr] .adyen-checkout-input__inline-validation{left:auto;right:14px}.adyen-checkout-input__inline-validation--valid{color:#0abf53}.adyen-checkout-input__inline-validation--invalid{color:#d10244}.adyen-checkout__input--valid{border-bottom-color:#0abf53}.adyen-checkout__input--error,.adyen-checkout__input--error:hover,.adyen-checkout__input--invalid,.adyen-checkout__input--invalid:hover{border-color:#d10244}.adyen-checkout__input::-moz-placeholder{color:#707070;font-weight:200}.adyen-checkout__input:-ms-input-placeholder{color:#707070;font-weight:200}.adyen-checkout__input::placeholder{color:#707070;font-weight:200}.adyen-checkout__input--date{padding-right:30px}.adyen-checkout__input--focus,.adyen-checkout__input--focus:hover,.adyen-checkout__input:active,.adyen-checkout__input:active:hover,.adyen-checkout__input:focus,.adyen-checkout__input:focus:hover{border:1px solid #06f;box-shadow:0 0 0 2px #99c2ff}.adyen-checkout__input[readonly],.adyen-checkout__input[readonly]:hover{background-color:#e6e9eb;border-color:transparent;color:#687282;cursor:default} .adyen-checkout__fieldset--personalDetails .adyen-checkout__field--gender .adyen-checkout__radio_group{display:flex}.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group{display:flex;margin:8px 0}.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper{margin-right:20px}.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper:last-child{margin:0} .adyen-checkout__open-invoice .adyen-checkout__fieldset--billingAddress{padding-bottom:8px}.adyen-checkout__open-invoice .adyen-checkout__fieldset--deliveryAddress{margin-top:24px;padding-bottom:8px}.adyen-checkout__open-invoice .adyen-checkout__input--separateDeliveryAddress{margin-bottom:0}.adyen-checkout__open-invoice .adyen-checkout__field--consentCheckbox{margin-top:22px}.adyen-checkout__input--separateDeliveryAddress+.adyen-checkout__checkbox__label{margin-top:16px} @@ -15,8 +16,8 @@ .adyen-checkout__applepay__button{height:48px;width:240px}.adyen-checkout__dropin .adyen-checkout__applepay__button{width:100%} .adyen-checkout__issuer-button{align-items:center;background-color:#fff;border:none;border-radius:6px;box-shadow:inset 0 0 0 1px #b9c4c9;cursor:pointer;display:flex;flex-basis:47%;flex-grow:2;font-size:.81em;height:40px;justify-content:space-between;padding:0 12px;transition:background .3s ease-out,box-shadow .3s ease-out}.adyen-checkout__issuer-button:active{color:black}.adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus{box-shadow:inset 0 0 0 2px #99A3AD;outline:none}.adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus-visible{box-shadow:inset 0 0 0 2px #99A3AD;outline:none}.adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):hover{box-shadow:inset 0 0 0 2px #99A3AD;outline:none}.adyen-checkout__issuer-button--selected{background:#fff;box-shadow:inset 0 0 0 2px #06f;color:#06f;font-weight:500;height:40px;transition:none}.adyen-checkout__issuer-button-img{max-height:26px} .adyen-checkout__issuer-button-group{display:flex;flex-wrap:wrap;gap:16px 16px} -.adyen-checkout__field--issuer-list-separator{align-items:center;color:#687282;display:flex;justify-content:center;margin-bottom:16px;margin-top:16px;white-space:nowrap}.adyen-checkout__field--issuer-list-separator:after,.adyen-checkout__field--issuer-list-separator:before{background:#e6e9eb;content:"";display:block;height:1px;width:100%}.adyen-checkout__field--issuer-list-separator:after{margin-left:20px}.adyen-checkout__field--issuer-list-separator:before{margin-right:20px} -.adyen-checkout__field--issuer-list{margin-bottom:0} +.adyen-checkout__content-separator{align-items:center;color:#687282;display:flex;justify-content:center;margin-bottom:16px;margin-top:16px;white-space:nowrap}.adyen-checkout__content-separator:after,.adyen-checkout__content-separator:before{background:#e6e9eb;content:"";display:block;height:1px;width:100%}.adyen-checkout__content-separator:after{margin-left:20px}.adyen-checkout__content-separator:before{margin-right:20px} +.adyen-checkout__field--issuer-list{margin-bottom:0}.adyen-checkout__issuer-list__termsAndConditions{text-align:center} .adyen-checkout__card-input__form{transition:opacity .25s ease-out}.adyen-checkout__card__cardNumber{max-width:400px}.adyen-checkout__card__cardNumber__input{padding:5px 8px}.adyen-checkout__card__exp-date__input--oneclick{font-weight:400;line-height:30px;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.adyen-checkout__card__holderName,.adyen-checkout__field--expiryDate,.adyen-checkout__field--storedCard{margin-bottom:0}.adyen-checkout__card-input .adyen-checkout__fieldset--billingAddress,.adyen-checkout__card__holderName,.adyen-checkout__card__kcp-authentication,.adyen-checkout__card__socialSecurityNumber,.adyen-checkout__installments,.adyen-checkout__store-details{margin-top:16px}.adyen-checkout__card-input.adyen-checkout__card-input--loading{pointer-events:none}.adyen-checkout-error-panel+.adyen-checkout__card__holderName,.adyen-checkout-error-panel--sr-only+.adyen-checkout__card__holderName,.adyen-checkout__card__holderName:first-child{margin:0 0 16px}.adyen-checkout__field--cardNumber .adyen-checkout__input--valid:not(.adyen-checkout__card__cardNumber__input--noBrand)+.adyen-checkout-input__inline-validation--valid,.adyen-checkout__field--cardNumber .adyen-checkout__input--error .adyen-checkout__card__cardNumber__brandIcon{display:none}.adyen-checkout__field--securityCode.adyen-checkout__field--error .adyen-checkout__card__cvc__hint,.adyen-checkout__field--securityCode.adyen-checkout__field--valid .adyen-checkout__card__cvc__hint{opacity:0}@-webkit-keyframes cvcIndicateLocation{0%{opacity:1}to{opacity:.3}}@keyframes cvcIndicateLocation{0%{opacity:1}to{opacity:.3}}.adyen-checkout__label--focused .adyen-checkout__field__cvc--back-hint .adyen-checkout__card__cvc__hint--back .adyen-checkout__card__cvc__hint__location,.adyen-checkout__label--focused .adyen-checkout__field__cvc--front-hint .adyen-checkout__card__cvc__hint--front .adyen-checkout__card__cvc__hint__location{-webkit-animation-direction:alternate;animation-direction:alternate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:cvcIndicateLocation;animation-name:cvcIndicateLocation}.adyen-checkout__card__cvc__hint__wrapper{align-items:center;-webkit-backface-visibility:visible;backface-visibility:visible;display:flex;height:100%;margin:0 10px;position:absolute;right:0;top:0;transform:translateZ(0);transform-origin:center;transform-style:preserve-3d;transition:transform .3s cubic-bezier(.455,.03,.515,.955);width:27px;will-change:transform}.adyen-checkout__field__cvc--front-hint.adyen-checkout__card__cvc__hint__wrapper{transform:rotateY(180deg)}.adyen-checkout__card__cvc__hint{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute;transition:opacity .1s linear}.adyen-checkout__card__cvc__hint--front{transform:rotateY(180deg)}@media (prefers-reduced-motion:reduce){.adyen-checkout__card__cvc__hint__wrapper{transition:none}}.adyen-checkout__fieldset--revolving-plan .adyen-checkout__fieldset__fields{justify-content:left}.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group{display:flex;flex-direction:column}.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group__input-wrapper{margin-top:20px}.adyen-checkout__fieldset--revolving-plan .adyen-checkout__field--revolving-plan-installments{margin-left:15px;position:relative;top:42px;width:30%} .LoadingWrapper-module_loading-input__form__ffCKa{opacity:1}.LoadingWrapper-module_loading-input__form--loading__7GmVo{opacity:0}.LoadingWrapper-module_loading-input__spinner__GxA51{display:none;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.LoadingWrapper-module_loading-input__spinner--active__ENNBS{display:block} @@ -24,6 +25,14 @@ .adyen-checkout-error-panel{margin-bottom:20px}.adyen-checkout-error-panel .adyen-checkout-error-panel__wrapper{font-size:.75em}.adyen-checkout-error-panel--sr-only{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px} .adyen-checkout__card__dual-branding__buttons{display:flex;opacity:.4;pointer-events:none}.adyen-checkout__card__dual-branding__buttons--active{opacity:1;pointer-events:auto}.adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon{cursor:pointer;opacity:1}.adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon:first-child{right:40px}.adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon--not-selected{opacity:.5} .adyen-checkout__card__brands{display:flex;flex-basis:auto;flex-shrink:1;flex-wrap:wrap;gap:4px;margin-bottom:16px;margin-top:-8px}.adyen-checkout__card__brands img{border-radius:3px;height:16px;width:24px}.adyen-checkout__card__brands__brand-wrapper--disabled{opacity:.25}.adyen-checkout__card__brands__brand-wrapper{display:inline-block;height:16px;position:relative;transition:opacity .2s ease-out;width:24px}.adyen-checkout__card__brands__brand-wrapper:after{border:1px solid rgba(0,27,43,.17);border-radius:3px;content:"";height:100%;left:0;position:absolute;top:0;width:100%} +.adyen-checkout-ctp__otp-resend-code{color:#0066FF;cursor:pointer;font-size:13px;font-weight:400;margin-left:auto}.adyen-checkout-ctp__otp-resend-code--confirmation,.adyen-checkout-ctp__otp-resend-code--disabled{color:#687282;cursor:default;font-size:13px;font-weight:400;margin-left:auto;pointer-events:none}.adyen-checkout-ctp__otp-resend-code--confirmation{align-items:center;display:flex}.adyen-checkout-ctp__otp-resend-code--confirmation>img{margin-left:4px}.adyen-checkout-ctp__otp-resend-code-counter{color:black;cursor:default;display:inline-block;font-size:13px;font-weight:400;margin-left:auto;text-align:right}.adyen-checkout__field.adyen-checkout__field--otp{margin-bottom:24px} +.adyen-checkout-ctp__otp-subtitle--highlighted{color:#00112c;font-weight:500} +.adyen-checkout-ctp__card-list-single-card{align-items:center;background-color:#f7f8f9;border-radius:6px;display:flex;font-size:13px;font-weight:400;height:40px;line-height:19px;padding:12px}.adyen-checkout-ctp__card-image{border-radius:3px;margin-right:8px} +.adyen-checkout-ctp__card{background-color:white;border:none;border-radius:4px;box-shadow:0 0 0 2px #999595;cursor:pointer;height:40px;margin-bottom:20px;width:100%} +.adyen-checkout-ctp__section-logout-button{color:#0066FF;cursor:pointer;font-size:13px;font-weight:400;line-height:19px;margin-left:auto}.adyen-checkout-ctp__section-logout-button--disabled{color:#687282;pointer-events:none} +.adyen-checkout-ctp__section{background-color:white;border-radius:12px;box-shadow:0 2px 7px rgba(0,0,0,.3);padding:16px;position:relative}.adyen-checkout-ctp__section .adyen-checkout__fieldset{margin-bottom:24px}.adyen-checkout-ctp__section-title{font-size:16px;font-weight:700;line-height:19px;margin-bottom:4px}.adyen-checkout-ctp__section-subtitle{color:#687282;font-size:13px;font-weight:400;line-height:19px;margin-bottom:16px}.adyen-checkout-ctp__section-header-logo{margin-right:6px;width:24px}.adyen-checkout-ctp__section-header-pipe{height:15px;margin-right:6px}.adyen-checkout-ctp__section-header{align-items:center;display:flex;height:18px;margin-bottom:16px}.adyen-checkout-ctp__section-header-scheme{margin-right:6px;-o-object-fit:none;object-fit:none}.adyen-checkout-ctp__section-header-scheme-mc{width:27px}.adyen-checkout-ctp__section-header-scheme-visa{width:35px}.adyen-checkout-ctp__separator{color:#00112c;font-size:13px;font-weight:400} +.adyen-checkout-ctp__loading-loader{margin-bottom:24px;padding-top:58px}.adyen-checkout-ctp__loading-title{font-size:16px;font-weight:700;line-height:19px;margin-bottom:8px;text-align:center}.adyen-checkout-ctp__loading-subtitle{font-size:16px;line-height:19px;margin:0 auto 59px;max-width:300px;text-align:center} +.adyen-checkout__field.adyen-checkout__field--shopperLogin{margin-bottom:24px} .adyen-checkout__button-group{background:transparent;display:flex;justify-content:space-between}.adyen-checkout__button-group .adyen-checkout__button{background:transparent;border:0;box-shadow:inset 0 0 0 1px #99a3ad;color:#00112c;font-size:.81em;font-weight:400;height:40px;line-height:40px;margin-right:8px;padding:0;text-align:center}.adyen-checkout__button-group .adyen-checkout__button:last-child{margin-right:0}.adyen-checkout__button-group .adyen-checkout__button:hover{background:transparent;box-shadow:inset 0 0 0 2px #99a3ad}.adyen-checkout__button-group .adyen-checkout__button:active{background:#f7f8f9;box-shadow:inset 0 0 0 2px #99a3ad}.adyen-checkout__button-group .adyen-checkout__button--disabled,.adyen-checkout__button-group .adyen-checkout__button--disabled:hover{cursor:not-allowed;opacity:.4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adyen-checkout__button-group .adyen-checkout__button--selected,.adyen-checkout__button-group .adyen-checkout__button--selected:active,.adyen-checkout__button-group .adyen-checkout__button--selected:active:hover,.adyen-checkout__button-group .adyen-checkout__button--selected:hover{background:#e5efff;box-shadow:inset 0 0 0 2px #06f;color:#06f;font-weight:500;height:40px;transition:none}.adyen-checkout__button-group .adyen-checkout__button .adyen-checkout__button-group__input{opacity:0;pointer-events:none;position:absolute} .adyen-checkout__adyen-giving .adyen-checkout__status__icon{display:block;margin:56px auto 32px}.adyen-checkout__adyen-giving .adyen-checkout__status__text{color:#00112c;margin-bottom:56px;text-align:center}.adyen-checkout__campaign{background:#00112c;border-radius:6px;height:227px;overflow:hidden;position:relative}.adyen-checkout__campaign-link:hover .adyen-checkout__campaign-description{text-decoration:underline}.adyen-checkout__campaign-container{height:100%}.adyen-checkout__campaign-logo{border:2px solid rgba(255,255,255,.4);border-radius:3px;display:block;height:48px;margin-bottom:16px;overflow:hidden;width:48px}.adyen-checkout__campaign-background-image{background-color:#00112c;background-position:50%;background-size:cover;height:100%}.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:before{background:inherit;content:"";height:100%;position:absolute;transition:transform .6s ease-out;width:100%}.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:hover:before{transform:scale(1.1)}.adyen-checkout__campaign-link .adyen-checkout__campaign-content{pointer-events:none}.adyen-checkout__campaign-content{bottom:0;padding:16px;position:absolute;z-index:2}.adyen-checkout__campaign-description,.adyen-checkout__campaign-title{color:#fff;font-weight:400;margin:0}.adyen-checkout__campaign-title{font-size:1em;margin-bottom:8px}.adyen-checkout__campaign-description{font-size:.81em;line-height:19px}.adyen-checkout__adyen-giving-actions{margin-top:16px}.adyen-checkout__button.adyen-checkout__button--donate{margin:16px auto 8px}.adyen-checkout__button.adyen-checkout__button--decline{display:block;margin:auto;width:auto} .adyen-checkout__paywithgoogle{height:48px}.adyen-checkout__paywithgoogle>div>button,.adyen-checkout__paywithgoogle>div>button.long,.adyen-checkout__paywithgoogle>div>button.short{height:48px;transition:background-color .3s ease-out,box-shadow .3s ease-out}.adyen-checkout__paywithgoogle>div>button.long:focus,.adyen-checkout__paywithgoogle>div>button.short:focus,.adyen-checkout__paywithgoogle>div>button:focus{box-shadow:0 0 0 2px #99c2ff;outline:0}.adyen-checkout__paywithgoogle>div>button.gpay-button{padding:15px 24px 13px} @@ -55,4 +64,4 @@ .adyen-checkout__voucher-result__introduction{font-size:1em;max-width:420px} .adyen-checkout__klarna-widget{pointer-events:all} .adyen-checkout__field--vpa{margin-bottom:0} -/*# sourceMappingURL=adyen.css.map */ \ No newline at end of file +/*# sourceMappingURL=adyen.css.map */ diff --git a/src/Resources/public/css/adyen.css.map b/src/Resources/public/css/adyen.css.map index 3b257a59..9e015433 100644 --- a/src/Resources/public/css/adyen.css.map +++ b/src/Resources/public/css/adyen.css.map @@ -1 +1 @@ -{"version":3,"sources":["Spinner.scss","Button.scss","Fieldset.scss","Field.scss","RadioGroup.scss","Checkbox.scss","Select.module.scss","Img.scss","Select.scss","FormFields.scss","PersonalDetails.scss","OpenInvoice.scss","AmazonPay.scss","ApplePayButton.module.scss","ApplePayButton.scss","IssuerButton.scss","IssuerButtonGroup.scss","ContentSeparator.scss","IssuerList.scss","CardInput.scss","LoadingWrapper.module.scss","CardInput.module.scss","ErrorPanel.scss","DualBrandingIcon.scss","AvailableBrands.scss","ButtonGroup.scss","Donation.scss","GooglePayButton.scss","EcontextInput.scss","Voucher.scss","Paypal.scss","PhoneInput.scss","ThreeDS2.scss","challenge.scss","QRLoader.scss","BoletoVoucherResult.scss","OxxoVoucherResult.scss","Alert.scss","GiftcardResult.scss","DropinComponent.module.scss","DisableOneClickConfirmation.scss","PaymentMethodItem.scss","OrderPaymentMethods.scss","Status.scss","DropinComponent.scss","AchInput.module.scss","AchInput.scss","MBWayInput.scss","Await.scss","BlikInput.scss","BankTransferInput.scss","BacsInput.scss","BacsResult.scss","KlarnaWidget.scss","VpaInput.scss"],"names":[],"mappings":"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","file":"adyen.css","sourcesContent":[".adyen-checkout__spinner__wrapper {\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center; }\n\n.adyen-checkout__spinner__wrapper--inline {\n height: auto;\n display: inline-block;\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__spinner__wrapper--inline {\n margin-right: 0;\n margin-left: 8px; }\n\n.adyen-checkout__spinner {\n border: 3px solid #06f;\n border-radius: 50%;\n height: 43px;\n width: 43px;\n border-top-color: transparent;\n animation: rotateSpinner 1.5s infinite linear; }\n\n.adyen-checkout__spinner--large {\n height: 43px;\n width: 43px; }\n\n.adyen-checkout__spinner--small {\n height: 16px;\n width: 16px;\n border-width: 2px; }\n\n.adyen-checkout__spinner--medium {\n height: 28px;\n width: 28px; }\n\n@keyframes rotateSpinner {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n",".adyen-checkout__button {\n background: #00112c;\n border: 0;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n font-size: 1em;\n font-weight: 500;\n height: 48px;\n margin: 0;\n padding: 15px;\n text-decoration: none;\n transition: background 0.3s ease-out, box-shadow 0.3s ease-out;\n width: 100%; }\n .adyen-checkout__button:focus {\n box-shadow: 0 0 0 2px #99c2ff;\n outline: 0; }\n .adyen-checkout__button:hover {\n background: #1c3045;\n box-shadow: 0 0, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14); }\n .adyen-checkout__button:active {\n background: #3a4a5c; }\n .adyen-checkout__button:hover:focus {\n box-shadow: 0 0 0 2px #99c2ff, 0 3px 4px rgba(0, 15, 45, 0.2); }\n .adyen-checkout__button:disabled, .adyen-checkout__button:disabled:hover {\n box-shadow: none;\n cursor: not-allowed;\n opacity: 0.4;\n user-select: all; }\n .adyen-checkout__button.adyen-checkout__button--loading {\n background: #687282;\n box-shadow: none;\n pointer-events: none;\n user-select: none; }\n .adyen-checkout__button.adyen-checkout__button--pay {\n margin-top: 24px; }\n .adyen-checkout__button.adyen-checkout__button--pay:disabled {\n opacity: 1; }\n .adyen-checkout__button.adyen-checkout__button--standalone {\n margin-top: 0; }\n .adyen-checkout__button.adyen-checkout__button--inline {\n display: block;\n width: auto;\n height: auto;\n padding: 10px 8px;\n font-size: 0.81em; }\n .adyen-checkout__button.adyen-checkout__button--ghost {\n background: none;\n border: 0;\n color: #00112c; }\n .adyen-checkout__button.adyen-checkout__button--ghost:hover {\n background: #f7f8f9;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--ghost:active {\n background: #e6e9eb;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--secondary {\n padding: 10px 12px;\n background: #fff;\n border: 1px solid #00112c;\n color: #00112c; }\n .adyen-checkout__button.adyen-checkout__button--secondary:hover {\n background: #f7f8f9;\n box-shadow: 0px 2px 4px rgba(27, 42, 60, 0.2), 0px 4px 5px rgba(27, 42, 60, 0.14); }\n .adyen-checkout__button.adyen-checkout__button--secondary:active, .adyen-checkout__button.adyen-checkout__button--secondary:active:hover {\n background: #f7f8f9;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--secondary:disabled, .adyen-checkout__button.adyen-checkout__button--secondary:disabled:hover {\n box-shadow: none;\n cursor: not-allowed;\n border-color: #99A3AD;\n background-color: #f7f8f9;\n opacity: 0.5;\n user-select: all; }\n .adyen-checkout__button.adyen-checkout__button--secondary .adyen-checkout__spinner {\n border-color: #00112c;\n border-top-color: transparent; }\n .adyen-checkout__button.adyen-checkout__button--action {\n padding: 10px 12px;\n background: rgba(0, 102, 255, 0.1);\n border: 1px solid transparent;\n color: #06f; }\n .adyen-checkout__button.adyen-checkout__button--action:hover {\n background: rgba(0, 102, 255, 0.2);\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--action:active, .adyen-checkout__button.adyen-checkout__button--action:active:hover {\n background: rgba(0, 102, 255, 0.3);\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--link {\n background: transparent;\n border: 1px solid transparent;\n color: #06f;\n font-weight: 400;\n border-radius: 3px;\n padding: 2px; }\n .adyen-checkout__button.adyen-checkout__button--link:hover {\n background: transparent;\n text-decoration: underline;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--completed, .adyen-checkout__button.adyen-checkout__button--completed:hover, .adyen-checkout__button.adyen-checkout__button--completed:active, .adyen-checkout__button.adyen-checkout__button--completed:active:hover {\n background: #0abf53;\n color: #fff; }\n .adyen-checkout__button.adyen-checkout__button--completed .adyen-checkout__button__icon {\n filter: brightness(0) invert(1); }\n .adyen-checkout__button__content {\n height: 100%;\n align-items: center;\n display: flex;\n justify-content: center; }\n .adyen-checkout__button__icon {\n margin-right: 12px; }\n [dir='rtl'] .adyen-checkout__button__icon {\n margin-right: 0;\n margin-left: 12px; }\n .adyen-checkout__button__text {\n display: block;\n justify-content: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .adyen-checkout__button .adyen-checkout__spinner {\n border-color: #fff;\n border-top-color: transparent; }\n",".adyen-checkout__fieldset {\n display: block;\n padding-bottom: 8px;\n width: 100%; }\n\n.adyen-checkout__fieldset:last-of-type {\n padding-bottom: 0; }\n\n.adyen-checkout__fieldset + .adyen-checkout__fieldset {\n margin-top: 16px; }\n\n.adyen-checkout__fieldset__title {\n color: #687282;\n display: block;\n font-size: 0.68em;\n font-weight: bold;\n letter-spacing: 1px;\n margin: 0;\n padding: 0 0 12px;\n text-transform: uppercase; }\n\n.adyen-checkout__fieldset__fields,\n.adyen-checkout__field-group {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n width: 100%; }\n\n.adyen-checkout__field-group:last-of-type .adyen-checkout__field {\n margin-bottom: 0; }\n\n.adyen-checkout__fieldset--readonly .adyen-checkout__fieldset__fields {\n color: #00112c;\n font-size: 0.81em;\n line-height: 19px;\n margin: 0; }\n",".adyen-checkout__field {\n display: block;\n margin-bottom: 16px;\n width: 100%; }\n\n.adyen-checkout__field:last-of-type {\n margin-bottom: 0; }\n\n.adyen-checkout__label {\n display: block; }\n\n.adyen-checkout__label__text,\n.adyen-checkout__helper-text {\n color: #00112c;\n display: block;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 13px;\n padding-bottom: 5px; }\n\n.adyen-checkout__helper-text {\n color: #687282; }\n\n.adyen-checkout__label__text {\n transition: color 0.1s ease-out;\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; }\n\n.adyen-checkout__label__text--error {\n color: #d10244; }\n\n.adyen-checkout__label--focused .adyen-checkout__label__text {\n color: #06f; }\n\n.adyen-checkout__error-text {\n display: flex;\n color: #d10244;\n font-weight: normal;\n margin-top: 4px;\n font-size: 0.75em;\n align-items: center; }\n",".adyen-checkout__radio_group + .adyen-checkout-input__inline-validation {\n display: none; }\n\n.adyen-checkout__radio_group__input {\n opacity: 0;\n position: absolute; }\n\n.adyen-checkout__radio_group__label {\n padding-bottom: 0;\n padding-left: 24px;\n position: relative;\n display: block;\n color: inherit;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 16px;\n overflow: visible; }\n\n.adyen-checkout__label--focused .adyen-checkout__radio_group__label {\n color: inherit; }\n\n.adyen-checkout__radio_group__label:before {\n content: '';\n position: absolute;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 50%;\n height: 16px;\n width: 16px;\n left: 0;\n top: 0;\n transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out; }\n\n.adyen-checkout__radio_group__label:hover:before {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db;\n cursor: pointer; }\n\n.adyen-checkout__radio_group__label:after {\n content: '';\n display: block;\n position: absolute;\n margin: 0 auto;\n left: 5px;\n top: 5px;\n height: 6px;\n width: 6px;\n background-color: #fff;\n border-radius: 50%;\n transform: scale(0);\n transition: transform 0.2s ease-out;\n box-shadow: 0 1px 1px rgba(0, 15, 45, 0.25); }\n\n.adyen-checkout__radio_group__label:hover {\n border-color: #06f;\n cursor: pointer; }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:before,\n.adyen-checkout__radio_group__label--selected {\n background-color: #06f;\n border: 0;\n transition: all 0.2s ease-out; }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:after {\n transform: scale(1); }\n\n.adyen-checkout__radio_group__input:focus + .adyen-checkout__radio_group__label:before {\n border-color: #06f;\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:hover:before,\n.adyen-checkout__radio_group__input:checked:focus + .adyen-checkout__radio_group__label:before,\n.adyen-checkout__radio_group__input:checked:active + .adyen-checkout__radio_group__label:before {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid:before {\n border: 1px solid #d10244; }\n",".adyen-checkout__checkbox {\n display: block; }\n .adyen-checkout__checkbox__label {\n position: relative;\n padding-left: 24px;\n cursor: pointer;\n display: inline-block;\n line-height: 19px;\n color: #00112c;\n font-size: 0.81em;\n font-weight: normal;\n user-select: none; }\n [dir='rtl'] .adyen-checkout__checkbox__label {\n padding-left: 0;\n padding-right: 24px; }\n\n.adyen-checkout__checkbox__input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n /* Check */\n /* Box */ }\n .adyen-checkout__checkbox__input:checked + .adyen-checkout__checkbox__label:before {\n opacity: 1; }\n .adyen-checkout__checkbox__input:checked + .adyen-checkout__checkbox__label:after {\n border: 1px solid #06f;\n background-color: #06f; }\n .adyen-checkout__checkbox__input:checked:hover + .adyen-checkout__checkbox__label:after {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4);\n border-color: #06f; }\n .adyen-checkout__checkbox__input:focus + .adyen-checkout__checkbox__label:after {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n .adyen-checkout__checkbox__input:hover:not(:focus) + .adyen-checkout__checkbox__label:after {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db; }\n .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:before {\n border: 1px solid transparent;\n border-bottom: 2px solid #fff;\n border-right: 2px solid #fff;\n border-radius: 0 2px 1px 2px;\n content: '';\n height: 11px;\n left: 1px;\n opacity: 0;\n position: absolute;\n top: 2px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n transition: opacity 0.2s ease-out;\n width: 6px;\n z-index: 1; }\n [dir='rtl'] .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:before {\n left: auto;\n right: 8px; }\n .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 16px;\n height: 16px;\n border-radius: 3px;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n z-index: 0;\n transition: background 0.15s ease-out, border 0.05s ease-out, box-shadow 0.1s ease-out; }\n [dir='rtl'] .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:after {\n left: auto;\n right: 0; }\n\n.adyen-checkout__field--consentCheckbox {\n background: #e6e9eb;\n border: 1px solid #e6e9eb;\n border-radius: 6px;\n padding: 14px 14px 13px 14px; }\n [dir='rtl'] .adyen-checkout__field--consentCheckbox {\n padding: 14px 14px 13px 14px; }\n .adyen-checkout__field--consentCheckbox.adyen-checkout__field--error {\n border-color: #d10244; }\n .adyen-checkout__field--consentCheckbox .adyen-checkout-input__inline-validation {\n right: -27px;\n top: 10px; }\n",".adyen-checkout__dropdown {\n position: relative; }\n\n.adyen-checkout__dropdown__button {\n display: flex;\n align-items: center;\n cursor: pointer;\n justify-content: space-between; }\n\n.adyen-checkout__dropdown__button:after {\n position: absolute;\n content: '';\n height: 6px;\n right: 16px;\n width: 8px;\n background-image: url(\"data:image/svg+xml,%3Csvg width='8' height='7' viewBox='0 0 8 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.19471 6.5646C3.59429 7.09797 4.39396 7.0986 4.79439 6.56587L7.78716 2.58424C8.28257 1.92514 7.81232 0.983398 6.98779 0.983398L1.01209 0.983398C0.188292 0.983398 -0.282154 1.92367 0.211778 2.58298L3.19471 6.5646Z' fill='%23687282'/%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-position: center; }\n [dir='rtl'] .adyen-checkout__dropdown__button:after {\n left: 16px;\n right: auto; }\n\n.adyen-checkout__dropdown__button--active:after {\n transform: rotate(180deg); }\n\n.adyen-checkout__filter-input {\n background: #fff;\n border: 0;\n caret-color: #06f;\n color: #00112c;\n font-family: inherit;\n font-size: 1em;\n height: 100%;\n padding: 0;\n width: 100%; }\n .adyen-checkout__filter-input::placeholder {\n color: #b9c4c9;\n font-weight: 200; }\n .adyen-checkout__filter-input:focus, .adyen-checkout__filter-input:active {\n outline: 0; }\n\n.adyen-checkout__dropdown__list {\n position: absolute;\n width: 100%;\n background: #fff;\n list-style: none;\n padding: 0;\n margin: 0;\n z-index: 1;\n margin-bottom: 50px;\n overflow-y: auto;\n display: none; }\n\n.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active {\n display: block; }\n\n.adyen-checkout__dropdown__element {\n display: flex;\n justify-content: space-between;\n align-items: center; }\n",".adyen-checkout__image {\n opacity: 0;\n transition: opacity 0.6s ease-out; }\n .adyen-checkout__image--loaded {\n opacity: 1; }\n",".adyen-checkout__dropdown {\n max-width: 100%;\n width: 100%;\n font-size: 1em; }\n\n.adyen-checkout__dropdown__button {\n padding: 7px 24px 7px 12px;\n border: 1px solid #b9c4c9;\n background: #fff;\n color: #00112c;\n text-decoration: none;\n border-radius: 6px;\n outline: 0;\n width: 100%;\n font-size: 1em;\n height: 40px;\n line-height: 20px;\n user-select: none;\n transition: border 0.2s ease-out, box-shadow 0.2s ease-out; }\n [dir='rtl'] .adyen-checkout__dropdown__button {\n padding: 7px 12px 7px 24px; }\n\n.adyen-checkout__dropdown__button:hover {\n border-color: #99a3ad; }\n\n.adyen-checkout__dropdown__button__icon {\n margin-right: 8px;\n margin-left: auto;\n max-width: 40px;\n height: 26px;\n border-radius: 3px; }\n\n.adyen-checkout__dropdown__button--active,\n.adyen-checkout__dropdown__button--active:hover,\n.adyen-checkout__dropdown__button:active,\n.adyen-checkout__dropdown__button:focus {\n border-color: #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n\n.adyen-checkout__dropdown__button--readonly, .adyen-checkout__dropdown__button--readonly--active, .adyen-checkout__dropdown__button--readonly:hover, .adyen-checkout__dropdown__button--readonly:focus {\n background: #e6e9eb;\n border-color: transparent;\n color: #00112c;\n cursor: not-allowed; }\n\n.adyen-checkout__dropdown__button--readonly:after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='8' height='7' viewBox='0 0 8 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.19471 6.5646C3.59429 7.09797 4.39396 7.0986 4.79439 6.56587L7.78716 2.58424C8.28257 1.92514 7.81232 0.983398 6.98779 0.983398L1.01209 0.983398C0.188292 0.983398 -0.282154 1.92367 0.211778 2.58298L3.19471 6.5646Z' fill='%23B9C4C9'/%3E%3C/svg%3E%0A\"); }\n\n.adyen-checkout__dropdown__button--invalid {\n border-color: #d10244; }\n\n.adyen-checkout__dropdown__button--valid {\n border-bottom-color: #0abf53; }\n\n.adyen-checkout__dropdown__button__text {\n overflow: hidden;\n pointer-events: none;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.adyen-checkout__dropdown__list {\n z-index: 2;\n border-radius: 6px;\n max-height: 375px;\n box-shadow: 0 2px 7px rgba(0, 15, 45, 0.3); }\n\n.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active {\n margin-top: 2px; }\n\n.adyen-checkout__dropdown__element {\n padding: 8px;\n line-height: 20px;\n border: 1px solid transparent;\n word-break: break-word;\n hyphens: auto;\n cursor: pointer;\n font-size: 0.81em;\n outline: 0;\n user-select: none;\n transition: background 0.2s ease-out, border-color 0.2s ease-out; }\n\n.adyen-checkout__dropdown__element:last-child {\n border-bottom: 0; }\n\n.adyen-checkout__dropdown__element:hover,\n.adyen-checkout__dropdown__element:focus,\n.adyen-checkout__dropdown__element:active {\n background: rgba(230, 233, 235, 0.6); }\n\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active {\n background: rgba(0, 102, 255, 0.1); }\n\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:hover,\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:focus,\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:active {\n background: rgba(0, 102, 255, 0.15); }\n\n.adyen-checkout__dropdown__element--disabled {\n opacity: 0.4;\n cursor: not-allowed; }\n\n.adyen-checkout__dropdown__element__icon {\n border-radius: 3px;\n margin-right: 8px;\n max-width: 40px;\n max-height: 26px; }\n\n.adyen-checkout__dropdown__element__flag {\n margin-left: 8px;\n margin-right: 10px;\n max-width: 27px;\n max-height: 18px; }\n\n.adyen-checkout__dropdown + .adyen-checkout-input__inline-validation {\n right: 32px; }\n",".adyen-checkout__field-wrapper {\n display: flex;\n width: 100%; }\n\n.adyen-checkout__field--20 {\n width: 20%; }\n\n.adyen-checkout__field--30 {\n width: 30%; }\n\n.adyen-checkout__field--40 {\n width: 40%; }\n\n.adyen-checkout__field--50 {\n width: 50%; }\n\n.adyen-checkout__field--60 {\n width: 60%; }\n\n.adyen-checkout__field--70 {\n width: 70%; }\n\n.adyen-checkout__field--80 {\n width: 80%; }\n\n.adyen-checkout__field--col-70 {\n width: calc(70% - 8px); }\n\n.adyen-checkout__field--col-30 {\n width: calc(30% - 8px); }\n\n.adyen-checkout__field--col-50 {\n width: calc(50% - 8px); }\n\n.adyen-checkout__field-wrapper > .adyen-checkout__field:first-child {\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__field-wrapper > .adyen-checkout__field:first-child {\n margin-right: 0;\n margin-left: 8px; }\n\n.adyen-checkout__field-wrapper > .adyen-checkout__field:nth-child(2) {\n margin-left: 8px; }\n [dir='rtl'] .adyen-checkout__field-wrapper > .adyen-checkout__field:nth-child(2) {\n margin-left: 0;\n margin-right: 8px; }\n\n.adyen-checkout__field-wrapper:last-of-type > .adyen-checkout__field {\n margin-bottom: 0; }\n\n.adyen-checkout__input {\n color: #00112c;\n caret-color: #06f;\n font-size: 1em;\n font-family: inherit;\n display: block;\n height: 40px;\n background: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 6px;\n padding: 5px 8px;\n position: relative;\n outline: none;\n width: 100%;\n transition: border 0.2s ease-out, box-shadow 0.2s ease-out; }\n\n.adyen-checkout__input:hover {\n border-color: #99a3ad; }\n\n.adyen-checkout__input:required {\n box-shadow: none; }\n\n.adyen-checkout__input[readonly],\n.adyen-checkout__input--disabled {\n background: #e6e9eb;\n border-color: #e6e9eb; }\n\n.adyen-checkout__input--disabled:hover {\n border-color: #e6e9eb; }\n\n.adyen-checkout__input-wrapper {\n position: relative;\n display: block; }\n\n.adyen-checkout__input-wrapper--block {\n display: block; }\n\n.adyen-checkout-input__inline-validation {\n position: absolute;\n width: 16px;\n height: 16px;\n top: 50%;\n transform: translateY(-50%);\n right: 14px; }\n [dir='rtl'] .adyen-checkout-input__inline-validation {\n right: auto;\n left: 14px; }\n [dir='ltr'] .adyen-checkout-input__inline-validation {\n right: 14px;\n left: auto; }\n\n.adyen-checkout-input__inline-validation--valid {\n color: #0abf53; }\n\n.adyen-checkout-input__inline-validation--invalid {\n color: #d10244; }\n\n.adyen-checkout__input--valid {\n border-bottom-color: #0abf53; }\n\n.adyen-checkout__input--error,\n.adyen-checkout__input--invalid,\n.adyen-checkout__input--error:hover,\n.adyen-checkout__input--invalid:hover {\n border-color: #d10244; }\n\n.adyen-checkout__input::placeholder {\n color: #707070;\n font-weight: 200; }\n\n.adyen-checkout__input--date {\n padding-right: 30px; }\n\n.adyen-checkout__input:active,\n.adyen-checkout__input:focus,\n.adyen-checkout__input--focus,\n.adyen-checkout__input:active:hover,\n.adyen-checkout__input:focus:hover,\n.adyen-checkout__input--focus:hover {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n\n.adyen-checkout__input[readonly],\n.adyen-checkout__input[readonly]:hover {\n background-color: #e6e9eb;\n border-color: transparent;\n color: #687282;\n cursor: default; }\n",".adyen-checkout__fieldset--personalDetails .adyen-checkout__field--gender .adyen-checkout__radio_group {\n display: flex; }\n\n.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group {\n display: flex;\n margin: 8px 0; }\n\n.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper {\n margin-right: 20px; }\n .adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper:last-child {\n margin: 0; }\n",".adyen-checkout__open-invoice .adyen-checkout__fieldset--billingAddress {\n padding-bottom: 8px; }\n\n.adyen-checkout__open-invoice .adyen-checkout__fieldset--deliveryAddress {\n margin-top: 24px;\n padding-bottom: 8px; }\n\n.adyen-checkout__open-invoice .adyen-checkout__input--separateDeliveryAddress {\n margin-bottom: 0; }\n\n.adyen-checkout__open-invoice .adyen-checkout__field--consentCheckbox {\n margin-top: 22px; }\n\n.adyen-checkout__input--separateDeliveryAddress + .adyen-checkout__checkbox__label {\n margin-top: 16px; }\n",".adyen-checkout__amazonpay__button {\n margin: auto; }\n\n.adyen-checkout__amazonpay .adyen-checkout__button--ghost {\n display: block;\n margin: 8px auto 0;\n width: auto; }\n","@supports (-webkit-appearance: -apple-pay-button) {\n /*\n * Combination of both classes improve the specificity, avoiding\n * overwrite of the -webkit-appearence by the button native css\n */\n .apple-pay,\n .apple-pay-button {\n -webkit-appearance: -apple-pay-button; }\n .apple-pay-button {\n display: inline-block;\n cursor: pointer; }\n .apple-pay-button-black {\n -apple-pay-button-style: black; }\n .apple-pay-button-white {\n -apple-pay-button-style: white; }\n .apple-pay-button-white-with-line {\n -apple-pay-button-style: white-outline; }\n /* Apple Pay Button types https://developer.apple.com/documentation/apple_pay_on_the_web/displaying_apple_pay_buttons */\n .apple-pay-button--type-plain {\n -apple-pay-button-type: plain; }\n .apple-pay-button--type-buy {\n -apple-pay-button-type: buy; }\n .apple-pay-button--type-donate {\n -apple-pay-button-type: donate; }\n .apple-pay-button--type-check-out {\n -apple-pay-button-type: check-out; }\n .apple-pay-button--type-book {\n -apple-pay-button-type: book; }\n .apple-pay-button--type-subscribe {\n -apple-pay-button-type: subscribe; }\n .apple-pay-button--type-add-money {\n -apple-pay-button-type: add-money; }\n .apple-pay-button--type-contribute {\n -apple-pay-button-type: contribute; }\n .apple-pay-button--type-order {\n -apple-pay-button-type: order; }\n .apple-pay-button--type-reload {\n -apple-pay-button-type: reload; }\n .apple-pay-button--type-rent {\n -apple-pay-button-type: rent; }\n .apple-pay-button--type-support {\n -apple-pay-button-type: support; }\n .apple-pay-button--type-tip {\n -apple-pay-button-type: tip; }\n .apple-pay-button--type-top-up {\n -apple-pay-button-type: top-up; } }\n\n@supports not (-webkit-appearance: -apple-pay-button) {\n .apple-pay-button {\n display: inline-block;\n background-size: 100% 60%;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n border-radius: 5px;\n padding: 0;\n box-sizing: border-box;\n min-width: 200px;\n min-height: 32px;\n max-height: 64px; }\n .apple-pay-button-black {\n background-image: -webkit-named-image(apple-pay-logo-white);\n background-color: black; }\n .apple-pay-button-white {\n background-image: -webkit-named-image(apple-pay-logo-black);\n background-color: white; }\n .apple-pay-button-white-with-line {\n background-image: -webkit-named-image(apple-pay-logo-black);\n background-color: white;\n border: 0.5px solid black; } }\n",".adyen-checkout__applepay__button {\n width: 240px;\n height: 48px; }\n\n.adyen-checkout__dropin .adyen-checkout__applepay__button {\n width: 100%; }\n",".adyen-checkout__issuer-button {\n background-color: #fff;\n box-shadow: inset 0 0 0 1px #b9c4c9;\n border: none;\n border-radius: 6px;\n padding: 0 12px;\n cursor: pointer;\n flex-basis: 47%;\n flex-grow: 2;\n height: 40px;\n font-size: 0.81em;\n display: flex;\n align-items: center;\n justify-content: space-between;\n transition: background 0.3s ease-out, box-shadow 0.3s ease-out; }\n .adyen-checkout__issuer-button:active {\n color: black; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):hover {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button--selected {\n background: #fff;\n box-shadow: inset 0 0 0 2px #06f;\n color: #06f;\n font-weight: 500;\n height: 40px;\n transition: none; }\n\n.adyen-checkout__issuer-button-img {\n max-height: 26px; }\n",".adyen-checkout__issuer-button-group {\n display: flex;\n flex-wrap: wrap;\n gap: 16px 16px; }\n",".adyen-checkout__field--issuer-list-separator {\n margin-top: 16px;\n margin-bottom: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: #687282;\n white-space: nowrap; }\n .adyen-checkout__field--issuer-list-separator:after, .adyen-checkout__field--issuer-list-separator:before {\n content: \"\";\n display: block;\n background: #e6e9eb;\n width: 100%;\n height: 1px; }\n .adyen-checkout__field--issuer-list-separator:after {\n margin-left: 20px; }\n .adyen-checkout__field--issuer-list-separator:before {\n margin-right: 20px; }\n",".adyen-checkout__field--issuer-list {\n margin-bottom: 0; }\n",".adyen-checkout__card-input__form {\n transition: opacity 0.25s ease-out; }\n\n.adyen-checkout__card__cardNumber {\n max-width: 400px; }\n\n.adyen-checkout__card__cardNumber__input {\n padding: 5px 8px; }\n\n.adyen-checkout__card__exp-date__input--oneclick {\n line-height: 30px;\n font-weight: 400;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n text-align: left; }\n\n.adyen-checkout__field--storedCard,\n.adyen-checkout__field--expiryDate,\n.adyen-checkout__card__holderName {\n margin-bottom: 0; }\n\n.adyen-checkout__card__holderName,\n.adyen-checkout__store-details,\n.adyen-checkout__card__kcp-authentication,\n.adyen-checkout__card__socialSecurityNumber,\n.adyen-checkout__installments,\n.adyen-checkout__card-input .adyen-checkout__fieldset--billingAddress {\n margin-top: 16px; }\n\n.adyen-checkout__card-input.adyen-checkout__card-input--loading {\n pointer-events: none; }\n\n.adyen-checkout__card__holderName:first-child {\n margin: 0 0 16px; }\n\n/* When holderName is on top & co-exists with an error panel */\n.adyen-checkout-error-panel--sr-only + .adyen-checkout__card__holderName,\n.adyen-checkout-error-panel + .adyen-checkout__card__holderName {\n margin: 0 0 16px; }\n\n/* Hide card brand icon when cardNumber is in an error state */\n.adyen-checkout__field--cardNumber .adyen-checkout__input--error .adyen-checkout__card__cardNumber__brandIcon {\n display: none; }\n\n/* Hide checkmark when cardNumber is in a valid state (only show brand icon) */\n.adyen-checkout__field--cardNumber\n.adyen-checkout__input--valid:not(.adyen-checkout__card__cardNumber__input--noBrand)\n+ .adyen-checkout-input__inline-validation--valid {\n display: none; }\n\n.adyen-checkout__field--securityCode.adyen-checkout__field--error .adyen-checkout__card__cvc__hint,\n.adyen-checkout__field--securityCode.adyen-checkout__field--valid .adyen-checkout__card__cvc__hint {\n opacity: 0; }\n\n@keyframes cvcIndicateLocation {\n from {\n opacity: 1; }\n to {\n opacity: 0.3; } }\n\n.adyen-checkout__label--focused .adyen-checkout__field__cvc--front-hint .adyen-checkout__card__cvc__hint--front .adyen-checkout__card__cvc__hint__location,\n.adyen-checkout__label--focused .adyen-checkout__field__cvc--back-hint .adyen-checkout__card__cvc__hint--back .adyen-checkout__card__cvc__hint__location {\n animation-duration: 1s;\n animation-name: cvcIndicateLocation;\n animation-iteration-count: infinite;\n animation-direction: alternate; }\n\n.adyen-checkout__card__cvc__hint__wrapper {\n position: absolute;\n right: 0;\n top: 0;\n height: 100%;\n width: 27px;\n display: flex;\n align-items: center;\n margin: 0 10px;\n transition: transform 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955);\n transform-origin: center;\n transform-style: preserve-3d;\n will-change: transform;\n backface-visibility: visible;\n transform: translate3d(0, 0, 0); }\n\n.adyen-checkout__field__cvc--front-hint.adyen-checkout__card__cvc__hint__wrapper {\n transform: rotateY(180deg); }\n\n.adyen-checkout__card__cvc__hint {\n backface-visibility: hidden;\n position: absolute;\n transition: opacity 0.1s linear; }\n\n.adyen-checkout__card__cvc__hint--front {\n transform: rotateY(180deg); }\n\n@media (prefers-reduced-motion: reduce) {\n .adyen-checkout__card__cvc__hint__wrapper {\n transition: none; } }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__fieldset__fields {\n justify-content: left; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group {\n display: flex;\n flex-direction: column; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group__input-wrapper {\n margin-top: 20px; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__field--revolving-plan-installments {\n position: relative;\n top: 42px;\n width: 30%;\n margin-left: 15px; }\n",".loading-input__form {\n opacity: 1; }\n\n.loading-input__form--loading {\n opacity: 0; }\n\n.loading-input__spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: none; }\n\n.loading-input__spinner--active {\n display: block; }\n",".card-input__wrapper {\n position: relative; }\n\n.card-input__wrapper *,\n.card-input__wrapper *::before,\n.card-input__wrapper *::after {\n box-sizing: border-box; }\n\n.card-input__icon {\n border-radius: 3px;\n position: absolute;\n right: 10px;\n margin-left: 7px;\n transform: translateY(-50%);\n top: 50%;\n height: 18px;\n width: 27px; }\n\n.card-input__form {\n opacity: 1; }\n\n.card-input__spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: none; }\n\n.card-input__spinner--active {\n display: block; }\n\n.card-input__form--loading {\n opacity: 0; }\n\n.adyen-checkout__input {\n display: block;\n max-height: 100px; }\n\n.adyen-checkout__card__cvc__input--hidden,\n.adyen-checkout__card__exp-date__input--hidden {\n display: none; }\n\n.adyen-checkout__card__exp-cvc__exp-date__input--hidden {\n justify-content: flex-end; }\n\n.revolving-plan-installments__disabled {\n pointer-events: none;\n opacity: 0.4; }\n",".adyen-checkout-error-panel {\n margin-bottom: 20px; }\n .adyen-checkout-error-panel .adyen-checkout-error-panel__wrapper {\n font-size: .75em; }\n\n.adyen-checkout-error-panel--sr-only {\n position: absolute;\n left: -10000px;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden; }\n",".adyen-checkout__card__dual-branding__buttons {\n display: flex;\n opacity: 0.40;\n pointer-events: none; }\n .adyen-checkout__card__dual-branding__buttons--active {\n opacity: 1;\n pointer-events: auto; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon {\n cursor: pointer;\n opacity: 1; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon:nth-child(1) {\n right: 40px; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon--not-selected {\n opacity: 0.50; }\n",".adyen-checkout__card__brands {\n display: flex;\n flex-basis: auto;\n flex-shrink: 1;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: -8px;\n margin-bottom: 16px; }\n\n.adyen-checkout__card__brands img {\n border-radius: 3px;\n height: 16px;\n width: 24px; }\n\n.adyen-checkout__card__brands__brand-wrapper--disabled {\n opacity: 0.25; }\n\n.adyen-checkout__card__brands__brand-wrapper {\n display: inline-block;\n height: 16px;\n transition: opacity .2s ease-out;\n width: 24px;\n position: relative; }\n\n.adyen-checkout__card__brands__brand-wrapper:after {\n content: '';\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n left: 0;\n border-radius: 3px;\n border: 1px solid rgba(0, 27, 43, 0.17); }\n",".adyen-checkout__button-group {\n background: transparent;\n display: flex;\n justify-content: space-between; }\n .adyen-checkout__button-group .adyen-checkout__button {\n background: transparent;\n border: 0;\n box-shadow: inset 0 0 0 1px #99a3ad;\n color: #00112c;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 40px;\n margin-right: 8px;\n height: 40px;\n padding: 0;\n text-align: center; }\n .adyen-checkout__button-group .adyen-checkout__button:last-child {\n margin-right: 0; }\n .adyen-checkout__button-group .adyen-checkout__button:hover {\n background: transparent;\n box-shadow: inset 0 0 0 2px #99a3ad; }\n .adyen-checkout__button-group .adyen-checkout__button:active {\n background: #f7f8f9;\n box-shadow: inset 0 0 0 2px #99a3ad; }\n .adyen-checkout__button-group .adyen-checkout__button--disabled, .adyen-checkout__button-group .adyen-checkout__button--disabled:hover {\n cursor: not-allowed;\n opacity: 0.4;\n user-select: none; }\n .adyen-checkout__button-group .adyen-checkout__button--selected, .adyen-checkout__button-group .adyen-checkout__button--selected:hover, .adyen-checkout__button-group .adyen-checkout__button--selected:active, .adyen-checkout__button-group .adyen-checkout__button--selected:active:hover {\n background: #e5efff;\n box-shadow: inset 0 0 0 2px #06f;\n color: #06f;\n font-weight: 500;\n height: 40px;\n transition: none; }\n .adyen-checkout__button-group .adyen-checkout__button .adyen-checkout__button-group__input {\n opacity: 0;\n pointer-events: none;\n position: absolute; }\n",".adyen-checkout__adyen-giving .adyen-checkout__status__icon {\n display: block;\n margin: 56px auto 32px; }\n\n.adyen-checkout__adyen-giving .adyen-checkout__status__text {\n color: #00112c;\n margin-bottom: 56px;\n text-align: center; }\n\n.adyen-checkout__campaign {\n border-radius: 6px;\n background: #00112c;\n height: 227px;\n overflow: hidden;\n position: relative; }\n\n.adyen-checkout__campaign-link:hover .adyen-checkout__campaign-description {\n text-decoration: underline; }\n\n.adyen-checkout__campaign-container {\n height: 100%; }\n\n.adyen-checkout__campaign-logo {\n border: 2px solid rgba(255, 255, 255, 0.4);\n border-radius: 3px;\n display: block;\n height: 48px;\n margin-bottom: 16px;\n overflow: hidden;\n width: 48px; }\n\n.adyen-checkout__campaign-background-image {\n background-color: #00112c;\n background-position: center;\n background-size: cover;\n height: 100%; }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:before {\n background: inherit;\n content: '';\n height: 100%;\n position: absolute;\n transition: transform 0.6s ease-out;\n width: 100%; }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:hover:before {\n transform: scale(1.1); }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-content {\n pointer-events: none; }\n\n.adyen-checkout__campaign-content {\n bottom: 0;\n padding: 16px;\n position: absolute;\n z-index: 2; }\n\n.adyen-checkout__campaign-title,\n.adyen-checkout__campaign-description {\n color: #fff;\n font-weight: normal;\n margin: 0; }\n\n.adyen-checkout__campaign-title {\n font-size: 1em;\n margin-bottom: 8px; }\n\n.adyen-checkout__campaign-description {\n font-size: 0.81em;\n line-height: 19px; }\n\n.adyen-checkout__adyen-giving-actions {\n margin-top: 16px; }\n\n.adyen-checkout__button.adyen-checkout__button--donate {\n margin: 16px auto 8px; }\n\n.adyen-checkout__button.adyen-checkout__button--decline {\n display: block;\n margin: auto;\n width: initial; }\n",".adyen-checkout__paywithgoogle {\n height: 48px; }\n\n.adyen-checkout__paywithgoogle > div > button, .adyen-checkout__paywithgoogle > div > button.long, .adyen-checkout__paywithgoogle > div > button.short {\n height: 48px;\n transition: background-color 0.3s ease-out, box-shadow 0.3s ease-out; }\n .adyen-checkout__paywithgoogle > div > button:focus, .adyen-checkout__paywithgoogle > div > button.long:focus, .adyen-checkout__paywithgoogle > div > button.short:focus {\n box-shadow: 0 0 0 2px #99c2ff;\n outline: 0; }\n\n.adyen-checkout__paywithgoogle > div > button.gpay-button {\n padding: 15px 24px 13px; }\n",".adyen-checkout__econtext-input__field > .adyen-checkout__button--pay:only-child {\n margin-top: 0px; }\n",".adyen-checkout__voucher-result {\n box-sizing: border-box;\n border-radius: 12px;\n text-align: center;\n position: relative; }\n\n.adyen-checkout__voucher-result__top,\n.adyen-checkout__voucher-result__bottom {\n background: #fff;\n border: 1px solid #d4d9db; }\n\n.adyen-checkout__voucher-result__top {\n padding: 40px 0 24px;\n border-radius: 12px 12px 0 0;\n border-bottom: 0; }\n\n.adyen-checkout__voucher-result__bottom {\n border-top: 0;\n border-radius: 0 0 12px 12px; }\n\n.adyen-checkout__voucher-result__separator {\n background: #fff;\n position: relative;\n width: calc(100% - 14px);\n height: 13px;\n margin: 0 auto;\n display: flex;\n align-items: center; }\n\n.adyen-checkout__voucher-result__separator::before,\n.adyen-checkout__voucher-result__separator::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDcgMTMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMEw1IDJMNi41IDZIN1YwSDBaTTAgMTNMNSAxMUw2LjUgN0g3VjEzSDBaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNi40MjMwOCA2LjVDNi40MjMwOCAzLjMxMjMyIDMuNzgzOSAwLjc1NTUyNyAwLjUgMC41MTgwMjFWMC41MTczODVDMy44ODYxOCAwLjc1Mzg4IDYuNSAzLjM3MjgzIDYuNSA2LjVDNi41IDkuNjI3MTcgMy44ODYxOCAxMi4yNDYxIDAuNSAxMi40ODI2VjEyLjQ4MkMzLjc4MzkgMTIuMjQ0NSA2LjQyMzA4IDkuNjg3NjcgNi40MjMwOCA2LjVaIiBzdHJva2U9IiNENEQ5REIiLz4KPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iI0Q0RDlEQiIvPgo8cmVjdCB5PSIxMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iI0Q0RDlEQiIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMTMiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==); }\n\n.adyen-checkout__voucher-result__separator::before {\n background-position: 100%;\n background-repeat: no-repeat;\n content: '';\n left: -7px;\n top: 0;\n position: absolute;\n width: 7px;\n height: 13px; }\n\n.adyen-checkout__voucher-result__separator::after {\n background-position: 100%;\n background-repeat: no-repeat;\n content: '';\n right: -7px;\n top: 0;\n position: absolute;\n width: 7px;\n height: 13px;\n transform: rotate(-180deg); }\n\n.adyen-checkout__voucher-result__separator__inner {\n width: 100%;\n border-top: 1px solid #e6e9eb; }\n\n.adyen-checkout__voucher-result__image {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-bottom: 40px; }\n\n.adyen-checkout__link--voucher-result-instructions {\n display: inline-block; }\n\n.adyen-checkout__voucher-result__image__wrapper {\n display: block;\n position: relative;\n height: 48px;\n margin: 0 24px; }\n\n.adyen-checkout__voucher-result__image__wrapper::after {\n border: 1px solid rgba(0, 27, 43, 0.17);\n border-radius: 3px;\n content: '';\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%; }\n\n.adyen-checkout__voucher-result__image__wrapper:nth-child(2)::before {\n border-left: 1px solid #d4d9db;\n content: '';\n height: 64px;\n left: -24.5px;\n position: absolute;\n top: -8px;\n width: 1px; }\n\n.adyen-checkout__voucher-result__image__brand,\n.adyen-checkout__voucher-result__image__issuer {\n height: 48px;\n border-radius: 3px; }\n\n.adyen-checkout__voucher-result__introduction {\n line-height: 19px;\n font-size: 0.81em;\n text-align: center;\n color: #00112c;\n max-width: 400px;\n margin: 0 auto; }\n\n.adyen-checkout__voucher-result__amount {\n margin: 24px auto 0;\n font-size: 1em;\n color: #00112c;\n text-align: center;\n font-weight: bold; }\n\n.adyen-checkout__voucher-result__surcharge {\n font-size: 0.81em;\n line-height: 19px;\n text-align: center;\n color: #687282;\n display: block;\n font-weight: normal; }\n\n.adyen-checkout__voucher-result__code__label {\n position: absolute;\n display: block;\n font-weight: normal;\n right: 0;\n left: 0;\n width: auto;\n line-height: 19px;\n top: -2px;\n margin: 0 auto;\n user-select: none; }\n\n.adyen-checkout__voucher-result__code__label::before {\n content: '';\n position: absolute; }\n\n.adyen-checkout__voucher-result__code__label__text {\n font-size: 13px;\n color: #00112c;\n background: #fff;\n padding: 0 8px;\n letter-spacing: normal;\n line-height: 1; }\n\n.adyen-checkout__voucher-result__code__barcode {\n display: block;\n margin: 0 auto;\n margin-bottom: 8px;\n max-width: 100%;\n height: 56px;\n user-select: none; }\n\n.adyen-checkout__voucher-result__code {\n position: relative;\n font-size: 1.5em;\n text-align: center;\n letter-spacing: 1px;\n color: #00112c;\n border-width: 1px 0;\n padding: 16px 48px 16px;\n display: inline-block;\n margin: 0 auto 0;\n width: 100%;\n font-weight: bold;\n user-select: all;\n word-break: break-word;\n line-height: 1.2; }\n\n.adyen-checkout__voucher-result__details {\n list-style: none;\n padding: 0;\n margin: -1px auto 0 auto; }\n\n.adyen-checkout__voucher-result__details__item {\n display: flex;\n justify-content: space-between;\n font-size: 0.81em;\n color: #00112c;\n padding: 16px 24px;\n border-top: 1px solid #e6e9eb;\n word-break: break-word; }\n\n.adyen-checkout__voucher-result__details__item:last-child {\n margin-bottom: 0; }\n\n.adyen-checkout__voucher-result__details__label {\n max-width: 50%;\n text-align: left; }\n\n.adyen-checkout__voucher-result__details__value {\n max-width: 50%;\n text-align: right;\n font-weight: bold; }\n\n.adyen-checkout__voucher-result__actions {\n margin: 0 auto 32px;\n max-width: 100%;\n min-width: 200px;\n width: 300px;\n display: flex;\n align-items: center;\n justify-content: center;\n list-style: none;\n padding: 0; }\n\n.adyen-checkout__voucher-result__actions__item {\n margin: 0 4px; }\n",".adyen-checkout__paypal__buttons {\n position: relative;\n z-index: 0; }\n\n.adyen-checkout__paypal__button {\n display: flex;\n margin-bottom: 16px; }\n .adyen-checkout__paypal__button:empty {\n display: none; }\n\n.adyen-checkout__paypal__status--pending {\n margin: 16px 0; }\n\n.adyen-checkout__paypal__status--processing {\n align-items: center;\n display: flex;\n font-size: 13px;\n justify-content: center;\n padding: 24px 0; }\n\n.adyen-checkout__payment-method .adyen-checkout__paypal__status--pending {\n margin: -16px 0 38px; }\n\n.adyen-checkout__payment-method .adyen-checkout__paypal__status--processing {\n padding: 20px 0 65px; }\n",".adyen-checkout-phone-input--new {\n direction: ltr; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper {\n width: 100%; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input {\n padding: 0;\n height: auto; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input:focus-within {\n border: 1px solid #06f; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input:focus-within .adyen-checkout-dropdown--countrycode-selector {\n border-right: 1px solid #06f; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button {\n width: auto;\n border: 0;\n height: 35px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button:after {\n box-sizing: revert;\n height: 10px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button--active {\n box-shadow: none; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button--active:hover {\n box-shadow: none; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input--phone-number {\n height: 35px;\n line-height: 35px;\n min-height: 35px;\n padding-bottom: 0;\n padding-top: 0;\n border: 1px solid transparent;\n padding-left: 15px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input--phone-number:focus-within {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-dropdown--countrycode-selector {\n border-right: 1px solid #dce0e5;\n min-width: 134px;\n width: 134px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input-holder--phone-input {\n align-items: center;\n display: flex; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-phone-number {\n align-items: center;\n display: flex;\n flex: 3; }\n .adyen-checkout-phone-input--new .adyen-checkout-phone-input__error-holder {\n margin-top: -10px; }\n",".adyen-checkout__threeds2__challenge-container,\n.adyen-checkout__threeds2__challenge {\n background-color: transparent;\n box-sizing: border-box;\n display: block;\n position: relative;\n overflow: hidden;\n width: 100%;\n min-height: 400px;\n height: inherit; }\n\n.adyen-checkout__threeds2__challenge--01 {\n width: 250px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--01 .adyen-checkout__iframe--threeDSIframe {\n width: 250px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--02 {\n width: 390px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--02 .adyen-checkout__iframe--threeDSIframe {\n width: 390px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--03 {\n width: 500px;\n height: 600px; }\n .adyen-checkout__threeds2__challenge--03 .adyen-checkout__iframe--threeDSIframe {\n width: 500px;\n height: 600px; }\n\n.adyen-checkout__threeds2__challenge--04 {\n width: 600px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--04 .adyen-checkout__iframe--threeDSIframe {\n width: 600px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--05 {\n width: 100%;\n height: 100%; }\n .adyen-checkout__threeds2__challenge--05 .adyen-checkout__iframe--threeDSIframe {\n width: 100%;\n height: 100%; }\n\n.adyen-checkout__iframe--threeDSIframe {\n position: absolute;\n top: 0;\n left: 0;\n border: 0; }\n",".adyen-checkout__threeds2-challenge-error .adyen-checkout__status__icon {\n display: block;\n margin: 56px auto 32px; }\n\n.adyen-checkout__threeds2-challenge-error .adyen-checkout__status__text {\n color: #d10244;\n margin-bottom: 56px;\n text-align: center; }\n",".adyen-checkout__qr-loader {\n background: #fff;\n padding: 40px;\n border: 1px solid #d4d9db;\n border-radius: 12px;\n text-align: center; }\n\n.adyen-checkout__qr-loader--result {\n padding: 100px; }\n\n.adyen-checkout__qr-loader--app {\n border: 0;\n border-radius: 0;\n padding: 0; }\n\n.adyen-checkout__qr-loader__brand-logo {\n width: 74px;\n border-radius: 3px; }\n\n.adyen-checkout__qr-loader__subtitle {\n max-width: 400px;\n margin: 32px auto 0; }\n\n.adyen-checkout__qr-loader__subtitle--result {\n margin-bottom: 32px; }\n\n.adyen-checkout__qr-loader__subtitle,\n.adyen-checkout__qr-loader__payment_amount {\n color: #00112c;\n font-size: 1em;\n line-height: 19px; }\n\n.adyen-checkout__qr-loader__icon {\n width: 88px;\n height: 88px; }\n\n.adyen-checkout__qr-loader__payment_amount {\n font-weight: bold; }\n\n.adyen-checkout__qr-loader__progress {\n height: 4px;\n background: #d4d9db;\n border-radius: 24px;\n margin: 32px auto 12px auto;\n width: 152px;\n padding-right: 3%; }\n [dir='rtl'] .adyen-checkout__qr-loader__progress {\n padding-right: 0;\n padding-left: 3%; }\n\n.adyen-checkout__qr-loader__percentage {\n display: block;\n height: 100%;\n border-radius: 24px;\n background: #06f; }\n\n.adyen-checkout__qr-loader__countdown {\n color: #687282;\n font-size: 0.81em; }\n\n.adyen-checkout__qr-loader > .adyen-checkout__spinner__wrapper {\n margin: 60px 0; }\n\n.adyen-checkout__qr-loader__app-link {\n margin-top: 16px;\n display: none; }\n\n.adyen-checkout__qr-loader__separator__label {\n position: relative;\n font-size: 13px;\n color: #687282;\n overflow: hidden;\n text-align: center;\n z-index: 1;\n display: block; }\n\n.adyen-checkout__qr-loader__separator__label:before,\n.adyen-checkout__qr-loader__separator__label:after {\n position: absolute;\n top: 51%;\n overflow: hidden;\n width: 50%;\n height: 1px;\n content: '\\a0';\n background-color: #e6e9eb; }\n\n.adyen-checkout__qr-loader__separator__label:before {\n margin-left: -52%;\n text-align: right; }\n\n.adyen-checkout__qr-loader__separator__label:after {\n margin-left: 2%; }\n\n.adyen-checkout__button.adyen-checkout__button--qr-loader {\n text-decoration: none;\n margin-top: 24px; }\n\n.adyen-checkout__qr-loader__instructions {\n color: #687282;\n font-size: 1em;\n line-height: 1.5;\n margin-top: 32px; }\n\n.adyen-checkout__qr-loader__actions {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 32px; }\n\n@media only screen and (max-device-width: 1200px) {\n .adyen-checkout__qr-loader__app-link {\n display: block; } }\n",".adyen-checkout__voucher-result--boletobancario .adyen-checkout__voucher-result__code {\n font-size: 0.81em;\n line-height: 19px;\n word-break: break-all;\n padding: 24px; }\n",".adyen-checkout__voucher-result--oxxo .adyen-checkout__voucher-result__code {\n font-size: 0.81em;\n line-height: 19px;\n word-break: break-all;\n padding: 24px; }\n",".adyen-checkout__alert-message {\n display: flex;\n border-radius: 6px;\n margin: 0 0 16px;\n text-align: left;\n padding: 12px;\n font-size: 0.81em; }\n\n.adyen-checkout__alert-message--error {\n background: #fbe6ed; }\n\n.adyen-checkout__alert-message--warning {\n background: #ffeacc; }\n\n.adyen-checkout__alert-message--info {\n background: #e5efff; }\n\n.adyen-checkout__alert-message__icon {\n width: 14px;\n height: 14px;\n margin-right: 8px; }\n",".adyen-checkout__giftcard-result__header {\n align-items: center;\n display: flex;\n flex-wrap: nowrap;\n font-size: 1em;\n font-weight: 400;\n justify-content: space-between;\n position: relative;\n width: 100%; }\n\n.adyen-checkout__giftcard-result__header__title {\n display: flex;\n align-items: center; }\n\n.adyen-checkout__giftcard-result__name {\n margin-left: 8px; }\n\n.adyen-checkout__giftcard-result__balance {\n padding: 0;\n list-style: none;\n margin: 16px 0 0; }\n\n.adyen-checkout__giftcard-result__balance__item {\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px; }\n .adyen-checkout__giftcard-result__balance__item .adyen-checkout__giftcard-result__balance__title--transactionLimit {\n color: #687282; }\n .adyen-checkout__giftcard-result__balance__item:last-child {\n margin-bottom: 0; }\n\n.adyen-checkout__giftcard-result__balance__value--amount {\n font-weight: bold; }\n\n.adyen-checkout__giftcard-result__remaining-balance {\n font-size: 13px;\n line-height: 19px;\n text-align: center;\n color: #687282;\n margin: 8px auto 0; }\n",".adyen-checkout__payment-methods-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.adyen-checkout__payment-method {\n display: block;\n max-height: 60px; }\n .adyen-checkout__payment-method__details {\n display: none; }\n .adyen-checkout__payment-method__image {\n width: 40px;\n height: 26px; }\n .adyen-checkout__payment-method__image__wrapper {\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__payment-method__image__wrapper {\n margin-right: 0;\n margin-left: 8px; }\n .adyen-checkout__payment-method--selected {\n max-height: 100%; }\n .adyen-checkout__payment-method--selected .adyen-checkout__payment-method__details {\n display: block; }\n",".adyen-checkout__payment-method__disable-confirmation {\n background: #d10244;\n font-size: 0.81em;\n color: #fff;\n border-right: 1px solid #c70241;\n border-left: 1px solid #c70241;\n overflow: hidden;\n opacity: 0;\n margin: 0 -17px 0;\n max-height: 0;\n transition: opacity 0.15s ease-out, max-height 0.15s linear, margin-bottom 0.1s linear; }\n .adyen-checkout__payment-method__disable-confirmation.adyen-checkout__payment-method__disable-confirmation--open {\n max-height: 62px;\n opacity: 1;\n margin-bottom: 16px; }\n\n.adyen-checkout__payment-method__disable-confirmation__content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px; }\n\n.adyen-checkout__payment-method__disable-confirmation__buttons {\n display: flex; }\n\n.adyen-checkout__payment-method__disable-confirmation__button {\n background: #d10244;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n display: block;\n height: auto;\n line-height: 14px;\n margin: 0 0 0 8px;\n padding: 8px;\n width: auto; }\n .adyen-checkout__payment-method__disable-confirmation__button:hover, .adyen-checkout__payment-method__disable-confirmation__button:hover:focus {\n box-shadow: none;\n background: #b8023c; }\n .adyen-checkout__payment-method__disable-confirmation__button:active, .adyen-checkout__payment-method__disable-confirmation__button:hover:active {\n background: #9e0234;\n box-shadow: none; }\n\n.adyen-checkout__payment-method__disable-confirmation__button--remove,\n.adyen-checkout__payment-method__disable-confirmation__button--remove:disabled {\n border-color: #fff; }\n\n.adyen-checkout__payment-method__disable-confirmation__button--cancel,\n.adyen-checkout__payment-method__disable-confirmation__button--cancel:disabled {\n border-color: transparent; }\n",".adyen-checkout__payment-method {\n position: relative;\n background: #fff;\n border: 1px solid #e6e9eb;\n cursor: pointer;\n margin-top: -1px;\n width: 100%;\n transition: opacity 0.3s ease-out; }\n\n.adyen-checkout__payment-method:focus {\n outline: 0; }\n\n.adyen-checkout__payment-method:first-child,\n.adyen-checkout__payment-method--selected + .adyen-checkout__payment-method {\n margin-top: 0;\n border-top-left-radius: 12px;\n border-top-right-radius: 12px; }\n\n.adyen-checkout__payment-method:last-child,\n.adyen-checkout__payment-method--next-selected {\n margin-bottom: 0;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px; }\n\n.adyen-checkout__payment-method--loading {\n opacity: 0.2; }\n\n.adyen-checkout__payment-method--selected.adyen-checkout__payment-method--loading {\n opacity: 0.9; }\n\n.adyen-checkout__payment-method--confirming .adyen-checkout__payment-method__details__content {\n pointer-events: none;\n user-select: none; }\n\n.adyen-checkout__payment-method--disabling {\n opacity: 0.3;\n pointer-events: none;\n user-select: none; }\n\n.adyen-checkout__payment-method__header {\n align-items: center;\n color: #00112c;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n font-weight: 400;\n font-size: 1em;\n padding: 12px;\n padding-left: 44px;\n padding-right: 16px;\n position: relative;\n transition: background 0.1s ease-out;\n width: 100%; }\n [dir='rtl'] .adyen-checkout__payment-method__header {\n padding: 12px;\n padding-right: 44px; }\n .adyen-checkout__payment-method--standalone .adyen-checkout__payment-method__header {\n padding: 16px; }\n\n.adyen-checkout__payment-method__header__title {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-right: 16px;\n max-width: 100%;\n border: none;\n background: none;\n cursor: pointer;\n padding: 4px;\n color: #00112c;\n font-size: 1em;\n font-weight: 400; }\n [dir='rtl'] .adyen-checkout__payment-method__header__title {\n margin-right: 0;\n margin-left: 16px; }\n\n.adyen-checkout__payment-method__surcharge {\n color: #687282;\n margin-left: 5px; }\n\n.adyen-checkout__payment-method--selected {\n transition: margin 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, opacity 0.3s ease-out;\n background: #f7f8f9;\n border: 1px solid #e6e9eb;\n margin: 8px 0;\n border-radius: 12px;\n cursor: default; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__header {\n flex-wrap: wrap; }\n\n.adyen-checkout__payment-method__name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden; }\n\n.adyen-checkout__payment-method__name--selected {\n font-weight: 500; }\n\n.adyen-checkout__payment-method__details {\n padding: 0 16px 0;\n position: relative; }\n\n.adyen-checkout__payment-method__details__content {\n margin: 0 0 16px; }\n\n.adyen-checkout__payment-method__image__wrapper {\n height: 26px;\n width: 40px;\n position: relative; }\n\n.adyen-checkout__payment-method__image__wrapper--outline:after {\n content: '';\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n left: 0;\n border-radius: 3px;\n border: 1px solid rgba(0, 27, 43, 0.17); }\n\n.adyen-checkout__payment-method__image {\n display: block;\n border-radius: 3px; }\n\n.adyen-checkout__payment-method__brands {\n display: flex;\n flex-wrap: wrap;\n margin: 4px 0;\n height: 16px;\n flex-basis: auto;\n flex-shrink: 1;\n text-align: right;\n overflow: hidden; }\n .adyen-checkout__payment-method__brands .adyen-checkout__payment-method__brand-number {\n color: #99A3AD;\n font-size: 13px; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__brands {\n text-align: left;\n overflow: visible;\n height: auto; }\n\n.adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper {\n display: inline-block;\n margin-right: 4px;\n height: 16px;\n width: 24px;\n transition: opacity 0.2s ease-out; }\n\n.adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper:last-child {\n margin: 0; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper {\n margin-bottom: 4px; }\n\n.adyen-checkout__payment-method__brands img {\n width: 24px;\n height: 16px; }\n\n.adyen-checkout__payment-method__image__wrapper--disabled {\n opacity: 0.25; }\n\n/* Payment Method Radio Button */\n.adyen-checkout__payment-method__radio {\n position: absolute;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 50%;\n height: 16px;\n width: 16px;\n left: 16px;\n transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out; }\n [dir='rtl'] .adyen-checkout__payment-method__radio {\n right: 16px;\n left: auto; }\n .adyen-checkout__payment-method--standalone .adyen-checkout__payment-method__radio {\n display: none; }\n\n.adyen-checkout__payment-method__radio:after {\n content: '';\n display: block;\n position: absolute;\n margin: 0 auto;\n left: 0;\n right: 0;\n top: 50%;\n height: 6px;\n width: 6px;\n background-color: #fff;\n border-radius: 50%;\n transform: translateY(-50%) scale(0);\n transition: transform 0.3s ease-out; }\n\n.adyen-checkout__payment-method:hover:not(.adyen-checkout__payment-method--selected) .adyen-checkout__payment-method__radio {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db;\n cursor: pointer; }\n\n.adyen-checkout__payment-method__radio--selected {\n background-color: #06f;\n border: 0;\n transition: all 0.3s ease-out; }\n\n.adyen-checkout__payment-method__radio--selected:hover {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__payment-method__radio--selected:after {\n transform: translateY(-50%) scale(1); }\n",".adyen-checkout__order-payment-methods-list {\n list-style: none;\n margin: 0 auto 16px;\n padding: 0; }\n\n.adyen-checkout__order-payment-method {\n position: relative;\n background: #fff;\n border: 1px solid #e6e9eb;\n margin-top: -1px;\n width: 100%; }\n\n.adyen-checkout__order-payment-method:first-child {\n border-top-left-radius: 12px;\n border-top-right-radius: 12px; }\n\n.adyen-checkout__order-payment-method:last-child {\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px; }\n\n.adyen-checkout__order-payment-method__header {\n align-items: center;\n color: #00112c;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n font-weight: 500;\n font-size: 1em;\n padding: 16px;\n position: relative;\n transition: background .1s ease-out;\n width: 100%; }\n .adyen-checkout__order-payment-method__header .adyen-checkout__payment-method__header__title {\n padding: 0; }\n\n.adyen-checkout__order-payment-method__details {\n padding: 0 16px 16px; }\n\n.adyen-checkout__order-payment-method__deducted-amount {\n display: flex;\n justify-content: space-between;\n line-height: 1em;\n font-size: 1em; }\n\n.adyen-checkout__order-payment-method__deducted-amount__label {\n font-size: 0.81em; }\n\n.adyen-checkout__order-payment-method__deducted-amount__value {\n font-weight: 500; }\n\n.adyen-checkout__order-remaining-amount {\n display: block;\n width: 100%;\n padding: 8px 16px;\n color: #7f4a00;\n background: #ffeacc;\n border-radius: 6px;\n margin-bottom: 16px;\n font-size: 0.81em; }\n .adyen-checkout__order-remaining-amount strong {\n font-weight: bold; }\n",".adyen-checkout__status {\n display: flex;\n text-align: center;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n height: 350px;\n margin: 0;\n padding: 32px;\n background-color: #fff;\n border-radius: 6px;\n border: 1px solid #d4d9db;\n font-size: 1em;\n color: #00112c; }\n .adyen-checkout__status__icon {\n margin-bottom: 24px; }\n .adyen-checkout__status .adyen-checkout__spinner__wrapper {\n max-height: 88px; }\n",".adyen-checkout__dropin,\n.adyen-checkout__dropin *,\n.adyen-checkout__dropin *:after,\n.adyen-checkout__dropin *:before {\n box-sizing: border-box; }\n\n.adyen-checkout__payment-methods-list--loading {\n user-select: none;\n pointer-events: none; }\n\n.adyen-checkout__instant-payment-methods-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n .adyen-checkout__instant-payment-methods-list li:not(:last-child) {\n margin-bottom: 8px; }\n\n/* Forms */\n.adyen-checkout__link {\n color: #06f;\n text-decoration: none; }\n\n.adyen-checkout__link:hover {\n text-decoration: underline; }\n",".sf-input__wrapper {\n position: relative; }\n\n.sf-input__wrapper *,\n.sf-input__wrapper *::before,\n.sf-input__wrapper *::after {\n box-sizing: border-box; }\n\n.adyen-checkout__input {\n display: block;\n max-height: 100px; }\n",".adyen-checkout__loading-input__form {\n transition: opacity 0.25s ease-out; }\n\n.adyen-checkout__pm__holderName {\n margin-bottom: 0; }\n\n.adyen-checkout__fieldset__title + .adyen-checkout__ach-sf__form {\n margin-top: 0; }\n\n.adyen-checkout__ach-sf__form {\n margin-top: 16px; }\n\n.adyen-checkout__ach-input .adyen-checkout__fieldset--address {\n margin-top: 16px; }\n",".adyen-checkout__loading-input__form {\n transition: opacity 0.25s ease-out; }\n",".adyen-checkout__await {\n background: #fff;\n padding: 40px;\n border: 1px solid #d4d9db;\n border-radius: 12px;\n text-align: center; }\n\n.adyen-checkout__await--result {\n padding: 100px; }\n\n.adyen-checkout__qr-loader--app {\n border: 0;\n border-radius: 0;\n padding: 0; }\n\n.adyen-checkout__await__brand-logo {\n width: 74px;\n border-radius: 3px; }\n\n.adyen-checkout__await__subtitle,\n.adyen-checkout__await__indicator-text {\n color: #00112c;\n font-size: 1em;\n line-height: 19px;\n margin-top: 32px; }\n\n.adyen-checkout__await__indicator-holder .adyen-checkout__await__indicator-text {\n margin-top: 6px;\n margin-left: 10px; }\n\n.adyen-checkout__await__indicator-holder {\n display: flex;\n justify-content: center;\n margin-top: 32px;\n margin-bottom: 20px; }\n\n.adyen-checkout__await__subtitle--result {\n margin-bottom: 32px; }\n\n.adyen-checkout__await__icon {\n width: 88px;\n height: 88px; }\n\n.adyen-checkout__await__progress {\n height: 4px;\n background: #d4d9db;\n border-radius: 24px;\n margin: 32px auto 12px auto;\n width: 152px; }\n\n.adyen-checkout__await__percentage {\n display: block;\n height: 100%;\n border-radius: 24px;\n background: #06f; }\n\n.adyen-checkout__await__countdown {\n color: #687282;\n font-size: 0.81em; }\n\n.adyen-checkout__await > .adyen-checkout__spinner__wrapper {\n margin: 60px 0; }\n\n.adyen-checkout__await__app-link {\n margin-top: 16px;\n display: none; }\n\n.adyen-checkout__await__separator__label {\n position: relative;\n font-size: 13px;\n color: #687282;\n overflow: hidden;\n text-align: center;\n z-index: 1;\n display: block; }\n\n.adyen-checkout__await__separator__label:before,\n.adyen-checkout__await__separator__label:after {\n position: absolute;\n top: 51%;\n overflow: hidden;\n width: 50%;\n height: 1px;\n content: '\\a0';\n background-color: #e6e9eb; }\n\n.adyen-checkout__await__separator__label:before {\n margin-left: -52%;\n text-align: right; }\n\n.adyen-checkout__await__separator__label:after {\n margin-left: 2%; }\n\n@media only screen and (max-device-width: 1200px) {\n .adyen-checkout__await__app-link {\n display: block; } }\n",".adyen-checkout__blik__helper {\n font-size: 1em;\n font-weight: normal;\n color: #00112c;\n margin: 0 0 16px;\n padding: 0; }\n",".adyen-checkout__bankTransfer__introduction {\n font-size: 0.81em;\n color: #00112c;\n font-weight: 400;\n margin: 0 0 16px;\n padding: 0; }\n\n.adyen-checkout__bankTransfer__emailField {\n margin: 0 0 16px; }\n",".adyen-checkout__bacs--confirm {\n position: relative; }\n .adyen-checkout__bacs--confirm .adyen-checkout-input__inline-validation--valid {\n display: none; }\n\n.adyen-checkout__bacs .adyen-checkout__field--inactive {\n pointer-events: none; }\n\n.adyen-checkout__bacs .adyen-checkout__bacs--edit {\n position: absolute;\n top: -25px;\n right: 0px;\n cursor: pointer;\n width: 20%; }\n .adyen-checkout__bacs .adyen-checkout__bacs--edit-dropin {\n top: -50px; }\n .adyen-checkout__bacs .adyen-checkout__bacs--edit .adyen-checkout__bacs--edit-button {\n border: none;\n background: none;\n color: #06f;\n text-decoration: underline;\n text-align: end;\n cursor: pointer; }\n",".adyen-checkout__voucher-result__introduction {\n font-size: 1em;\n max-width: 420px; }\n",".adyen-checkout__klarna-widget {\n pointer-events: all; }\n",".adyen-checkout__field--vpa {\n margin-bottom: 0px; }\n"]} \ No newline at end of file +{"version":3,"sources":["Spinner.scss","Button.scss","SecondaryButtonLabel.scss","Fieldset.scss","Field.scss","RadioGroup.scss","Checkbox.scss","Select.module.scss","Img.scss","Select.scss","FormFields.scss","PersonalDetails.scss","OpenInvoice.scss","AmazonPay.scss","ApplePayButton.module.scss","ApplePayButton.scss","IssuerButton.scss","IssuerButtonGroup.scss","ContentSeparator.scss","IssuerList.scss","CardInput.scss","LoadingWrapper.module.scss","CardInput.module.scss","ErrorPanel.scss","DualBrandingIcon.scss","AvailableBrands.scss","CtPOneTimePasswordInput.scss","CtPOneTimePassword.scss","CtPSingleCard.scss","CtPCards.scss","CtPLogoutLink.scss","CtPSection.scss","CtPLoader.scss","CtPLogin.scss","ButtonGroup.scss","Donation.scss","GooglePayButton.scss","EcontextInput.scss","Voucher.scss","Paypal.scss","PhoneInput.scss","ThreeDS2.scss","challenge.scss","QRLoader.scss","BoletoVoucherResult.scss","OxxoVoucherResult.scss","Alert.scss","GiftcardResult.scss","DropinComponent.module.scss","DisableOneClickConfirmation.scss","PaymentMethodItem.scss","OrderPaymentMethods.scss","Status.scss","DropinComponent.scss","AchInput.module.scss","AchInput.scss","MBWayInput.scss","Await.scss","BlikInput.scss","BankTransferInput.scss","BacsInput.scss","BacsResult.scss","KlarnaWidget.scss","VpaInput.scss"],"names":[],"mappings":"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","file":"adyen.css","sourcesContent":[".adyen-checkout__spinner__wrapper {\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center; }\n\n.adyen-checkout__spinner__wrapper--inline {\n height: auto;\n display: inline-block;\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__spinner__wrapper--inline {\n margin-right: 0;\n margin-left: 8px; }\n\n.adyen-checkout__spinner {\n border: 3px solid #06f;\n border-radius: 50%;\n height: 43px;\n width: 43px;\n border-top-color: transparent;\n animation: rotateSpinner 1.5s infinite linear; }\n\n.adyen-checkout__spinner--large {\n height: 43px;\n width: 43px; }\n\n.adyen-checkout__spinner--small {\n height: 16px;\n width: 16px;\n border-width: 2px; }\n\n.adyen-checkout__spinner--medium {\n height: 28px;\n width: 28px; }\n\n@keyframes rotateSpinner {\n 0% {\n transform: rotate(0deg); }\n 100% {\n transform: rotate(360deg); } }\n",".adyen-checkout__button {\n background: #00112c;\n border: 0;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n font-size: 1em;\n font-weight: 500;\n height: 48px;\n margin: 0;\n padding: 15px;\n text-decoration: none;\n transition: background 0.3s ease-out, box-shadow 0.3s ease-out;\n width: 100%; }\n .adyen-checkout__button:focus {\n box-shadow: 0 0 0 2px #99c2ff;\n outline: 0; }\n .adyen-checkout__button:hover {\n background: #1c3045;\n box-shadow: 0 0, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14); }\n .adyen-checkout__button:active {\n background: #3a4a5c; }\n .adyen-checkout__button:hover:focus {\n box-shadow: 0 0 0 2px #99c2ff, 0 3px 4px rgba(0, 15, 45, 0.2); }\n .adyen-checkout__button:disabled, .adyen-checkout__button:disabled:hover {\n box-shadow: none;\n cursor: not-allowed;\n opacity: 0.4;\n user-select: all; }\n .adyen-checkout__button.adyen-checkout__button--loading {\n background: #687282;\n box-shadow: none;\n pointer-events: none;\n user-select: none; }\n .adyen-checkout__button.adyen-checkout__button--pay {\n margin-top: 24px;\n display: flex;\n justify-content: center; }\n .adyen-checkout__button.adyen-checkout__button--pay:disabled {\n opacity: 1; }\n .adyen-checkout__button.adyen-checkout__button--standalone {\n margin-top: 0; }\n .adyen-checkout__button.adyen-checkout__button--inline {\n display: block;\n width: auto;\n height: auto;\n padding: 10px 8px;\n font-size: 0.81em; }\n .adyen-checkout__button.adyen-checkout__button--ghost {\n background: none;\n border: 0;\n color: #00112c; }\n .adyen-checkout__button.adyen-checkout__button--ghost:hover {\n background: #f7f8f9;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--ghost:active {\n background: #e6e9eb;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--secondary {\n padding: 10px 12px;\n background: #fff;\n border: 1px solid #00112c;\n color: #00112c; }\n .adyen-checkout__button.adyen-checkout__button--secondary:hover {\n background: #f7f8f9;\n box-shadow: 0px 2px 4px rgba(27, 42, 60, 0.2), 0px 4px 5px rgba(27, 42, 60, 0.14); }\n .adyen-checkout__button.adyen-checkout__button--secondary:active, .adyen-checkout__button.adyen-checkout__button--secondary:active:hover {\n background: #f7f8f9;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--secondary:disabled, .adyen-checkout__button.adyen-checkout__button--secondary:disabled:hover {\n box-shadow: none;\n cursor: not-allowed;\n border-color: #99A3AD;\n background-color: #f7f8f9;\n opacity: 0.5;\n user-select: all; }\n .adyen-checkout__button.adyen-checkout__button--secondary .adyen-checkout__spinner {\n border-color: #00112c;\n border-top-color: transparent; }\n .adyen-checkout__button.adyen-checkout__button--action {\n padding: 10px 12px;\n background: rgba(0, 102, 255, 0.1);\n border: 1px solid transparent;\n color: #06f; }\n .adyen-checkout__button.adyen-checkout__button--action:hover {\n background: rgba(0, 102, 255, 0.2);\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--action:active, .adyen-checkout__button.adyen-checkout__button--action:active:hover {\n background: rgba(0, 102, 255, 0.3);\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--link {\n background: transparent;\n border: 1px solid transparent;\n color: #06f;\n font-weight: 400;\n border-radius: 3px;\n padding: 2px; }\n .adyen-checkout__button.adyen-checkout__button--link:hover {\n background: transparent;\n text-decoration: underline;\n box-shadow: none; }\n .adyen-checkout__button.adyen-checkout__button--completed, .adyen-checkout__button.adyen-checkout__button--completed:hover, .adyen-checkout__button.adyen-checkout__button--completed:active, .adyen-checkout__button.adyen-checkout__button--completed:active:hover {\n background: #0abf53;\n color: #fff; }\n .adyen-checkout__button.adyen-checkout__button--completed .adyen-checkout__button__icon {\n filter: brightness(0) invert(1); }\n .adyen-checkout__button__content {\n height: 100%;\n align-items: center;\n display: flex;\n justify-content: center; }\n .adyen-checkout__button__icon {\n margin-right: 12px; }\n [dir='rtl'] .adyen-checkout__button__icon {\n margin-right: 0;\n margin-left: 12px; }\n .adyen-checkout__button__text {\n display: block;\n justify-content: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .adyen-checkout__button .adyen-checkout__spinner {\n border-color: #fff;\n border-top-color: transparent; }\n",".checkout-secondary-button__text {\n font-size: .85em;\n margin-left: 5px;\n margin-top: 1px; }\n",".adyen-checkout__fieldset {\n display: block;\n padding-bottom: 8px;\n width: 100%; }\n\n.adyen-checkout__fieldset:last-of-type {\n padding-bottom: 0; }\n\n.adyen-checkout__fieldset + .adyen-checkout__fieldset {\n margin-top: 16px; }\n\n.adyen-checkout__fieldset__title {\n color: #687282;\n display: block;\n font-size: 0.68em;\n font-weight: bold;\n letter-spacing: 1px;\n margin: 0;\n padding: 0 0 12px;\n text-transform: uppercase; }\n\n.adyen-checkout__fieldset__fields,\n.adyen-checkout__field-group {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n width: 100%; }\n\n.adyen-checkout__field-group:last-of-type .adyen-checkout__field {\n margin-bottom: 0; }\n\n.adyen-checkout__fieldset--readonly .adyen-checkout__fieldset__fields {\n color: #00112c;\n font-size: 0.81em;\n line-height: 19px;\n margin: 0; }\n",".adyen-checkout__field {\n display: block;\n margin-bottom: 16px;\n width: 100%; }\n\n.adyen-checkout__field:last-of-type {\n margin-bottom: 0; }\n\n.adyen-checkout__label {\n display: block;\n position: relative; }\n\n.adyen-checkout__label__text,\n.adyen-checkout__helper-text {\n color: #00112c;\n display: block;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 13px;\n padding-bottom: 5px; }\n\n.adyen-checkout__label-adornment--end {\n position: absolute;\n right: 0;\n top: 0; }\n\n.adyen-checkout__helper-text {\n color: #687282; }\n\n.adyen-checkout__label__text {\n transition: color 0.1s ease-out;\n display: block;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap; }\n\n.adyen-checkout__label__text--error {\n color: #d10244; }\n\n.adyen-checkout__label--focused .adyen-checkout__label__text {\n color: #06f; }\n\n.adyen-checkout__error-text {\n display: flex;\n color: #d10244;\n font-weight: normal;\n margin-top: 4px;\n font-size: 0.75em;\n align-items: center; }\n",".adyen-checkout__radio_group + .adyen-checkout-input__inline-validation {\n display: none; }\n\n.adyen-checkout__radio_group__input {\n opacity: 0;\n position: absolute; }\n\n.adyen-checkout__radio_group__label {\n padding-bottom: 0;\n padding-left: 24px;\n position: relative;\n display: block;\n color: inherit;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 16px;\n overflow: visible; }\n\n.adyen-checkout__label--focused .adyen-checkout__radio_group__label {\n color: inherit; }\n\n.adyen-checkout__radio_group__label:before {\n content: '';\n position: absolute;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 50%;\n height: 16px;\n width: 16px;\n left: 0;\n top: 0;\n transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out; }\n\n.adyen-checkout__radio_group__label:hover:before {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db;\n cursor: pointer; }\n\n.adyen-checkout__radio_group__label:after {\n content: '';\n display: block;\n position: absolute;\n margin: 0 auto;\n left: 5px;\n top: 5px;\n height: 6px;\n width: 6px;\n background-color: #fff;\n border-radius: 50%;\n transform: scale(0);\n transition: transform 0.2s ease-out;\n box-shadow: 0 1px 1px rgba(0, 15, 45, 0.25); }\n\n.adyen-checkout__radio_group__label:hover {\n border-color: #06f;\n cursor: pointer; }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:before,\n.adyen-checkout__radio_group__label--selected {\n background-color: #06f;\n border: 0;\n transition: all 0.2s ease-out; }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:after {\n transform: scale(1); }\n\n.adyen-checkout__radio_group__input:focus + .adyen-checkout__radio_group__label:before {\n border-color: #06f;\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__radio_group__input:checked + .adyen-checkout__radio_group__label:hover:before,\n.adyen-checkout__radio_group__input:checked:focus + .adyen-checkout__radio_group__label:before,\n.adyen-checkout__radio_group__input:checked:active + .adyen-checkout__radio_group__label:before {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid:before {\n border: 1px solid #d10244; }\n",".adyen-checkout__checkbox {\n display: block; }\n .adyen-checkout__checkbox__label {\n position: relative;\n padding-left: 24px;\n cursor: pointer;\n display: inline-block;\n line-height: 19px;\n color: #00112c;\n font-size: 0.81em;\n font-weight: normal;\n user-select: none; }\n [dir='rtl'] .adyen-checkout__checkbox__label {\n padding-left: 0;\n padding-right: 24px; }\n\n.adyen-checkout__checkbox__input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n /* Check */\n /* Box */ }\n .adyen-checkout__checkbox__input:checked + .adyen-checkout__checkbox__label:before {\n opacity: 1; }\n .adyen-checkout__checkbox__input:checked + .adyen-checkout__checkbox__label:after {\n border: 1px solid #06f;\n background-color: #06f; }\n .adyen-checkout__checkbox__input:checked:hover + .adyen-checkout__checkbox__label:after {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4);\n border-color: #06f; }\n .adyen-checkout__checkbox__input:focus + .adyen-checkout__checkbox__label:after {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n .adyen-checkout__checkbox__input:hover:not(:focus) + .adyen-checkout__checkbox__label:after {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db; }\n .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:before {\n border: 1px solid transparent;\n border-bottom: 2px solid #fff;\n border-right: 2px solid #fff;\n border-radius: 0 2px 1px 2px;\n content: '';\n height: 11px;\n left: 1px;\n opacity: 0;\n position: absolute;\n top: 2px;\n transform: rotateZ(37deg);\n transform-origin: 100% 100%;\n transition: opacity 0.2s ease-out;\n width: 6px;\n z-index: 1; }\n [dir='rtl'] .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:before {\n left: auto;\n right: 8px; }\n .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 16px;\n height: 16px;\n border-radius: 3px;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n z-index: 0;\n transition: background 0.15s ease-out, border 0.05s ease-out, box-shadow 0.1s ease-out; }\n [dir='rtl'] .adyen-checkout__checkbox__input + .adyen-checkout__checkbox__label:after {\n left: auto;\n right: 0; }\n\n.adyen-checkout__field--consentCheckbox {\n background: #e6e9eb;\n border: 1px solid #e6e9eb;\n border-radius: 6px;\n padding: 14px 14px 13px 14px; }\n [dir='rtl'] .adyen-checkout__field--consentCheckbox {\n padding: 14px 14px 13px 14px; }\n .adyen-checkout__field--consentCheckbox.adyen-checkout__field--error {\n border-color: #d10244; }\n .adyen-checkout__field--consentCheckbox .adyen-checkout-input__inline-validation {\n right: -27px;\n top: 10px; }\n",".adyen-checkout__dropdown {\n position: relative; }\n\n.adyen-checkout__dropdown__button {\n display: flex;\n align-items: center;\n cursor: pointer;\n justify-content: space-between; }\n\n.adyen-checkout__dropdown__button:after {\n position: absolute;\n content: '';\n height: 6px;\n right: 16px;\n width: 8px;\n background-image: url(\"data:image/svg+xml,%3Csvg width='8' height='7' viewBox='0 0 8 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.19471 6.5646C3.59429 7.09797 4.39396 7.0986 4.79439 6.56587L7.78716 2.58424C8.28257 1.92514 7.81232 0.983398 6.98779 0.983398L1.01209 0.983398C0.188292 0.983398 -0.282154 1.92367 0.211778 2.58298L3.19471 6.5646Z' fill='%23687282'/%3E%3C/svg%3E%0A\");\n background-repeat: no-repeat;\n background-position: center; }\n [dir='rtl'] .adyen-checkout__dropdown__button:after {\n left: 16px;\n right: auto; }\n\n.adyen-checkout__dropdown__button--active:after {\n transform: rotate(180deg); }\n\n.adyen-checkout__filter-input {\n background: #fff;\n border: 0;\n caret-color: #06f;\n color: #00112c;\n font-family: inherit;\n font-size: 1em;\n height: 100%;\n padding: 0;\n width: 100%; }\n .adyen-checkout__filter-input::placeholder {\n color: #b9c4c9;\n font-weight: 200; }\n .adyen-checkout__filter-input:focus, .adyen-checkout__filter-input:active {\n outline: 0; }\n\n.adyen-checkout__dropdown__list {\n position: absolute;\n width: 100%;\n background: #fff;\n list-style: none;\n padding: 0;\n margin: 0;\n z-index: 1;\n margin-bottom: 50px;\n overflow-y: auto;\n display: none; }\n\n.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active {\n display: block; }\n\n.adyen-checkout__dropdown__element {\n display: flex;\n justify-content: space-between;\n align-items: center; }\n",".adyen-checkout__image {\n opacity: 0;\n transition: opacity 0.6s ease-out; }\n .adyen-checkout__image--loaded {\n opacity: 1; }\n",".adyen-checkout__dropdown__button-icon--left {\n flex-direction: row-reverse;\n justify-content: flex-end; }\n .adyen-checkout__dropdown__button-icon--left > img {\n margin-left: 0;\n margin-right: 12px; }\n\n.adyen-checkout__dropdown {\n max-width: 100%;\n width: 100%;\n font-size: 1em; }\n\n.adyen-checkout__dropdown__button {\n padding: 7px 24px 7px 12px;\n border: 1px solid #b9c4c9;\n background: #fff;\n color: #00112c;\n text-decoration: none;\n border-radius: 6px;\n outline: 0;\n width: 100%;\n font-size: 1em;\n height: 40px;\n line-height: 20px;\n user-select: none;\n transition: border 0.2s ease-out, box-shadow 0.2s ease-out; }\n [dir='rtl'] .adyen-checkout__dropdown__button {\n padding: 7px 12px 7px 24px; }\n\n.adyen-checkout__dropdown__button:hover {\n border-color: #99a3ad; }\n\n.adyen-checkout__dropdown__button__icon {\n margin-right: 8px;\n margin-left: auto;\n max-width: 40px;\n height: 26px;\n border-radius: 3px; }\n\n.adyen-checkout__dropdown__button--active,\n.adyen-checkout__dropdown__button--active:hover,\n.adyen-checkout__dropdown__button:active,\n.adyen-checkout__dropdown__button:focus {\n border-color: #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n\n.adyen-checkout__dropdown__button--readonly, .adyen-checkout__dropdown__button--readonly--active, .adyen-checkout__dropdown__button--readonly:hover, .adyen-checkout__dropdown__button--readonly:focus {\n background: #e6e9eb;\n border-color: transparent;\n color: #00112c;\n cursor: not-allowed; }\n\n.adyen-checkout__dropdown__button--readonly:after {\n background-image: url(\"data:image/svg+xml,%3Csvg width='8' height='7' viewBox='0 0 8 7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.19471 6.5646C3.59429 7.09797 4.39396 7.0986 4.79439 6.56587L7.78716 2.58424C8.28257 1.92514 7.81232 0.983398 6.98779 0.983398L1.01209 0.983398C0.188292 0.983398 -0.282154 1.92367 0.211778 2.58298L3.19471 6.5646Z' fill='%23B9C4C9'/%3E%3C/svg%3E%0A\"); }\n\n.adyen-checkout__dropdown__button--invalid {\n border-color: #d10244; }\n\n.adyen-checkout__dropdown__button--valid {\n border-bottom-color: #0abf53; }\n\n.adyen-checkout__dropdown__button__text {\n overflow: hidden;\n pointer-events: none;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.adyen-checkout__dropdown__list {\n z-index: 2;\n border-radius: 6px;\n max-height: 375px;\n box-shadow: 0 2px 7px rgba(0, 15, 45, 0.3); }\n\n.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active {\n margin-top: 2px; }\n\n.adyen-checkout__dropdown__element {\n padding: 8px;\n line-height: 20px;\n border: 1px solid transparent;\n word-break: break-word;\n hyphens: auto;\n cursor: pointer;\n font-size: 0.81em;\n outline: 0;\n user-select: none;\n transition: background 0.2s ease-out, border-color 0.2s ease-out; }\n\n.adyen-checkout__dropdown__element:last-child {\n border-bottom: 0; }\n\n.adyen-checkout__dropdown__element:hover,\n.adyen-checkout__dropdown__element:focus,\n.adyen-checkout__dropdown__element:active {\n background: rgba(230, 233, 235, 0.6); }\n\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active {\n background: rgba(0, 102, 255, 0.1); }\n\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:hover,\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:focus,\n.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active:active {\n background: rgba(0, 102, 255, 0.15); }\n\n.adyen-checkout__dropdown__element--disabled {\n opacity: 0.4;\n cursor: not-allowed; }\n\n.adyen-checkout__dropdown__element__icon {\n border-radius: 3px;\n margin-right: 8px;\n max-width: 40px;\n max-height: 26px; }\n\n.adyen-checkout__dropdown__element-icon--left {\n flex-direction: row-reverse;\n justify-content: flex-end; }\n\n.adyen-checkout__dropdown__element__flag {\n margin-left: 8px;\n margin-right: 10px;\n max-width: 27px;\n max-height: 18px; }\n\n.adyen-checkout__dropdown + .adyen-checkout-input__inline-validation {\n right: 32px; }\n",".adyen-checkout__field-wrapper {\n display: flex;\n width: 100%; }\n\n.adyen-checkout__field--20 {\n width: 20%; }\n\n.adyen-checkout__field--30 {\n width: 30%; }\n\n.adyen-checkout__field--40 {\n width: 40%; }\n\n.adyen-checkout__field--50 {\n width: 50%; }\n\n.adyen-checkout__field--60 {\n width: 60%; }\n\n.adyen-checkout__field--70 {\n width: 70%; }\n\n.adyen-checkout__field--80 {\n width: 80%; }\n\n.adyen-checkout__field--col-70 {\n width: calc(70% - 8px); }\n\n.adyen-checkout__field--col-30 {\n width: calc(30% - 8px); }\n\n.adyen-checkout__field--col-50 {\n width: calc(50% - 8px); }\n\n.adyen-checkout__field-wrapper > .adyen-checkout__field:first-child {\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__field-wrapper > .adyen-checkout__field:first-child {\n margin-right: 0;\n margin-left: 8px; }\n\n.adyen-checkout__field-wrapper > .adyen-checkout__field:nth-child(2) {\n margin-left: 8px; }\n [dir='rtl'] .adyen-checkout__field-wrapper > .adyen-checkout__field:nth-child(2) {\n margin-left: 0;\n margin-right: 8px; }\n\n.adyen-checkout__field-wrapper:last-of-type > .adyen-checkout__field {\n margin-bottom: 0; }\n\n.adyen-checkout__input {\n color: #00112c;\n caret-color: #06f;\n font-size: 1em;\n font-family: inherit;\n display: block;\n height: 40px;\n background: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 6px;\n padding: 5px 8px;\n position: relative;\n outline: none;\n width: 100%;\n transition: border 0.2s ease-out, box-shadow 0.2s ease-out; }\n\n.adyen-checkout__input:hover {\n border-color: #99a3ad; }\n\n.adyen-checkout__input:required {\n box-shadow: none; }\n\n.adyen-checkout__input[readonly],\n.adyen-checkout__input--disabled {\n background: #e6e9eb;\n border-color: #e6e9eb; }\n\n.adyen-checkout__input--disabled:hover {\n border-color: #e6e9eb; }\n\n.adyen-checkout__input-wrapper {\n position: relative;\n display: block; }\n\n.adyen-checkout__input-wrapper--block {\n display: block; }\n\n.adyen-checkout-input__inline-validation {\n position: absolute;\n width: 16px;\n height: 16px;\n top: 50%;\n transform: translateY(-50%);\n right: 14px; }\n [dir='rtl'] .adyen-checkout-input__inline-validation {\n right: auto;\n left: 14px; }\n [dir='ltr'] .adyen-checkout-input__inline-validation {\n right: 14px;\n left: auto; }\n\n.adyen-checkout-input__inline-validation--valid {\n color: #0abf53; }\n\n.adyen-checkout-input__inline-validation--invalid {\n color: #d10244; }\n\n.adyen-checkout__input--valid {\n border-bottom-color: #0abf53; }\n\n.adyen-checkout__input--error,\n.adyen-checkout__input--invalid,\n.adyen-checkout__input--error:hover,\n.adyen-checkout__input--invalid:hover {\n border-color: #d10244; }\n\n.adyen-checkout__input::placeholder {\n color: #707070;\n font-weight: 200; }\n\n.adyen-checkout__input--date {\n padding-right: 30px; }\n\n.adyen-checkout__input:active,\n.adyen-checkout__input:focus,\n.adyen-checkout__input--focus,\n.adyen-checkout__input:active:hover,\n.adyen-checkout__input:focus:hover,\n.adyen-checkout__input--focus:hover {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n\n.adyen-checkout__input[readonly],\n.adyen-checkout__input[readonly]:hover {\n background-color: #e6e9eb;\n border-color: transparent;\n color: #687282;\n cursor: default; }\n",".adyen-checkout__fieldset--personalDetails .adyen-checkout__field--gender .adyen-checkout__radio_group {\n display: flex; }\n\n.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group {\n display: flex;\n margin: 8px 0; }\n\n.adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper {\n margin-right: 20px; }\n .adyen-checkout__fieldset--personalDetails .adyen-checkout__radio_group__input-wrapper:last-child {\n margin: 0; }\n",".adyen-checkout__open-invoice .adyen-checkout__fieldset--billingAddress {\n padding-bottom: 8px; }\n\n.adyen-checkout__open-invoice .adyen-checkout__fieldset--deliveryAddress {\n margin-top: 24px;\n padding-bottom: 8px; }\n\n.adyen-checkout__open-invoice .adyen-checkout__input--separateDeliveryAddress {\n margin-bottom: 0; }\n\n.adyen-checkout__open-invoice .adyen-checkout__field--consentCheckbox {\n margin-top: 22px; }\n\n.adyen-checkout__input--separateDeliveryAddress + .adyen-checkout__checkbox__label {\n margin-top: 16px; }\n",".adyen-checkout__amazonpay__button {\n margin: auto; }\n\n.adyen-checkout__amazonpay .adyen-checkout__button--ghost {\n display: block;\n margin: 8px auto 0;\n width: auto; }\n","@supports (-webkit-appearance: -apple-pay-button) {\n /*\n * Combination of both classes improve the specificity, avoiding\n * overwrite of the -webkit-appearence by the button native css\n */\n .apple-pay,\n .apple-pay-button {\n -webkit-appearance: -apple-pay-button; }\n .apple-pay-button {\n display: inline-block;\n cursor: pointer; }\n .apple-pay-button-black {\n -apple-pay-button-style: black; }\n .apple-pay-button-white {\n -apple-pay-button-style: white; }\n .apple-pay-button-white-with-line {\n -apple-pay-button-style: white-outline; }\n /* Apple Pay Button types https://developer.apple.com/documentation/apple_pay_on_the_web/displaying_apple_pay_buttons */\n .apple-pay-button--type-plain {\n -apple-pay-button-type: plain; }\n .apple-pay-button--type-buy {\n -apple-pay-button-type: buy; }\n .apple-pay-button--type-donate {\n -apple-pay-button-type: donate; }\n .apple-pay-button--type-check-out {\n -apple-pay-button-type: check-out; }\n .apple-pay-button--type-book {\n -apple-pay-button-type: book; }\n .apple-pay-button--type-subscribe {\n -apple-pay-button-type: subscribe; }\n .apple-pay-button--type-add-money {\n -apple-pay-button-type: add-money; }\n .apple-pay-button--type-contribute {\n -apple-pay-button-type: contribute; }\n .apple-pay-button--type-order {\n -apple-pay-button-type: order; }\n .apple-pay-button--type-reload {\n -apple-pay-button-type: reload; }\n .apple-pay-button--type-rent {\n -apple-pay-button-type: rent; }\n .apple-pay-button--type-support {\n -apple-pay-button-type: support; }\n .apple-pay-button--type-tip {\n -apple-pay-button-type: tip; }\n .apple-pay-button--type-top-up {\n -apple-pay-button-type: top-up; } }\n\n@supports not (-webkit-appearance: -apple-pay-button) {\n .apple-pay-button {\n display: inline-block;\n background-size: 100% 60%;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n border-radius: 5px;\n padding: 0;\n box-sizing: border-box;\n min-width: 200px;\n min-height: 32px;\n max-height: 64px; }\n .apple-pay-button-black {\n background-image: -webkit-named-image(apple-pay-logo-white);\n background-color: black; }\n .apple-pay-button-white {\n background-image: -webkit-named-image(apple-pay-logo-black);\n background-color: white; }\n .apple-pay-button-white-with-line {\n background-image: -webkit-named-image(apple-pay-logo-black);\n background-color: white;\n border: 0.5px solid black; } }\n",".adyen-checkout__applepay__button {\n width: 240px;\n height: 48px; }\n\n.adyen-checkout__dropin .adyen-checkout__applepay__button {\n width: 100%; }\n",".adyen-checkout__issuer-button {\n background-color: #fff;\n box-shadow: inset 0 0 0 1px #b9c4c9;\n border: none;\n border-radius: 6px;\n padding: 0 12px;\n cursor: pointer;\n flex-basis: 47%;\n flex-grow: 2;\n height: 40px;\n font-size: 0.81em;\n display: flex;\n align-items: center;\n justify-content: space-between;\n transition: background 0.3s ease-out, box-shadow 0.3s ease-out; }\n .adyen-checkout__issuer-button:active {\n color: black; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button:not(.adyen-checkout__issuer-button--selected):hover {\n outline: none;\n box-shadow: inset 0 0 0 2px #99A3AD; }\n .adyen-checkout__issuer-button--selected {\n background: #fff;\n box-shadow: inset 0 0 0 2px #06f;\n color: #06f;\n font-weight: 500;\n height: 40px;\n transition: none; }\n\n.adyen-checkout__issuer-button-img {\n max-height: 26px; }\n",".adyen-checkout__issuer-button-group {\n display: flex;\n flex-wrap: wrap;\n gap: 16px 16px; }\n",".adyen-checkout__content-separator {\n margin-top: 16px;\n margin-bottom: 16px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: #687282;\n white-space: nowrap; }\n .adyen-checkout__content-separator:after, .adyen-checkout__content-separator:before {\n content: \"\";\n display: block;\n background: #e6e9eb;\n width: 100%;\n height: 1px; }\n .adyen-checkout__content-separator:after {\n margin-left: 20px; }\n .adyen-checkout__content-separator:before {\n margin-right: 20px; }\n",".adyen-checkout__field--issuer-list {\n margin-bottom: 0; }\n\n.adyen-checkout__issuer-list__termsAndConditions {\n text-align: center; }\n",".adyen-checkout__card-input__form {\n transition: opacity 0.25s ease-out; }\n\n.adyen-checkout__card__cardNumber {\n max-width: 400px; }\n\n.adyen-checkout__card__cardNumber__input {\n padding: 5px 8px; }\n\n.adyen-checkout__card__exp-date__input--oneclick {\n line-height: 30px;\n font-weight: 400;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n text-align: left; }\n\n.adyen-checkout__field--storedCard,\n.adyen-checkout__field--expiryDate,\n.adyen-checkout__card__holderName {\n margin-bottom: 0; }\n\n.adyen-checkout__card__holderName,\n.adyen-checkout__store-details,\n.adyen-checkout__card__kcp-authentication,\n.adyen-checkout__card__socialSecurityNumber,\n.adyen-checkout__installments,\n.adyen-checkout__card-input .adyen-checkout__fieldset--billingAddress {\n margin-top: 16px; }\n\n.adyen-checkout__card-input.adyen-checkout__card-input--loading {\n pointer-events: none; }\n\n.adyen-checkout__card__holderName:first-child {\n margin: 0 0 16px; }\n\n/* When holderName is on top & co-exists with an error panel */\n.adyen-checkout-error-panel--sr-only + .adyen-checkout__card__holderName,\n.adyen-checkout-error-panel + .adyen-checkout__card__holderName {\n margin: 0 0 16px; }\n\n/* Hide card brand icon when cardNumber is in an error state */\n.adyen-checkout__field--cardNumber .adyen-checkout__input--error .adyen-checkout__card__cardNumber__brandIcon {\n display: none; }\n\n/* Hide checkmark when cardNumber is in a valid state (only show brand icon) */\n.adyen-checkout__field--cardNumber\n.adyen-checkout__input--valid:not(.adyen-checkout__card__cardNumber__input--noBrand)\n+ .adyen-checkout-input__inline-validation--valid {\n display: none; }\n\n.adyen-checkout__field--securityCode.adyen-checkout__field--error .adyen-checkout__card__cvc__hint,\n.adyen-checkout__field--securityCode.adyen-checkout__field--valid .adyen-checkout__card__cvc__hint {\n opacity: 0; }\n\n@keyframes cvcIndicateLocation {\n from {\n opacity: 1; }\n to {\n opacity: 0.3; } }\n\n.adyen-checkout__label--focused .adyen-checkout__field__cvc--front-hint .adyen-checkout__card__cvc__hint--front .adyen-checkout__card__cvc__hint__location,\n.adyen-checkout__label--focused .adyen-checkout__field__cvc--back-hint .adyen-checkout__card__cvc__hint--back .adyen-checkout__card__cvc__hint__location {\n animation-duration: 1s;\n animation-name: cvcIndicateLocation;\n animation-iteration-count: infinite;\n animation-direction: alternate; }\n\n.adyen-checkout__card__cvc__hint__wrapper {\n position: absolute;\n right: 0;\n top: 0;\n height: 100%;\n width: 27px;\n display: flex;\n align-items: center;\n margin: 0 10px;\n transition: transform 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955);\n transform-origin: center;\n transform-style: preserve-3d;\n will-change: transform;\n backface-visibility: visible;\n transform: translate3d(0, 0, 0); }\n\n.adyen-checkout__field__cvc--front-hint.adyen-checkout__card__cvc__hint__wrapper {\n transform: rotateY(180deg); }\n\n.adyen-checkout__card__cvc__hint {\n backface-visibility: hidden;\n position: absolute;\n transition: opacity 0.1s linear; }\n\n.adyen-checkout__card__cvc__hint--front {\n transform: rotateY(180deg); }\n\n@media (prefers-reduced-motion: reduce) {\n .adyen-checkout__card__cvc__hint__wrapper {\n transition: none; } }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__fieldset__fields {\n justify-content: left; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group {\n display: flex;\n flex-direction: column; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__radio_group__input-wrapper {\n margin-top: 20px; }\n\n.adyen-checkout__fieldset--revolving-plan .adyen-checkout__field--revolving-plan-installments {\n position: relative;\n top: 42px;\n width: 30%;\n margin-left: 15px; }\n",".loading-input__form {\n opacity: 1; }\n\n.loading-input__form--loading {\n opacity: 0; }\n\n.loading-input__spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: none; }\n\n.loading-input__spinner--active {\n display: block; }\n",".card-input__wrapper {\n position: relative; }\n\n.card-input__wrapper *,\n.card-input__wrapper *::before,\n.card-input__wrapper *::after {\n box-sizing: border-box; }\n\n.card-input__icon {\n border-radius: 3px;\n position: absolute;\n right: 10px;\n margin-left: 7px;\n transform: translateY(-50%);\n top: 50%;\n height: 18px;\n width: 27px; }\n\n.card-input__form {\n opacity: 1; }\n\n.card-input__spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: none; }\n\n.card-input__spinner--active {\n display: block; }\n\n.card-input__form--loading {\n opacity: 0; }\n\n.adyen-checkout__input {\n display: block;\n max-height: 100px; }\n\n.adyen-checkout__card__cvc__input--hidden,\n.adyen-checkout__card__exp-date__input--hidden {\n display: none; }\n\n.adyen-checkout__card__exp-cvc__exp-date__input--hidden {\n justify-content: flex-end; }\n\n.revolving-plan-installments__disabled {\n pointer-events: none;\n opacity: 0.4; }\n",".adyen-checkout-error-panel {\n margin-bottom: 20px; }\n .adyen-checkout-error-panel .adyen-checkout-error-panel__wrapper {\n font-size: .75em; }\n\n.adyen-checkout-error-panel--sr-only {\n position: absolute;\n left: -10000px;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden; }\n",".adyen-checkout__card__dual-branding__buttons {\n display: flex;\n opacity: 0.40;\n pointer-events: none; }\n .adyen-checkout__card__dual-branding__buttons--active {\n opacity: 1;\n pointer-events: auto; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon {\n cursor: pointer;\n opacity: 1; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon:nth-child(1) {\n right: 40px; }\n .adyen-checkout__card__dual-branding__buttons .adyen-checkout__card__cardNumber__brandIcon--not-selected {\n opacity: 0.50; }\n",".adyen-checkout__card__brands {\n display: flex;\n flex-basis: auto;\n flex-shrink: 1;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: -8px;\n margin-bottom: 16px; }\n\n.adyen-checkout__card__brands img {\n border-radius: 3px;\n height: 16px;\n width: 24px; }\n\n.adyen-checkout__card__brands__brand-wrapper--disabled {\n opacity: 0.25; }\n\n.adyen-checkout__card__brands__brand-wrapper {\n display: inline-block;\n height: 16px;\n transition: opacity .2s ease-out;\n width: 24px;\n position: relative; }\n\n.adyen-checkout__card__brands__brand-wrapper:after {\n content: '';\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n left: 0;\n border-radius: 3px;\n border: 1px solid rgba(0, 27, 43, 0.17); }\n",".adyen-checkout-ctp__otp-resend-code {\n font-size: 13px;\n font-weight: 400;\n color: #0066FF;\n margin-left: auto;\n cursor: pointer; }\n\n.adyen-checkout-ctp__otp-resend-code--disabled,\n.adyen-checkout-ctp__otp-resend-code--confirmation {\n pointer-events: none;\n font-size: 13px;\n font-weight: 400;\n margin-left: auto;\n color: #687282;\n cursor: default; }\n\n.adyen-checkout-ctp__otp-resend-code--confirmation {\n display: flex;\n align-items: center; }\n .adyen-checkout-ctp__otp-resend-code--confirmation > img {\n margin-left: 4px; }\n\n.adyen-checkout-ctp__otp-resend-code-counter {\n font-size: 13px;\n font-weight: 400;\n margin-left: auto;\n cursor: default;\n color: black;\n display: inline-block;\n text-align: right; }\n\n.adyen-checkout__field.adyen-checkout__field--otp {\n margin-bottom: 24px; }\n",".adyen-checkout-ctp__otp-subtitle--highlighted {\n color: #00112c;\n font-weight: 500; }\n",".adyen-checkout-ctp__card-list-single-card {\n border-radius: 6px;\n background-color: #f7f8f9;\n height: 40px;\n padding: 12px;\n display: flex;\n align-items: center;\n font-size: 13px;\n font-weight: 400;\n line-height: 19px; }\n\n.adyen-checkout-ctp__card-image {\n border-radius: 3px;\n margin-right: 8px; }\n",".adyen-checkout-ctp__card {\n width: 100%;\n height: 40px;\n background-color: white;\n border: none;\n border-radius: 4px;\n margin-bottom: 20px;\n box-shadow: 0 0 0 2px #999595;\n cursor: pointer; }\n",".adyen-checkout-ctp__section-logout-button {\n font-size: 13px;\n line-height: 19px;\n font-weight: 400;\n color: #0066FF;\n margin-left: auto;\n cursor: pointer; }\n\n.adyen-checkout-ctp__section-logout-button--disabled {\n pointer-events: none;\n color: #687282; }\n",".adyen-checkout-ctp__section {\n position: relative;\n background-color: white;\n box-shadow: 0px 2px 7px rgba(0, 0, 0, 0.3);\n border-radius: 12px;\n padding: 16px; }\n .adyen-checkout-ctp__section .adyen-checkout__fieldset {\n margin-bottom: 24px; }\n\n.adyen-checkout-ctp__section-title {\n font-size: 16px;\n font-weight: 700;\n line-height: 19px;\n margin-bottom: 4px; }\n\n.adyen-checkout-ctp__section-subtitle {\n font-size: 13px;\n font-weight: 400;\n color: #687282;\n line-height: 19px;\n margin-bottom: 16px; }\n\n.adyen-checkout-ctp__section-header-logo {\n width: 24px;\n margin-right: 6px; }\n\n.adyen-checkout-ctp__section-header-pipe {\n height: 15px;\n margin-right: 6px; }\n\n.adyen-checkout-ctp__section-header {\n display: flex;\n align-items: center;\n height: 18px;\n margin-bottom: 16px; }\n\n.adyen-checkout-ctp__section-header-scheme {\n object-fit: none;\n margin-right: 6px; }\n .adyen-checkout-ctp__section-header-scheme-mc {\n width: 27px; }\n .adyen-checkout-ctp__section-header-scheme-visa {\n width: 35px; }\n\n.adyen-checkout-ctp__separator {\n color: #00112c;\n font-size: 13px;\n font-weight: 400; }\n",".adyen-checkout-ctp__loading-loader {\n padding-top: 58px;\n margin-bottom: 24px; }\n\n.adyen-checkout-ctp__loading-title {\n font-size: 16px;\n line-height: 19px;\n font-weight: bold;\n text-align: center;\n margin-bottom: 8px; }\n\n.adyen-checkout-ctp__loading-subtitle {\n font-size: 16px;\n line-height: 19px;\n max-width: 300px;\n text-align: center;\n margin: 0 auto 59px; }\n",".adyen-checkout__field.adyen-checkout__field--shopperLogin {\n margin-bottom: 24px; }\n",".adyen-checkout__button-group {\n background: transparent;\n display: flex;\n justify-content: space-between; }\n .adyen-checkout__button-group .adyen-checkout__button {\n background: transparent;\n border: 0;\n box-shadow: inset 0 0 0 1px #99a3ad;\n color: #00112c;\n font-size: 0.81em;\n font-weight: normal;\n line-height: 40px;\n margin-right: 8px;\n height: 40px;\n padding: 0;\n text-align: center; }\n .adyen-checkout__button-group .adyen-checkout__button:last-child {\n margin-right: 0; }\n .adyen-checkout__button-group .adyen-checkout__button:hover {\n background: transparent;\n box-shadow: inset 0 0 0 2px #99a3ad; }\n .adyen-checkout__button-group .adyen-checkout__button:active {\n background: #f7f8f9;\n box-shadow: inset 0 0 0 2px #99a3ad; }\n .adyen-checkout__button-group .adyen-checkout__button--disabled, .adyen-checkout__button-group .adyen-checkout__button--disabled:hover {\n cursor: not-allowed;\n opacity: 0.4;\n user-select: none; }\n .adyen-checkout__button-group .adyen-checkout__button--selected, .adyen-checkout__button-group .adyen-checkout__button--selected:hover, .adyen-checkout__button-group .adyen-checkout__button--selected:active, .adyen-checkout__button-group .adyen-checkout__button--selected:active:hover {\n background: #e5efff;\n box-shadow: inset 0 0 0 2px #06f;\n color: #06f;\n font-weight: 500;\n height: 40px;\n transition: none; }\n .adyen-checkout__button-group .adyen-checkout__button .adyen-checkout__button-group__input {\n opacity: 0;\n pointer-events: none;\n position: absolute; }\n",".adyen-checkout__adyen-giving .adyen-checkout__status__icon {\n display: block;\n margin: 56px auto 32px; }\n\n.adyen-checkout__adyen-giving .adyen-checkout__status__text {\n color: #00112c;\n margin-bottom: 56px;\n text-align: center; }\n\n.adyen-checkout__campaign {\n border-radius: 6px;\n background: #00112c;\n height: 227px;\n overflow: hidden;\n position: relative; }\n\n.adyen-checkout__campaign-link:hover .adyen-checkout__campaign-description {\n text-decoration: underline; }\n\n.adyen-checkout__campaign-container {\n height: 100%; }\n\n.adyen-checkout__campaign-logo {\n border: 2px solid rgba(255, 255, 255, 0.4);\n border-radius: 3px;\n display: block;\n height: 48px;\n margin-bottom: 16px;\n overflow: hidden;\n width: 48px; }\n\n.adyen-checkout__campaign-background-image {\n background-color: #00112c;\n background-position: center;\n background-size: cover;\n height: 100%; }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:before {\n background: inherit;\n content: '';\n height: 100%;\n position: absolute;\n transition: transform 0.6s ease-out;\n width: 100%; }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-background-image:hover:before {\n transform: scale(1.1); }\n\n.adyen-checkout__campaign-link .adyen-checkout__campaign-content {\n pointer-events: none; }\n\n.adyen-checkout__campaign-content {\n bottom: 0;\n padding: 16px;\n position: absolute;\n z-index: 2; }\n\n.adyen-checkout__campaign-title,\n.adyen-checkout__campaign-description {\n color: #fff;\n font-weight: normal;\n margin: 0; }\n\n.adyen-checkout__campaign-title {\n font-size: 1em;\n margin-bottom: 8px; }\n\n.adyen-checkout__campaign-description {\n font-size: 0.81em;\n line-height: 19px; }\n\n.adyen-checkout__adyen-giving-actions {\n margin-top: 16px; }\n\n.adyen-checkout__button.adyen-checkout__button--donate {\n margin: 16px auto 8px; }\n\n.adyen-checkout__button.adyen-checkout__button--decline {\n display: block;\n margin: auto;\n width: initial; }\n",".adyen-checkout__paywithgoogle {\n height: 48px; }\n\n.adyen-checkout__paywithgoogle > div > button, .adyen-checkout__paywithgoogle > div > button.long, .adyen-checkout__paywithgoogle > div > button.short {\n height: 48px;\n transition: background-color 0.3s ease-out, box-shadow 0.3s ease-out; }\n .adyen-checkout__paywithgoogle > div > button:focus, .adyen-checkout__paywithgoogle > div > button.long:focus, .adyen-checkout__paywithgoogle > div > button.short:focus {\n box-shadow: 0 0 0 2px #99c2ff;\n outline: 0; }\n\n.adyen-checkout__paywithgoogle > div > button.gpay-button {\n padding: 15px 24px 13px; }\n",".adyen-checkout__econtext-input__field > .adyen-checkout__button--pay:only-child {\n margin-top: 0px; }\n",".adyen-checkout__voucher-result {\n box-sizing: border-box;\n border-radius: 12px;\n text-align: center;\n position: relative; }\n\n.adyen-checkout__voucher-result__top,\n.adyen-checkout__voucher-result__bottom {\n background: #fff;\n border: 1px solid #d4d9db; }\n\n.adyen-checkout__voucher-result__top {\n padding: 40px 0 24px;\n border-radius: 12px 12px 0 0;\n border-bottom: 0; }\n\n.adyen-checkout__voucher-result__bottom {\n border-top: 0;\n border-radius: 0 0 12px 12px; }\n\n.adyen-checkout__voucher-result__separator {\n background: #fff;\n position: relative;\n width: calc(100% - 14px);\n height: 13px;\n margin: 0 auto;\n display: flex;\n align-items: center; }\n\n.adyen-checkout__voucher-result__separator::before,\n.adyen-checkout__voucher-result__separator::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgdmlld0JveD0iMCAwIDcgMTMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMEw1IDJMNi41IDZIN1YwSDBaTTAgMTNMNSAxMUw2LjUgN0g3VjEzSDBaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNi40MjMwOCA2LjVDNi40MjMwOCAzLjMxMjMyIDMuNzgzOSAwLjc1NTUyNyAwLjUgMC41MTgwMjFWMC41MTczODVDMy44ODYxOCAwLjc1Mzg4IDYuNSAzLjM3MjgzIDYuNSA2LjVDNi41IDkuNjI3MTcgMy44ODYxOCAxMi4yNDYxIDAuNSAxMi40ODI2VjEyLjQ4MkMzLjc4MzkgMTIuMjQ0NSA2LjQyMzA4IDkuNjg3NjcgNi40MjMwOCA2LjVaIiBzdHJva2U9IiNENEQ5REIiLz4KPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iI0Q0RDlEQiIvPgo8cmVjdCB5PSIxMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0iI0Q0RDlEQiIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMTMiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==); }\n\n.adyen-checkout__voucher-result__separator::before {\n background-position: 100%;\n background-repeat: no-repeat;\n content: '';\n left: -7px;\n top: 0;\n position: absolute;\n width: 7px;\n height: 13px; }\n\n.adyen-checkout__voucher-result__separator::after {\n background-position: 100%;\n background-repeat: no-repeat;\n content: '';\n right: -7px;\n top: 0;\n position: absolute;\n width: 7px;\n height: 13px;\n transform: rotate(-180deg); }\n\n.adyen-checkout__voucher-result__separator__inner {\n width: 100%;\n border-top: 1px solid #e6e9eb; }\n\n.adyen-checkout__voucher-result__image {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-bottom: 40px; }\n\n.adyen-checkout__link--voucher-result-instructions {\n display: inline-block; }\n\n.adyen-checkout__voucher-result__image__wrapper {\n display: block;\n position: relative;\n height: 48px;\n margin: 0 24px; }\n\n.adyen-checkout__voucher-result__image__wrapper::after {\n border: 1px solid rgba(0, 27, 43, 0.17);\n border-radius: 3px;\n content: '';\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%; }\n\n.adyen-checkout__voucher-result__image__wrapper:nth-child(2)::before {\n border-left: 1px solid #d4d9db;\n content: '';\n height: 64px;\n left: -24.5px;\n position: absolute;\n top: -8px;\n width: 1px; }\n\n.adyen-checkout__voucher-result__image__brand,\n.adyen-checkout__voucher-result__image__issuer {\n height: 48px;\n border-radius: 3px; }\n\n.adyen-checkout__voucher-result__introduction {\n line-height: 19px;\n font-size: 0.81em;\n text-align: center;\n color: #00112c;\n max-width: 400px;\n margin: 0 auto; }\n\n.adyen-checkout__voucher-result__amount {\n margin: 24px auto 0;\n font-size: 1em;\n color: #00112c;\n text-align: center;\n font-weight: bold; }\n\n.adyen-checkout__voucher-result__surcharge {\n font-size: 0.81em;\n line-height: 19px;\n text-align: center;\n color: #687282;\n display: block;\n font-weight: normal; }\n\n.adyen-checkout__voucher-result__code__label {\n position: absolute;\n display: block;\n font-weight: normal;\n right: 0;\n left: 0;\n width: auto;\n line-height: 19px;\n top: -2px;\n margin: 0 auto;\n user-select: none; }\n\n.adyen-checkout__voucher-result__code__label::before {\n content: '';\n position: absolute; }\n\n.adyen-checkout__voucher-result__code__label__text {\n font-size: 13px;\n color: #00112c;\n background: #fff;\n padding: 0 8px;\n letter-spacing: normal;\n line-height: 1; }\n\n.adyen-checkout__voucher-result__code__barcode {\n display: block;\n margin: 0 auto;\n margin-bottom: 8px;\n max-width: 100%;\n height: 56px;\n user-select: none; }\n\n.adyen-checkout__voucher-result__code {\n position: relative;\n font-size: 1.5em;\n text-align: center;\n letter-spacing: 1px;\n color: #00112c;\n border-width: 1px 0;\n padding: 16px 48px 16px;\n display: inline-block;\n margin: 0 auto 0;\n width: 100%;\n font-weight: bold;\n user-select: all;\n word-break: break-word;\n line-height: 1.2; }\n\n.adyen-checkout__voucher-result__details {\n list-style: none;\n padding: 0;\n margin: -1px auto 0 auto; }\n\n.adyen-checkout__voucher-result__details__item {\n display: flex;\n justify-content: space-between;\n font-size: 0.81em;\n color: #00112c;\n padding: 16px 24px;\n border-top: 1px solid #e6e9eb;\n word-break: break-word; }\n\n.adyen-checkout__voucher-result__details__item:last-child {\n margin-bottom: 0; }\n\n.adyen-checkout__voucher-result__details__label {\n max-width: 50%;\n text-align: left; }\n\n.adyen-checkout__voucher-result__details__value {\n max-width: 50%;\n text-align: right;\n font-weight: bold; }\n\n.adyen-checkout__voucher-result__actions {\n margin: 0 auto 32px;\n max-width: 100%;\n min-width: 200px;\n width: 300px;\n display: flex;\n align-items: center;\n justify-content: center;\n list-style: none;\n padding: 0; }\n\n.adyen-checkout__voucher-result__actions__item {\n margin: 0 4px; }\n",".adyen-checkout__paypal__buttons {\n position: relative;\n z-index: 0; }\n\n.adyen-checkout__paypal__button {\n display: flex;\n margin-bottom: 16px; }\n .adyen-checkout__paypal__button:empty {\n display: none; }\n\n.adyen-checkout__paypal__status--pending {\n margin: 16px 0; }\n\n.adyen-checkout__paypal__status--processing {\n align-items: center;\n display: flex;\n font-size: 13px;\n justify-content: center;\n padding: 24px 0; }\n\n.adyen-checkout__payment-method .adyen-checkout__paypal__status--pending {\n margin: -16px 0 38px; }\n\n.adyen-checkout__payment-method .adyen-checkout__paypal__status--processing {\n padding: 20px 0 65px; }\n",".adyen-checkout-phone-input--new {\n direction: ltr; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper {\n width: 100%; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input {\n padding: 0;\n height: auto; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input:focus-within {\n border: 1px solid #06f; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__input:focus-within .adyen-checkout-dropdown--countrycode-selector {\n border-right: 1px solid #06f; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button {\n width: auto;\n border: 0;\n height: 35px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button:after {\n box-sizing: revert;\n height: 10px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button--active {\n box-shadow: none; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout__dropdown__button--active:hover {\n box-shadow: none; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input--phone-number {\n height: 35px;\n line-height: 35px;\n min-height: 35px;\n padding-bottom: 0;\n padding-top: 0;\n border: 1px solid transparent;\n padding-left: 15px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input--phone-number:focus-within {\n border: 1px solid #06f;\n box-shadow: 0 0 0 2px #99c2ff; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-dropdown--countrycode-selector {\n border-right: 1px solid #dce0e5;\n min-width: 134px;\n width: 134px; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-input-holder--phone-input {\n align-items: center;\n display: flex; }\n .adyen-checkout-phone-input--new .adyen-checkout__input-wrapper .adyen-checkout-phone-number {\n align-items: center;\n display: flex;\n flex: 3; }\n .adyen-checkout-phone-input--new .adyen-checkout-phone-input__error-holder {\n margin-top: -10px; }\n",".adyen-checkout__threeds2__challenge-container,\n.adyen-checkout__threeds2__challenge {\n background-color: transparent;\n box-sizing: border-box;\n display: block;\n position: relative;\n overflow: hidden;\n width: 100%;\n min-height: 400px;\n height: inherit; }\n\n.adyen-checkout__threeds2__challenge--01 {\n width: 250px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--01 .adyen-checkout__iframe--threeDSIframe {\n width: 250px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--02 {\n width: 390px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--02 .adyen-checkout__iframe--threeDSIframe {\n width: 390px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--03 {\n width: 500px;\n height: 600px; }\n .adyen-checkout__threeds2__challenge--03 .adyen-checkout__iframe--threeDSIframe {\n width: 500px;\n height: 600px; }\n\n.adyen-checkout__threeds2__challenge--04 {\n width: 600px;\n height: 400px; }\n .adyen-checkout__threeds2__challenge--04 .adyen-checkout__iframe--threeDSIframe {\n width: 600px;\n height: 400px; }\n\n.adyen-checkout__threeds2__challenge--05 {\n width: 100%;\n height: 100%; }\n .adyen-checkout__threeds2__challenge--05 .adyen-checkout__iframe--threeDSIframe {\n width: 100%;\n height: 100%; }\n\n.adyen-checkout__iframe--threeDSIframe {\n position: absolute;\n top: 0;\n left: 0;\n border: 0; }\n",".adyen-checkout__threeds2-challenge-error .adyen-checkout__status__icon {\n display: block;\n margin: 56px auto 32px; }\n\n.adyen-checkout__threeds2-challenge-error .adyen-checkout__status__text {\n color: #d10244;\n margin-bottom: 56px;\n text-align: center; }\n",".adyen-checkout__qr-loader {\n background: #fff;\n padding: 40px;\n border: 1px solid #d4d9db;\n border-radius: 12px;\n text-align: center; }\n\n.adyen-checkout__qr-loader--result {\n padding: 100px; }\n\n.adyen-checkout__qr-loader--app {\n border: 0;\n border-radius: 0;\n padding: 0; }\n\n.adyen-checkout__qr-loader__brand-logo {\n width: 74px;\n border-radius: 3px; }\n\n.adyen-checkout__qr-loader__subtitle {\n max-width: 400px;\n margin: 32px auto 0; }\n\n.adyen-checkout__qr-loader__subtitle--result {\n margin-bottom: 32px; }\n\n.adyen-checkout__qr-loader__subtitle,\n.adyen-checkout__qr-loader__payment_amount {\n color: #00112c;\n font-size: 1em;\n line-height: 19px; }\n\n.adyen-checkout__qr-loader__icon {\n width: 88px;\n height: 88px; }\n\n.adyen-checkout__qr-loader__payment_amount {\n font-weight: bold; }\n\n.adyen-checkout__qr-loader__progress {\n height: 4px;\n background: #d4d9db;\n border-radius: 24px;\n margin: 32px auto 12px auto;\n width: 152px;\n padding-right: 3%; }\n [dir='rtl'] .adyen-checkout__qr-loader__progress {\n padding-right: 0;\n padding-left: 3%; }\n\n.adyen-checkout__qr-loader__percentage {\n display: block;\n height: 100%;\n border-radius: 24px;\n background: #06f; }\n\n.adyen-checkout__qr-loader__countdown {\n color: #687282;\n font-size: 0.81em; }\n\n.adyen-checkout__qr-loader > .adyen-checkout__spinner__wrapper {\n margin: 60px 0; }\n\n.adyen-checkout__qr-loader__app-link {\n margin-top: 16px;\n display: none; }\n\n.adyen-checkout__qr-loader__separator__label {\n position: relative;\n font-size: 13px;\n color: #687282;\n overflow: hidden;\n text-align: center;\n z-index: 1;\n display: block; }\n\n.adyen-checkout__qr-loader__separator__label:before,\n.adyen-checkout__qr-loader__separator__label:after {\n position: absolute;\n top: 51%;\n overflow: hidden;\n width: 50%;\n height: 1px;\n content: '\\a0';\n background-color: #e6e9eb; }\n\n.adyen-checkout__qr-loader__separator__label:before {\n margin-left: -52%;\n text-align: right; }\n\n.adyen-checkout__qr-loader__separator__label:after {\n margin-left: 2%; }\n\n.adyen-checkout__button.adyen-checkout__button--qr-loader {\n text-decoration: none;\n margin-top: 24px; }\n\n.adyen-checkout__qr-loader__instructions {\n color: #687282;\n font-size: 1em;\n line-height: 1.5;\n margin-top: 32px; }\n\n.adyen-checkout__qr-loader__actions {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 32px; }\n\n@media only screen and (max-device-width: 1200px) {\n .adyen-checkout__qr-loader__app-link {\n display: block; } }\n",".adyen-checkout__voucher-result--boletobancario .adyen-checkout__voucher-result__code {\n font-size: 0.81em;\n line-height: 19px;\n word-break: break-all;\n padding: 24px; }\n",".adyen-checkout__voucher-result--oxxo .adyen-checkout__voucher-result__code {\n font-size: 0.81em;\n line-height: 19px;\n word-break: break-all;\n padding: 24px; }\n",".adyen-checkout__alert-message {\n display: flex;\n border-radius: 6px;\n margin: 0 0 16px;\n text-align: left;\n padding: 12px;\n font-size: 0.81em; }\n\n.adyen-checkout__alert-message--error {\n background: #fbe6ed; }\n\n.adyen-checkout__alert-message--warning {\n background: #ffeacc; }\n\n.adyen-checkout__alert-message--info {\n background: #e5efff; }\n\n.adyen-checkout__alert-message__icon {\n width: 14px;\n height: 14px;\n margin-right: 8px; }\n",".adyen-checkout__giftcard-result__header {\n align-items: center;\n display: flex;\n flex-wrap: nowrap;\n font-size: 1em;\n font-weight: 400;\n justify-content: space-between;\n position: relative;\n width: 100%; }\n\n.adyen-checkout__giftcard-result__header__title {\n display: flex;\n align-items: center; }\n\n.adyen-checkout__giftcard-result__name {\n margin-left: 8px; }\n\n.adyen-checkout__giftcard-result__balance {\n padding: 0;\n list-style: none;\n margin: 16px 0 0; }\n\n.adyen-checkout__giftcard-result__balance__item {\n display: flex;\n justify-content: space-between;\n margin-bottom: 8px; }\n .adyen-checkout__giftcard-result__balance__item .adyen-checkout__giftcard-result__balance__title--transactionLimit {\n color: #687282; }\n .adyen-checkout__giftcard-result__balance__item:last-child {\n margin-bottom: 0; }\n\n.adyen-checkout__giftcard-result__balance__value--amount {\n font-weight: bold; }\n\n.adyen-checkout__giftcard-result__remaining-balance {\n font-size: 13px;\n line-height: 19px;\n text-align: center;\n color: #687282;\n margin: 8px auto 0; }\n",".adyen-checkout__payment-methods-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.adyen-checkout__payment-method {\n display: block;\n max-height: 60px; }\n .adyen-checkout__payment-method__details {\n display: none; }\n .adyen-checkout__payment-method__image {\n width: 40px;\n height: 26px; }\n .adyen-checkout__payment-method__image__wrapper {\n margin-right: 8px; }\n [dir='rtl'] .adyen-checkout__payment-method__image__wrapper {\n margin-right: 0;\n margin-left: 8px; }\n .adyen-checkout__payment-method--selected {\n max-height: 100%; }\n .adyen-checkout__payment-method--selected .adyen-checkout__payment-method__details {\n display: block; }\n",".adyen-checkout__payment-method__disable-confirmation {\n background: #d10244;\n font-size: 0.81em;\n color: #fff;\n border-right: 1px solid #c70241;\n border-left: 1px solid #c70241;\n overflow: hidden;\n opacity: 0;\n margin: 0 -17px 0;\n max-height: 0;\n transition: opacity 0.15s ease-out, max-height 0.15s linear, margin-bottom 0.1s linear; }\n .adyen-checkout__payment-method__disable-confirmation.adyen-checkout__payment-method__disable-confirmation--open {\n max-height: 62px;\n opacity: 1;\n margin-bottom: 16px; }\n\n.adyen-checkout__payment-method__disable-confirmation__content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px; }\n\n.adyen-checkout__payment-method__disable-confirmation__buttons {\n display: flex; }\n\n.adyen-checkout__payment-method__disable-confirmation__button {\n background: #d10244;\n border: 1px solid transparent;\n border-radius: 6px;\n color: #fff;\n cursor: pointer;\n display: block;\n height: auto;\n line-height: 14px;\n margin: 0 0 0 8px;\n padding: 8px;\n width: auto; }\n .adyen-checkout__payment-method__disable-confirmation__button:hover, .adyen-checkout__payment-method__disable-confirmation__button:hover:focus {\n box-shadow: none;\n background: #b8023c; }\n .adyen-checkout__payment-method__disable-confirmation__button:active, .adyen-checkout__payment-method__disable-confirmation__button:hover:active {\n background: #9e0234;\n box-shadow: none; }\n\n.adyen-checkout__payment-method__disable-confirmation__button--remove,\n.adyen-checkout__payment-method__disable-confirmation__button--remove:disabled {\n border-color: #fff; }\n\n.adyen-checkout__payment-method__disable-confirmation__button--cancel,\n.adyen-checkout__payment-method__disable-confirmation__button--cancel:disabled {\n border-color: transparent; }\n",".adyen-checkout__payment-method {\n position: relative;\n background: #fff;\n border: 1px solid #e6e9eb;\n cursor: pointer;\n margin-top: -1px;\n width: 100%;\n transition: opacity 0.3s ease-out; }\n\n.adyen-checkout__payment-method:focus {\n outline: 0; }\n\n.adyen-checkout__payment-method:first-child,\n.adyen-checkout__payment-method--selected + .adyen-checkout__payment-method {\n margin-top: 0;\n border-top-left-radius: 12px;\n border-top-right-radius: 12px; }\n\n.adyen-checkout__payment-method:last-child,\n.adyen-checkout__payment-method--next-selected {\n margin-bottom: 0;\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px; }\n\n.adyen-checkout__payment-method--loading {\n opacity: 0.2; }\n\n.adyen-checkout__payment-method--selected.adyen-checkout__payment-method--loading {\n opacity: 0.9; }\n\n.adyen-checkout__payment-method--confirming .adyen-checkout__payment-method__details__content {\n pointer-events: none;\n user-select: none; }\n\n.adyen-checkout__payment-method--disabling {\n opacity: 0.3;\n pointer-events: none;\n user-select: none; }\n\n.adyen-checkout__payment-method__header {\n align-items: center;\n color: #00112c;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n font-weight: 400;\n font-size: 1em;\n padding: 12px;\n padding-left: 44px;\n padding-right: 16px;\n position: relative;\n transition: background 0.1s ease-out;\n width: 100%; }\n [dir='rtl'] .adyen-checkout__payment-method__header {\n padding: 12px;\n padding-right: 44px; }\n .adyen-checkout__payment-method--standalone .adyen-checkout__payment-method__header {\n padding: 16px; }\n\n.adyen-checkout__payment-method__header__title {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-right: 16px;\n max-width: 100%;\n border: none;\n background: none;\n cursor: pointer;\n padding: 4px;\n color: #00112c;\n font-size: 1em;\n font-weight: 400; }\n [dir='rtl'] .adyen-checkout__payment-method__header__title {\n margin-right: 0;\n margin-left: 16px; }\n\n.adyen-checkout__payment-method__surcharge {\n color: #687282;\n margin-left: 5px; }\n\n.adyen-checkout__payment-method--selected {\n transition: margin 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, opacity 0.3s ease-out;\n background: #f7f8f9;\n border: 1px solid #e6e9eb;\n margin: 8px 0;\n border-radius: 12px;\n cursor: default; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__header {\n flex-wrap: wrap; }\n\n.adyen-checkout__payment-method__name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden; }\n\n.adyen-checkout__payment-method__name--selected {\n font-weight: 500; }\n\n.adyen-checkout__payment-method__details {\n padding: 0 16px 0;\n position: relative; }\n\n.adyen-checkout__payment-method__details__content {\n margin: 0 0 16px; }\n\n.adyen-checkout__payment-method__image__wrapper {\n height: 26px;\n width: 40px;\n position: relative; }\n\n.adyen-checkout__payment-method__image__wrapper--outline:after {\n content: '';\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n left: 0;\n border-radius: 3px;\n border: 1px solid rgba(0, 27, 43, 0.17); }\n\n.adyen-checkout__payment-method__image {\n display: block;\n border-radius: 3px; }\n\n.adyen-checkout__payment-method__brands {\n display: flex;\n flex-wrap: wrap;\n margin: 4px 0;\n height: 16px;\n flex-basis: auto;\n flex-shrink: 1;\n text-align: right;\n overflow: hidden; }\n .adyen-checkout__payment-method__brands .adyen-checkout__payment-method__brand-number {\n color: #99A3AD;\n font-size: 13px; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__brands {\n text-align: left;\n overflow: visible;\n height: auto; }\n\n.adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper {\n display: inline-block;\n margin-right: 4px;\n height: 16px;\n width: 24px;\n transition: opacity 0.2s ease-out; }\n\n.adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper:last-child {\n margin: 0; }\n\n.adyen-checkout__payment-method--selected .adyen-checkout__payment-method__brands .adyen-checkout__payment-method__image__wrapper {\n margin-bottom: 4px; }\n\n.adyen-checkout__payment-method__brands img {\n width: 24px;\n height: 16px; }\n\n.adyen-checkout__payment-method__image__wrapper--disabled {\n opacity: 0.25; }\n\n/* Payment Method Radio Button */\n.adyen-checkout__payment-method__radio {\n position: absolute;\n background-color: #fff;\n border: 1px solid #b9c4c9;\n border-radius: 50%;\n height: 16px;\n width: 16px;\n left: 16px;\n transition: border-color 0.2s ease-out, box-shadow 0.2s ease-out; }\n [dir='rtl'] .adyen-checkout__payment-method__radio {\n right: 16px;\n left: auto; }\n .adyen-checkout__payment-method--standalone .adyen-checkout__payment-method__radio {\n display: none; }\n\n.adyen-checkout__payment-method__radio:after {\n content: '';\n display: block;\n position: absolute;\n margin: 0 auto;\n left: 0;\n right: 0;\n top: 50%;\n height: 6px;\n width: 6px;\n background-color: #fff;\n border-radius: 50%;\n transform: translateY(-50%) scale(0);\n transition: transform 0.3s ease-out; }\n\n.adyen-checkout__payment-method:hover:not(.adyen-checkout__payment-method--selected) .adyen-checkout__payment-method__radio {\n border-color: #99a3ad;\n box-shadow: 0 0 0 2px #d4d9db;\n cursor: pointer; }\n\n.adyen-checkout__payment-method__radio--selected {\n background-color: #06f;\n border: 0;\n transition: all 0.3s ease-out; }\n\n.adyen-checkout__payment-method__radio--selected:hover {\n box-shadow: 0 0 0 2px rgba(0, 102, 255, 0.4); }\n\n.adyen-checkout__payment-method__radio--selected:after {\n transform: translateY(-50%) scale(1); }\n",".adyen-checkout__order-payment-methods-list {\n list-style: none;\n margin: 0 auto 16px;\n padding: 0; }\n\n.adyen-checkout__order-payment-method {\n position: relative;\n background: #fff;\n border: 1px solid #e6e9eb;\n margin-top: -1px;\n width: 100%; }\n\n.adyen-checkout__order-payment-method:first-child {\n border-top-left-radius: 12px;\n border-top-right-radius: 12px; }\n\n.adyen-checkout__order-payment-method:last-child {\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px; }\n\n.adyen-checkout__order-payment-method__header {\n align-items: center;\n color: #00112c;\n display: flex;\n flex-wrap: nowrap;\n justify-content: space-between;\n font-weight: 500;\n font-size: 1em;\n padding: 16px;\n position: relative;\n transition: background .1s ease-out;\n width: 100%; }\n .adyen-checkout__order-payment-method__header .adyen-checkout__payment-method__header__title {\n padding: 0; }\n\n.adyen-checkout__order-payment-method__details {\n padding: 0 16px 16px; }\n\n.adyen-checkout__order-payment-method__deducted-amount {\n display: flex;\n justify-content: space-between;\n line-height: 1em;\n font-size: 1em; }\n\n.adyen-checkout__order-payment-method__deducted-amount__label {\n font-size: 0.81em; }\n\n.adyen-checkout__order-payment-method__deducted-amount__value {\n font-weight: 500; }\n\n.adyen-checkout__order-remaining-amount {\n display: block;\n width: 100%;\n padding: 8px 16px;\n color: #7f4a00;\n background: #ffeacc;\n border-radius: 6px;\n margin-bottom: 16px;\n font-size: 0.81em; }\n .adyen-checkout__order-remaining-amount strong {\n font-weight: bold; }\n",".adyen-checkout__status {\n display: flex;\n text-align: center;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n height: 350px;\n margin: 0;\n padding: 32px;\n background-color: #fff;\n border-radius: 6px;\n border: 1px solid #d4d9db;\n font-size: 1em;\n color: #00112c; }\n .adyen-checkout__status__icon {\n margin-bottom: 24px; }\n .adyen-checkout__status .adyen-checkout__spinner__wrapper {\n max-height: 88px; }\n",".adyen-checkout__dropin,\n.adyen-checkout__dropin *,\n.adyen-checkout__dropin *:after,\n.adyen-checkout__dropin *:before {\n box-sizing: border-box; }\n\n.adyen-checkout__payment-methods-list--loading {\n user-select: none;\n pointer-events: none; }\n\n.adyen-checkout__instant-payment-methods-list {\n list-style: none;\n margin: 0;\n padding: 0; }\n .adyen-checkout__instant-payment-methods-list li:not(:last-child) {\n margin-bottom: 8px; }\n\n/* Forms */\n.adyen-checkout__link {\n color: #06f;\n text-decoration: none; }\n\n.adyen-checkout__link:hover {\n text-decoration: underline; }\n",".sf-input__wrapper {\n position: relative; }\n\n.sf-input__wrapper *,\n.sf-input__wrapper *::before,\n.sf-input__wrapper *::after {\n box-sizing: border-box; }\n\n.adyen-checkout__input {\n display: block;\n max-height: 100px; }\n",".adyen-checkout__loading-input__form {\n transition: opacity 0.25s ease-out; }\n\n.adyen-checkout__pm__holderName {\n margin-bottom: 0; }\n\n.adyen-checkout__fieldset__title + .adyen-checkout__ach-sf__form {\n margin-top: 0; }\n\n.adyen-checkout__ach-sf__form {\n margin-top: 16px; }\n\n.adyen-checkout__ach-input .adyen-checkout__fieldset--address {\n margin-top: 16px; }\n",".adyen-checkout__loading-input__form {\n transition: opacity 0.25s ease-out; }\n",".adyen-checkout__await {\n background: #fff;\n padding: 40px;\n border: 1px solid #d4d9db;\n border-radius: 12px;\n text-align: center; }\n\n.adyen-checkout__await--result {\n padding: 100px; }\n\n.adyen-checkout__qr-loader--app {\n border: 0;\n border-radius: 0;\n padding: 0; }\n\n.adyen-checkout__await__brand-logo {\n width: 74px;\n border-radius: 3px; }\n\n.adyen-checkout__await__subtitle,\n.adyen-checkout__await__indicator-text {\n color: #00112c;\n font-size: 1em;\n line-height: 19px;\n margin-top: 32px; }\n\n.adyen-checkout__await__indicator-holder .adyen-checkout__await__indicator-text {\n margin-top: 6px;\n margin-left: 10px; }\n\n.adyen-checkout__await__indicator-holder {\n display: flex;\n justify-content: center;\n margin-top: 32px;\n margin-bottom: 20px; }\n\n.adyen-checkout__await__subtitle--result {\n margin-bottom: 32px; }\n\n.adyen-checkout__await__icon {\n width: 88px;\n height: 88px; }\n\n.adyen-checkout__await__progress {\n height: 4px;\n background: #d4d9db;\n border-radius: 24px;\n margin: 32px auto 12px auto;\n width: 152px; }\n\n.adyen-checkout__await__percentage {\n display: block;\n height: 100%;\n border-radius: 24px;\n background: #06f; }\n\n.adyen-checkout__await__countdown {\n color: #687282;\n font-size: 0.81em; }\n\n.adyen-checkout__await > .adyen-checkout__spinner__wrapper {\n margin: 60px 0; }\n\n.adyen-checkout__await__app-link {\n margin-top: 16px;\n display: none; }\n\n.adyen-checkout__await__separator__label {\n position: relative;\n font-size: 13px;\n color: #687282;\n overflow: hidden;\n text-align: center;\n z-index: 1;\n display: block; }\n\n.adyen-checkout__await__separator__label:before,\n.adyen-checkout__await__separator__label:after {\n position: absolute;\n top: 51%;\n overflow: hidden;\n width: 50%;\n height: 1px;\n content: '\\a0';\n background-color: #e6e9eb; }\n\n.adyen-checkout__await__separator__label:before {\n margin-left: -52%;\n text-align: right; }\n\n.adyen-checkout__await__separator__label:after {\n margin-left: 2%; }\n\n@media only screen and (max-device-width: 1200px) {\n .adyen-checkout__await__app-link {\n display: block; } }\n",".adyen-checkout__blik__helper {\n font-size: 1em;\n font-weight: normal;\n color: #00112c;\n margin: 0 0 16px;\n padding: 0; }\n",".adyen-checkout__bankTransfer__introduction {\n font-size: 0.81em;\n color: #00112c;\n font-weight: 400;\n margin: 0 0 16px;\n padding: 0; }\n\n.adyen-checkout__bankTransfer__emailField {\n margin: 0 0 16px; }\n",".adyen-checkout__bacs--confirm {\n position: relative; }\n .adyen-checkout__bacs--confirm .adyen-checkout-input__inline-validation--valid {\n display: none; }\n\n.adyen-checkout__bacs .adyen-checkout__field--inactive {\n pointer-events: none; }\n\n.adyen-checkout__bacs .adyen-checkout__bacs--edit {\n position: absolute;\n top: -25px;\n right: 0px;\n cursor: pointer;\n width: 20%; }\n .adyen-checkout__bacs .adyen-checkout__bacs--edit-dropin {\n top: -50px; }\n .adyen-checkout__bacs .adyen-checkout__bacs--edit .adyen-checkout__bacs--edit-button {\n border: none;\n background: none;\n color: #06f;\n text-decoration: underline;\n text-align: end;\n cursor: pointer; }\n",".adyen-checkout__voucher-result__introduction {\n font-size: 1em;\n max-width: 420px; }\n",".adyen-checkout__klarna-widget {\n pointer-events: all; }\n",".adyen-checkout__field--vpa {\n margin-bottom: 0px; }\n"]} diff --git a/src/Resources/public/js/adyen.js b/src/Resources/public/js/adyen.js index bac8f5f3..0afc65c6 100644 --- a/src/Resources/public/js/adyen.js +++ b/src/Resources/public/js/adyen.js @@ -1 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).AdyenCheckout=t()}(this,(function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=function(e){return e&&e.Math==Math&&e},r=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof e&&e)||function(){return this}()||Function("return this")(),n=function(e){try{return!!e()}catch(e){return!0}},a=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),o=a,i=Function.prototype,l=i.apply,c=i.call,s="object"==typeof Reflect&&Reflect.apply||(o?c.bind(l):function(){return c.apply(l,arguments)}),u=a,d=Function.prototype,p=d.bind,f=d.call,m=u&&p.bind(f,f),h=u?function(e){return e&&m(e)}:function(e){return e&&function(){return f.apply(e,arguments)}},y=function(e){return"function"==typeof e},v={},b=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),g=a,k=Function.prototype.call,C=g?k.bind(k):function(){return k.apply(k,arguments)},_={},N={}.propertyIsEnumerable,w=Object.getOwnPropertyDescriptor,P=w&&!N.call({1:2},1);_.f=P?function(e){var t=w(this,e);return!!t&&t.enumerable}:N;var F,x,S=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},A=h,B=A({}.toString),D=A("".slice),T=function(e){return D(B(e),8,-1)},O=h,I=n,j=T,M=r.Object,E=O("".split),z=I((function(){return!M("z").propertyIsEnumerable(0)}))?function(e){return"String"==j(e)?E(e,""):M(e)}:M,R=r.TypeError,L=function(e){if(null==e)throw R("Can't call method on "+e);return e},V=z,U=L,K=function(e){return V(U(e))},q=y,H=function(e){return"object"==typeof e?null!==e:q(e)},W={},G=W,Y=r,J=y,Z=function(e){return J(e)?e:void 0},Q=function(e,t){return arguments.length<2?Z(G[e])||Z(Y[e]):G[e]&&G[e][t]||Y[e]&&Y[e][t]},$=h({}.isPrototypeOf),X=Q("navigator","userAgent")||"",ee=r,te=X,re=ee.process,ne=ee.Deno,ae=re&&re.versions||ne&&ne.version,oe=ae&&ae.v8;oe&&(x=(F=oe.split("."))[0]>0&&F[0]<4?1:+(F[0]+F[1])),!x&&te&&(!(F=te.match(/Edge\/(\d+)/))||F[1]>=74)&&(F=te.match(/Chrome\/(\d+)/))&&(x=+F[1]);var ie=x,le=ie,ce=n,se=!!Object.getOwnPropertySymbols&&!ce((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&le&&le<41})),ue=se&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,de=Q,pe=y,fe=$,me=ue,he=r.Object,ye=me?function(e){return"symbol"==typeof e}:function(e){var t=de("Symbol");return pe(t)&&fe(t.prototype,he(e))},ve=r.String,be=function(e){try{return ve(e)}catch(e){return"Object"}},ge=y,ke=be,Ce=r.TypeError,_e=function(e){if(ge(e))return e;throw Ce(ke(e)+" is not a function")},Ne=_e,we=function(e,t){var r=e[t];return null==r?void 0:Ne(r)},Pe=C,Fe=y,xe=H,Se=r.TypeError,Ae={exports:{}},Be=r,De=Object.defineProperty,Te=function(e,t){try{De(Be,e,{value:t,configurable:!0,writable:!0})}catch(r){Be[e]=t}return t},Oe="__core-js_shared__",Ie=r[Oe]||Te(Oe,{}),je=Ie;(Ae.exports=function(e,t){return je[e]||(je[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.22.0",mode:"pure",copyright:"\xa9 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Me=L,Ee=r.Object,ze=function(e){return Ee(Me(e))},Re=ze,Le=h({}.hasOwnProperty),Ve=Object.hasOwn||function(e,t){return Le(Re(e),t)},Ue=h,Ke=0,qe=Math.random(),He=Ue(1..toString),We=function(e){return"Symbol("+(void 0===e?"":e)+")_"+He(++Ke+qe,36)},Ge=r,Ye=Ae.exports,Je=Ve,Ze=We,Qe=se,$e=ue,Xe=Ye("wks"),et=Ge.Symbol,tt=et&&et.for,rt=$e?et:et&&et.withoutSetter||Ze,nt=function(e){if(!Je(Xe,e)||!Qe&&"string"!=typeof Xe[e]){var t="Symbol."+e;Qe&&Je(et,e)?Xe[e]=et[e]:Xe[e]=$e&&tt?tt(t):rt(t)}return Xe[e]},at=C,ot=H,it=ye,lt=we,ct=function(e,t){var r,n;if("string"===t&&Fe(r=e.toString)&&!xe(n=Pe(r,e)))return n;if(Fe(r=e.valueOf)&&!xe(n=Pe(r,e)))return n;if("string"!==t&&Fe(r=e.toString)&&!xe(n=Pe(r,e)))return n;throw Se("Can't convert object to primitive value")},st=nt,ut=r.TypeError,dt=st("toPrimitive"),pt=function(e,t){if(!ot(e)||it(e))return e;var r,n=lt(e,dt);if(n){if(void 0===t&&(t="default"),r=at(n,e,t),!ot(r)||it(r))return r;throw ut("Can't convert object to primitive value")}return void 0===t&&(t="number"),ct(e,t)},ft=ye,mt=function(e){var t=pt(e,"string");return ft(t)?t:t+""},ht=H,yt=r.document,vt=ht(yt)&&ht(yt.createElement),bt=function(e){return vt?yt.createElement(e):{}},gt=bt,kt=!b&&!n((function(){return 7!=Object.defineProperty(gt("div"),"a",{get:function(){return 7}}).a})),Ct=b,_t=C,Nt=_,wt=S,Pt=K,Ft=mt,xt=Ve,St=kt,At=Object.getOwnPropertyDescriptor;v.f=Ct?At:function(e,t){if(e=Pt(e),t=Ft(t),St)try{return At(e,t)}catch(e){}if(xt(e,t))return wt(!_t(Nt.f,e,t),e[t])};var Bt=n,Dt=y,Tt=/#|\.prototype\./,Ot=function(e,t){var r=jt[It(e)];return r==Et||r!=Mt&&(Dt(t)?Bt(t):!!t)},It=Ot.normalize=function(e){return String(e).replace(Tt,".").toLowerCase()},jt=Ot.data={},Mt=Ot.NATIVE="N",Et=Ot.POLYFILL="P",zt=Ot,Rt=_e,Lt=a,Vt=h(h.bind),Ut=function(e,t){return Rt(e),void 0===t?e:Lt?Vt(e,t):function(){return e.apply(t,arguments)}},Kt={},qt=b&&n((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Ht=r,Wt=H,Gt=Ht.String,Yt=Ht.TypeError,Jt=function(e){if(Wt(e))return e;throw Yt(Gt(e)+" is not an object")},Zt=b,Qt=kt,$t=qt,Xt=Jt,er=mt,tr=r.TypeError,rr=Object.defineProperty,nr=Object.getOwnPropertyDescriptor,ar="enumerable",or="configurable",ir="writable";Kt.f=Zt?$t?function(e,t,r){if(Xt(e),t=er(t),Xt(r),"function"==typeof e&&"prototype"===t&&"value"in r&&ir in r&&!r.writable){var n=nr(e,t);n&&n.writable&&(e[t]=r.value,r={configurable:or in r?r.configurable:n.configurable,enumerable:ar in r?r.enumerable:n.enumerable,writable:!1})}return rr(e,t,r)}:rr:function(e,t,r){if(Xt(e),t=er(t),Xt(r),Qt)try{return rr(e,t,r)}catch(e){}if("get"in r||"set"in r)throw tr("Accessors not supported");return"value"in r&&(e[t]=r.value),e};var lr=Kt,cr=S,sr=b?function(e,t,r){return lr.f(e,t,cr(1,r))}:function(e,t,r){return e[t]=r,e},ur=r,dr=s,pr=h,fr=y,mr=v.f,hr=zt,yr=W,vr=Ut,br=sr,gr=Ve,kr=function(e){var t=function(r,n,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(r);case 2:return new e(r,n)}return new e(r,n,a)}return dr(e,this,arguments)};return t.prototype=e.prototype,t},Cr=function(e,t){var r,n,a,o,i,l,c,s,u=e.target,d=e.global,p=e.stat,f=e.proto,m=d?ur:p?ur[u]:(ur[u]||{}).prototype,h=d?yr:yr[u]||br(yr,u,{})[u],y=h.prototype;for(a in t)r=!hr(d?a:u+(p?".":"#")+a,e.forced)&&m&&gr(m,a),i=h[a],r&&(l=e.noTargetGet?(s=mr(m,a))&&s.value:m[a]),o=r&&l?l:t[a],r&&typeof i==typeof o||(c=e.bind&&r?vr(o,ur):e.wrap&&r?kr(o):f&&fr(o)?pr(o):o,(e.sham||o&&o.sham||i&&i.sham)&&br(c,"sham",!0),br(h,a,c),f&&(gr(yr,n=u+"Prototype")||br(yr,n,{}),br(yr[n],a,o),e.real&&y&&!y[a]&&br(y,a,o)))},_r=Ae.exports,Nr=We,wr=_r("keys"),Pr=function(e){return wr[e]||(wr[e]=Nr(e))},Fr=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),xr=r,Sr=Ve,Ar=y,Br=ze,Dr=Fr,Tr=Pr("IE_PROTO"),Or=xr.Object,Ir=Or.prototype,jr=Dr?Or.getPrototypeOf:function(e){var t=Br(e);if(Sr(t,Tr))return t[Tr];var r=t.constructor;return Ar(r)&&t instanceof r?r.prototype:t instanceof Or?Ir:null},Mr=r,Er=y,zr=Mr.String,Rr=Mr.TypeError,Lr=h,Vr=Jt,Ur=function(e){if("object"==typeof e||Er(e))return e;throw Rr("Can't set "+zr(e)+" as a prototype")},Kr=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=Lr(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return Vr(r),Ur(n),t?e(r,n):r.__proto__=n,r}}():void 0),qr={},Hr=Math.ceil,Wr=Math.floor,Gr=function(e){var t=+e;return t!=t||0===t?0:(t>0?Wr:Hr)(t)},Yr=Gr,Jr=Math.max,Zr=Math.min,Qr=function(e,t){var r=Yr(e);return r<0?Jr(r+t,0):Zr(r,t)},$r=Gr,Xr=Math.min,en=function(e){return e>0?Xr($r(e),9007199254740991):0},tn=function(e){return en(e.length)},rn=K,nn=Qr,an=tn,on=function(e){return function(t,r,n){var a,o=rn(t),i=an(o),l=nn(n,i);if(e&&r!=r){for(;i>l;)if((a=o[l++])!=a)return!0}else for(;i>l;l++)if((e||l in o)&&o[l]===r)return e||l||0;return!e&&-1}},ln={includes:on(!0),indexOf:on(!1)},cn={},sn=Ve,un=K,dn=ln.indexOf,pn=cn,fn=h([].push),mn=function(e,t){var r,n=un(e),a=0,o=[];for(r in n)!sn(pn,r)&&sn(n,r)&&fn(o,r);for(;t.length>a;)sn(n,r=t[a++])&&(~dn(o,r)||fn(o,r));return o},hn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yn=mn,vn=hn.concat("length","prototype");qr.f=Object.getOwnPropertyNames||function(e){return yn(e,vn)};var bn={};bn.f=Object.getOwnPropertySymbols;var gn=Q,kn=qr,Cn=bn,_n=Jt,Nn=h([].concat),wn=gn("Reflect","ownKeys")||function(e){var t=kn.f(_n(e)),r=Cn.f;return r?Nn(t,r(e)):t},Pn=Ve,Fn=wn,xn=v,Sn=Kt,An={},Bn=mn,Dn=hn,Tn=Object.keys||function(e){return Bn(e,Dn)},On=b,In=qt,jn=Kt,Mn=Jt,En=K,zn=Tn;An.f=On&&!In?Object.defineProperties:function(e,t){Mn(e);for(var r,n=En(t),a=zn(t),o=a.length,i=0;o>i;)jn.f(e,r=a[i++],n[r]);return e};var Rn,Ln=Q("document","documentElement"),Vn=Jt,Un=An,Kn=hn,qn=cn,Hn=Ln,Wn=bt,Gn=Pr("IE_PROTO"),Yn=function(){},Jn=function(e){return" diff --git a/src/Resources/views/storefront/component/payment/payment-success-action.html.twig b/src/Resources/views/storefront/component/payment/payment-success-action.html.twig new file mode 100644 index 00000000..1cc5532d --- /dev/null +++ b/src/Resources/views/storefront/component/payment/payment-success-action.html.twig @@ -0,0 +1,18 @@ +{% set adyenFrontendData = page.extensions[constant('Adyen\\Shopware\\Subscriber\\PostPaymentSubscriber::ADYEN_DATA_EXTENSION_ID')] %} + +{% if adyenFrontendData and adyenFrontendData.locale and adyenFrontendData.clientKey and adyenFrontendData.environment and adyenFrontendData.action %} +
+
+ +
+ + +
+{% endif %} diff --git a/src/Resources/views/storefront/page/checkout/finish/finish-details.html.twig b/src/Resources/views/storefront/page/checkout/finish/finish-details.html.twig index cb6f6fbe..1a893e5c 100644 --- a/src/Resources/views/storefront/page/checkout/finish/finish-details.html.twig +++ b/src/Resources/views/storefront/page/checkout/finish/finish-details.html.twig @@ -1,10 +1,17 @@ {% sw_extends '@Storefront/storefront/page/checkout/finish/finish-details.html.twig' %} -{% set adyenFrontendData = page.extensions[constant('Adyen\\Shopware\\Subscriber\\AdyenGivingSubscriber::ADYEN_DATA_EXTENSION_ID')] %} +{% set adyenFrontendData = page.extensions[constant('Adyen\\Shopware\\Subscriber\\PostPaymentSubscriber::ADYEN_DATA_EXTENSION_ID')] %} {% block page_checkout_finish_data %} {{ parent() }} + {% if adyenFrontendData and (adyenFrontendData.givingEnabled or adyenFrontendData.action) %} + + + {% endif %} + + {% sw_include '@AdyenPaymentShopware6/storefront/component/payment/payment-success-action.html.twig' %} + {% sw_include '@AdyenPaymentShopware6/storefront/component/adyen-giving/adyen-giving-component.html.twig' %} {% endblock %} diff --git a/src/ScheduledTask/ProcessNotificationsHandler.php b/src/ScheduledTask/ProcessNotificationsHandler.php index 5a202b9b..3420500b 100644 --- a/src/ScheduledTask/ProcessNotificationsHandler.php +++ b/src/ScheduledTask/ProcessNotificationsHandler.php @@ -15,7 +15,7 @@ * * Adyen Payment Module * - * Copyright (c) 2020 Adyen B.V. + * Copyright (c) 2022 Adyen N.V. * This file is open source and available under the MIT license. * See the LICENSE file for more info. * @@ -24,28 +24,19 @@ namespace Adyen\Shopware\ScheduledTask; -use Adyen\AdyenException; use Adyen\Shopware\Entity\Notification\NotificationEntity; -use Adyen\Shopware\Entity\PaymentCapture\PaymentCaptureEntity; -use Adyen\Shopware\Entity\Refund\RefundEntity; use Adyen\Shopware\Exception\CaptureException; -use Adyen\Shopware\Provider\AdyenPluginProvider; +use Adyen\Shopware\ScheduledTask\Webhook\WebhookHandlerFactory; use Adyen\Shopware\Service\CaptureService; use Adyen\Shopware\Service\NotificationService; -use Adyen\Shopware\Service\RefundService; use Adyen\Shopware\Service\Repository\OrderRepository; use Adyen\Shopware\Service\Repository\OrderTransactionRepository; -use Adyen\Util\Currency; -use Adyen\Webhook\EventCodes; use Adyen\Webhook\Exception\InvalidDataException; use Adyen\Webhook\Notification; use Adyen\Webhook\PaymentStates; use Adyen\Webhook\Processor\ProcessorFactory; use Psr\Log\LoggerAwareTrait; -use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; -use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler; use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStates; -use Shopware\Core\Checkout\Order\OrderEntity; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; use Shopware\Core\Framework\MessageQueue\ScheduledTask\ScheduledTaskHandler; @@ -64,44 +55,47 @@ class ProcessNotificationsHandler extends ScheduledTaskHandler OrderTransactionStates::STATE_PARTIALLY_REFUNDED, ]; - private const MAX_ERROR_COUNT = 3; + public const MAX_ERROR_COUNT = 3; /** * @var NotificationService */ private $notificationService; + /** * @var OrderRepository */ private $orderRepository; - /** - * @var OrderTransactionStateHandler - */ - private $transactionStateHandler; + /** * @var EntityRepositoryInterface */ private $paymentMethodRepository; - /** - * @var AdyenPluginProvider - */ - private $adyenPluginProvider; + /** * @var array|null */ private $adyenPaymentMethodIds = null; - /** @var RefundService */ - private $refundService; - - /** @var OrderTransactionRepository */ + /** + * @var OrderTransactionRepository + */ private $orderTransactionRepository; - /** @var CaptureService */ + /** + * @var CaptureService + */ private $captureService; - /** @var array Map Shopware transaction states to payment states in the webhook module. */ - private $webhookModuleStateMapping = [ + /** + * @var WebhookHandlerFactory + */ + private static $webhookHandlerFactory; + + /** + * @var array Map Shopware transaction states to payment states in the webhook module. + */ + const WEBHOOK_MODULE_STATE_MAPPING = [ OrderTransactionStates::STATE_OPEN => PaymentStates::STATE_NEW, OrderTransactionStates::STATE_AUTHORIZED => PaymentStates::STATE_PENDING, OrderTransactionStates::STATE_PAID => PaymentStates::STATE_PAID, @@ -111,26 +105,31 @@ class ProcessNotificationsHandler extends ScheduledTaskHandler OrderTransactionStates::STATE_PARTIALLY_REFUNDED => PaymentStates::STATE_PARTIALLY_REFUNDED, ]; + /** + * @param EntityRepositoryInterface $scheduledTaskRepository + * @param NotificationService $notificationService + * @param OrderRepository $orderRepository + * @param EntityRepositoryInterface $paymentMethodRepository + * @param OrderTransactionRepository $orderTransactionRepository + * @param CaptureService $captureService + * @param WebhookHandlerFactory $webhookHandlerFactory + */ public function __construct( EntityRepositoryInterface $scheduledTaskRepository, NotificationService $notificationService, OrderRepository $orderRepository, - OrderTransactionStateHandler $transactionStateHandler, EntityRepositoryInterface $paymentMethodRepository, - AdyenPluginProvider $adyenPluginProvider, - RefundService $refundService, OrderTransactionRepository $orderTransactionRepository, - CaptureService $captureService + CaptureService $captureService, + WebhookHandlerFactory $webhookHandlerFactory ) { parent::__construct($scheduledTaskRepository); $this->notificationService = $notificationService; $this->orderRepository = $orderRepository; - $this->transactionStateHandler = $transactionStateHandler; $this->paymentMethodRepository = $paymentMethodRepository; - $this->refundService = $refundService; - $this->adyenPluginProvider = $adyenPluginProvider; $this->orderTransactionRepository = $orderTransactionRepository; $this->captureService = $captureService; + self::$webhookHandlerFactory = $webhookHandlerFactory; } public static function getHandledMessages(): iterable @@ -145,88 +144,43 @@ public function run(): void foreach ($notifications->getElements() as $notification) { /** @var NotificationEntity $notification */ - + $logContext = ['eventCode' => $notification->getEventCode()]; $this->markAsProcessing($notification->getId(), $notification->getMerchantReference()); - $order = $this->orderRepository->getOrderByOrderNumber( - $notification->getMerchantReference(), - $context, - ['transactions', 'currency'] - ); - - $logContext = ['eventCode' => $notification->getEventCode()]; - if (!$order) { - $errorMessage = "Skipped: Order with order_number {$notification->getMerchantReference()} not found."; - $this->logger->error($errorMessage, $logContext); - $this->logNotificationFailure($notification, $errorMessage); - $this->markAsDone($notification->getId(), $notification->getMerchantReference()); + $order = $this->getOrder($notification, $context, $logContext); + if (is_null($order)) { continue; } + $logContext['orderId'] = $order->getId(); $logContext['orderNumber'] = $order->getOrderNumber(); - $orderTransaction = $this->orderTransactionRepository->getFirstAdyenOrderTransactionByStates( - $order->getId(), - self::WEBHOOK_TRANSACTION_STATES - ); - - // Skip if orderTransaction not found (non-Adyen) + $orderTransaction = $this->getOrderTransaction($order, $notification, $logContext); if (is_null($orderTransaction)) { - $errorMessage = sprintf( - 'Skipped: Unable to identify Adyen orderTransaction linked to order %s', - $order->getOrderNumber() - ); - $this->logger->error($errorMessage, $logContext); - $this->logNotificationFailure($notification, $errorMessage); - $this->markAsDone($notification->getId(), $notification->getMerchantReference()); continue; } - $currentTransactionState = $this->webhookModuleStateMapping[ - $orderTransaction->getStateMachineState()->getTechnicalName() - ] ?? ''; - - if (empty($currentTransactionState)) { - $logContext['paymentState'] = $orderTransaction->getStateMachineState()->getTechnicalName(); - $errorMessage = 'Skipped: Current order transaction payment state is not supported.'; - $this->logger->error($errorMessage, $logContext); - $this->logNotificationFailure($notification, $errorMessage); - $this->markAsDone($notification->getId(), $notification->getMerchantReference()); + $currentTransactionState = $this->getCurrentTransactionState($orderTransaction, $notification); + if (is_null($currentTransactionState)) { continue; } - try { - $notificationItem = Notification::createItem([ - 'eventCode' => $notification->getEventCode(), - 'success' => $notification->isSuccess() - ]); - - $processor = ProcessorFactory::create( - $notificationItem, - $currentTransactionState, - $this->logger - ); - } catch (InvalidDataException $exception) { - $logContext['notification'] = $notification->getVars(); - $errorMessage = 'Skipped: Unable to process notification. Invalid notification data'; - $this->logger->error($errorMessage, $logContext); - $this->logNotificationFailure($notification, $errorMessage); - $this->markAsDone($notification->getId(), $notification->getMerchantReference()); + $processor = $this->createProcessor($notification, $currentTransactionState); + if (is_null($processor)) { continue; } $state = $processor->process(); try { - if ($state !== $currentTransactionState) { - $this->transitionToState($notification, $orderTransaction, $state, $context); - } - - if (!$notification->isSuccess()) { - $this->handleFailedNotification($notification, $order, $state); - } - - $this->handleEventCodes($notification, $orderTransaction, $context); + $webhookHandler = self::$webhookHandlerFactory::create($notification->getEventCode()); + $webhookHandler->handleWebhook( + $orderTransaction, + $notification, + $state, + $currentTransactionState, + $context + ); } catch (CaptureException $exception) { $this->logger->warning($exception->getMessage(), ['code' => $exception->getCode()]); $this->logNotificationFailure($notification, $exception->getMessage()); @@ -238,9 +192,17 @@ public function run(): void $notification->getMerchantReference(), $scheduledProcessingTime ); + } else { + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); } continue; + } catch (InvalidDataException $exception) { + /* + * This notification can't be recognised and handled by the plugin. + * It will be marked as done. + */ + $this->logger->info($exception->getMessage(), $logContext); } catch (\Exception $exception) { $logContext['errorMessage'] = $exception->getMessage(); $this->logger->error('Notification processing failed.', $logContext); @@ -248,6 +210,8 @@ public function run(): void if ($notification->getErrorCount() < self::MAX_ERROR_COUNT) { $this->rescheduleNotification($notification->getId(), $notification->getMerchantReference()); + } else { + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); } continue; @@ -260,138 +224,127 @@ public function run(): void } /** - * @param NotificationEntity $notification - * @param OrderTransactionEntity $orderTransaction - * @param string $state - * @param Context $context - * @throws AdyenException|CaptureException + * @param $notification + * @param $currentTransactionState + * @return \Adyen\Webhook\Processor\ProcessorInterface|null */ - private function transitionToState( - NotificationEntity $notification, - OrderTransactionEntity $orderTransaction, - string $state, - Context $context - ) { - $order = $orderTransaction->getOrder(); - - switch ($state) { - case PaymentStates::STATE_PAID: - // The webhook processor returns 'PAID' for both AUTHORISATION and CAPTURE event codes. - // For AUTHORISATION, set Order Transaction to `authorised` if manual capture is required. - // Send capture request for open invoice payments. - $paymentMethodHandler = $orderTransaction->getPaymentMethod()->getHandlerIdentifier(); - if (EventCodes::AUTHORISATION === $notification->getEventCode() && - $this->captureService->requiresManualCapture($paymentMethodHandler)) { - $this->logger->info( - 'Manual capture required. Setting payment to `authorised` state.', - ['notification' => $notification->getVars()] - ); - $this->transactionStateHandler->authorize($orderTransaction->getId(), $context); + private function createProcessor($notification, $currentTransactionState) + { + try { + $notificationItem = Notification::createItem([ + 'eventCode' => $notification->getEventCode(), + 'success' => $notification->isSuccess() + ]); + + return ProcessorFactory::create( + $notificationItem, + $currentTransactionState, + $this->logger + ); + } catch (InvalidDataException $exception) { + $logContext['notification'] = $notification->getVars(); + $errorMessage = 'Skipped: Unable to process notification. Invalid notification data'; + $this->logger->error($errorMessage, $logContext); + $this->logNotificationFailure($notification, $errorMessage); + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); - $this->logger->info( - 'Attempting capture for open invoice payment.', - ['notification' => $notification->getVars()] - ); - $this->captureService->doOpenInvoiceCapture( - $notification->getMerchantReference(), - $notification->getAmountValue(), - $context - ); - } else { - $this->transactionStateHandler->paid($orderTransaction->getId(), $context); - } - break; - case PaymentStates::STATE_FAILED: - $this->transactionStateHandler->fail($orderTransaction->getId(), $context); - break; - case PaymentStates::STATE_IN_PROGRESS: - $this->transactionStateHandler->process($orderTransaction->getId(), $context); - break; - case PaymentStates::STATE_REFUNDED: - // Determine whether refund was full or partial. - $refundedAmount = (int) $notification->getAmountValue(); - - $currencyUtil = new Currency(); - $totalPrice = $orderTransaction->getAmount()->getTotalPrice(); - $isoCode = $order->getCurrency()->getIsoCode(); - $transactionAmount = $currencyUtil->sanitize($totalPrice, $isoCode); - - if ($refundedAmount > $transactionAmount) { - throw new \Exception('The refunded amount is greater than the transaction amount.'); - } + return null; + } + } - $this->refundService->handleRefundNotification($order, $notification, RefundEntity::STATUS_SUCCESS); - $transitionState = $refundedAmount < $transactionAmount - ? OrderTransactionStates::STATE_PARTIALLY_REFUNDED - : OrderTransactionStates::STATE_REFUNDED; + /** + * @param $orderTransaction + * @param $notification + * @return mixed|string|null + */ + private function getCurrentTransactionState($orderTransaction, $notification) + { + $currentTransactionState = self::WEBHOOK_MODULE_STATE_MAPPING[ + $orderTransaction->getStateMachineState()->getTechnicalName() + ] ?? ''; - $this->refundService->doRefund($orderTransaction, $transitionState, $context); + if (empty($currentTransactionState)) { + $logContext['paymentState'] = $orderTransaction->getStateMachineState()->getTechnicalName(); + $errorMessage = 'Skipped: Current order transaction payment state is not supported.'; + $this->logger->error($errorMessage, $logContext); + $this->logNotificationFailure($notification, $errorMessage); + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); - break; - default: - break; + return null; + } else { + return $currentTransactionState; } } - private function handleEventCodes( - NotificationEntity $notification, - OrderTransactionEntity $orderTransaction, - Context $context - ) { - $order = $orderTransaction->getOrder(); - switch ($notification->getEventCode()) { - case EventCodes::REFUND_FAILED: - $this->logger->info(sprintf('Handling REFUND_FAILED on order: %s', $order->getOrderNumber())); - $this->refundService->handleRefundNotification($order, $notification, RefundEntity::STATUS_FAILED); - break; - case EventCodes::CAPTURE: - $this->logger->info( - 'Handling CAPTURE notification', - ['order' => $order->getVars(), 'notification' => $notification->getVars()] - ); - if ($notification->isSuccess()) { - $this->captureService->handleCaptureNotification( - $orderTransaction, - $notification, - PaymentCaptureEntity::STATUS_SUCCESS, - $context - ); - } else { - $this->captureService->handleCaptureNotification( - $orderTransaction, - $notification, - PaymentCaptureEntity::STATUS_FAILED, - $context - ); - } - break; - case EventCodes::CAPTURE_FAILED: - $this->captureService->handleCaptureNotification( - $orderTransaction, - $notification, - PaymentCaptureEntity::STATUS_FAILED, - $context - ); - break; + /** + * @param $order + * @param $notification + * @param $logContext + * @return \Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity|null + */ + private function getOrderTransaction($order, $notification, $logContext) + { + $orderTransaction = $this->orderTransactionRepository->getFirstAdyenOrderTransactionByStates( + $order->getId(), + self::WEBHOOK_TRANSACTION_STATES + ); + + // Skip if orderTransaction not found (non-Adyen) + if (is_null($orderTransaction)) { + $errorMessage = sprintf( + 'Skipped: Unable to identify Adyen orderTransaction linked to order %s', + $order->getOrderNumber() + ); + $this->logger->error($errorMessage, $logContext); + $this->logNotificationFailure($notification, $errorMessage); + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); + return null; + } else { + return $orderTransaction; + } + } + + /** + * @param $notification + * @param $context + * @param $logContext + * @return \Shopware\Core\Checkout\Order\OrderEntity|null + */ + private function getOrder($notification, $context, $logContext) + { + $order = $this->orderRepository->getOrderByOrderNumber( + $notification->getMerchantReference(), + $context, + ['transactions', 'currency'] + ); + + if (!$order) { + $errorMessage = "Skipped: Order with order_number {$notification->getMerchantReference()} not found."; + $this->logger->error($errorMessage, $logContext); + $this->logNotificationFailure($notification, $errorMessage); + $this->markAsDone($notification->getId(), $notification->getMerchantReference()); + return null; + } else { + return $order; } } + /** + * @param string $notificationId + * @param string $merchantReference + * @return void + */ private function markAsProcessing(string $notificationId, string $merchantReference) { $this->notificationService->changeNotificationState($notificationId, 'processing', true); $this->logger->debug("Payment notification for order {$merchantReference} marked as processing."); } - private function rescheduleNotification( - string $notificationId, - string $merchantReference, - ?\DateTime $dateTime = null - ) { - $this->notificationService->changeNotificationState($notificationId, 'processing', false); - $this->notificationService->setNotificationSchedule($notificationId, $dateTime ?? new \DateTime()); - $this->logger->debug("Payment notification for order {$merchantReference} rescheduled."); - } - + /** + * @param string $notificationId + * @param string $merchantReference + * @return void + */ private function markAsDone(string $notificationId, string $merchantReference) { $this->notificationService->changeNotificationState($notificationId, 'processing', false); @@ -400,33 +353,19 @@ private function markAsDone(string $notificationId, string $merchantReference) } /** - * Handle logic to be executed when a notification has failed in this function - * - * @param NotificationEntity $notification - * @param OrderEntity $order - * @param string $state - * @return OrderEntity - * @throws AdyenException + * @param string $notificationId + * @param string $merchantReference + * @param \DateTime|null $dateTime + * @return void */ - private function handleFailedNotification( - NotificationEntity $notification, - OrderEntity $order, - string $state + private function rescheduleNotification( + string $notificationId, + string $merchantReference, + ?\DateTime $dateTime = null ) { - switch ($state) { - case PaymentStates::STATE_PAID: - // If for a refund, notification processor returns PAID, it means that the refund was not successful. - // Hence, set the adyen_refund entity to failed - if ($notification->getEventCode() === EventCodes::REFUND) { - $this->refundService->handleRefundNotification($order, $notification, RefundEntity::STATUS_FAILED); - } - - break; - default: - break; - } - - return $order; + $this->notificationService->changeNotificationState($notificationId, 'processing', false); + $this->notificationService->setNotificationSchedule($notificationId, $dateTime ?? new \DateTime()); + $this->logger->debug("Payment notification for order {$merchantReference} rescheduled."); } /** diff --git a/src/ScheduledTask/ScheduleNotificationsHandler.php b/src/ScheduledTask/ScheduleNotificationsHandler.php index 315be7c4..65801425 100644 --- a/src/ScheduledTask/ScheduleNotificationsHandler.php +++ b/src/ScheduledTask/ScheduleNotificationsHandler.php @@ -24,7 +24,6 @@ namespace Adyen\Shopware\ScheduledTask; -use Adyen\Shopware\Entity\Notification\NotificationEntity; use Adyen\Shopware\Service\NotificationService; use Psr\Log\LoggerAwareTrait; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; @@ -58,28 +57,34 @@ public function run(): void if ($unscheduledNotifications->count() == 0) { $this->logger->debug("No unscheduled notifications found."); - return; } foreach ($unscheduledNotifications->getElements() as $notification) { - /** @var NotificationEntity $notification */ + $scheduledProcessingTime = $this->notificationService->calculateScheduledProcessingTime($notification); + $this->notificationService->setNotificationSchedule($notification->getId(), $scheduledProcessingTime); + } - $scheduledProcessingTime = $notification->getCreatedAt(); - switch ($notification->getEventCode()) { - case 'AUTHORISATION': - if (!$notification->isSuccess()) { - $scheduledProcessingTime = $scheduledProcessingTime->add(new \DateInterval('PT30M')); - } - break; - case 'OFFER_CLOSED': - $scheduledProcessingTime = $scheduledProcessingTime->add(new \DateInterval('PT30M')); - break; - default: - break; - } + if ($unscheduledNotifications->count() > 0) { + $this->logger->info('Scheduled ' . $unscheduledNotifications->count() . ' notifications.'); + } + // Reschedule the unprocessed notifications older than 24 hours + $skippedNotifications = $this->notificationService->getSkippedUnprocessedNotifications(); + + foreach ($skippedNotifications->getElements() as $notification) { + $scheduledProcessingTime = $this->notificationService->calculateScheduledProcessingTime( + $notification, + true + ); + // If notification was stuck in state Processing=true, reset the state and reschedule. + if ($notification->getProcessing()) { + $this->notificationService->changeNotificationState($notification->getId(), 'processing', false); + } $this->notificationService->setNotificationSchedule($notification->getId(), $scheduledProcessingTime); } - $this->logger->info('Scheduled ' . $unscheduledNotifications->count() . ' notifications.'); + + if ($skippedNotifications->count() > 0) { + $this->logger->info('Re-scheduled ' . $skippedNotifications->count() . ' skipped notifications.'); + } } } diff --git a/src/ScheduledTask/Webhook/AuthorisationWebhookHandler.php b/src/ScheduledTask/Webhook/AuthorisationWebhookHandler.php new file mode 100644 index 00000000..abe0ae36 --- /dev/null +++ b/src/ScheduledTask/Webhook/AuthorisationWebhookHandler.php @@ -0,0 +1,133 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\Service\CaptureService; +use Psr\Log\LoggerInterface; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler; +use Shopware\Core\Framework\Context; + +class AuthorisationWebhookHandler implements WebhookHandlerInterface +{ + /** + * @var LoggerInterface + */ + private $logger; + + /** + * @var CaptureService + */ + private $captureService; + + /** + * @var OrderTransactionStateHandler + */ + private $orderTransactionStateHandler; + + /** + * @param CaptureService $captureService + * @param OrderTransactionStateHandler $orderTransactionStateHandler + * @param LoggerInterface $logger + */ + public function __construct( + CaptureService $captureService, + OrderTransactionStateHandler $orderTransactionStateHandler, + LoggerInterface $logger + ) { + $this->captureService = $captureService; + $this->orderTransactionStateHandler = $orderTransactionStateHandler; + $this->logger = $logger; + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + * @throws \Adyen\Shopware\Exception\CaptureException + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void { + if ($notificationEntity->isSuccess() && $state !== $currentTransactionState) { + $this->handleSuccessfulNotification($orderTransactionEntity, $notificationEntity, $context); + } else { + $this->handleFailedNotification($orderTransactionEntity, $context); + } + } + + /** + * @param OrderTransactionEntity $orderTransaction + * @param NotificationEntity $notification + * @param Context $context + * @return void + * @throws \Adyen\Shopware\Exception\CaptureException + */ + private function handleSuccessfulNotification( + OrderTransactionEntity $orderTransaction, + NotificationEntity $notification, + Context $context + ) { + $paymentMethodHandler = $orderTransaction->getPaymentMethod()->getHandlerIdentifier(); + + if ($this->captureService->requiresManualCapture($paymentMethodHandler)) { + $this->logger->info( + 'Manual capture required. Setting payment to `authorised` state.', + ['notification' => $notification->getVars()] + ); + $this->orderTransactionStateHandler->authorize($orderTransaction->getId(), $context); + + $this->logger->info( + 'Attempting capture for open invoice payment.', + ['notification' => $notification->getVars()] + ); + $this->captureService->doOpenInvoiceCapture( + $notification->getMerchantReference(), + $notification->getAmountValue(), + $context + ); + } else { + $this->orderTransactionStateHandler->paid($orderTransaction->getId(), $context); + } + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param Context $context + * @return void + */ + private function handleFailedNotification(OrderTransactionEntity $orderTransactionEntity, Context $context) + { + $this->orderTransactionStateHandler->fail($orderTransactionEntity->getId(), $context); + } +} diff --git a/src/ScheduledTask/Webhook/CancelOrRefundWebhookHandler.php b/src/ScheduledTask/Webhook/CancelOrRefundWebhookHandler.php new file mode 100644 index 00000000..ca14e6c5 --- /dev/null +++ b/src/ScheduledTask/Webhook/CancelOrRefundWebhookHandler.php @@ -0,0 +1,135 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\Entity\Refund\RefundEntity; +use Adyen\Shopware\Service\RefundService; +use Adyen\Util\Currency; +use Adyen\Webhook\PaymentStates; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStates; +use Shopware\Core\Framework\Context; + +class CancelOrRefundWebhookHandler implements WebhookHandlerInterface +{ + /** + * @var RefundService + */ + private $refundService; + + /** + * @param RefundService $refundService + * @return void + */ + public function __construct(RefundService $refundService) + { + $this->refundService = $refundService; + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + * @throws \Adyen\AdyenException + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void { + if ($notificationEntity->isSuccess() && $state !== $currentTransactionState) { + // Process refund notification + if ($state === PaymentStates::STATE_REFUNDED) { + $this->handleSuccessfulRefund($orderTransactionEntity, $notificationEntity, $context); + } + + // TODO-WEBHOOK:: Implement cancel success/fail flow for notification + } else { + // WH processor returns STATE_PAID for unsuccessful REFUND notifications. + if ($state === PaymentStates::STATE_PAID) { + $this->handleFailedRefundNotification($orderTransactionEntity, $notificationEntity); + } + } + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param Context $context + * @return void + * @throws \Adyen\AdyenException + */ + private function handleSuccessfulRefund( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + Context $context + ) { + // Determine whether refund was full or partial. + $refundedAmount = (int) $notificationEntity->getAmountValue(); + + $currencyUtil = new Currency(); + $totalPrice = $orderTransactionEntity->getAmount()->getTotalPrice(); + $isoCode = $orderTransactionEntity->getOrder()->getCurrency()->getIsoCode(); + $transactionAmount = $currencyUtil->sanitize($totalPrice, $isoCode); + + if ($refundedAmount > $transactionAmount) { + throw new \Exception('The refunded amount is greater than the transaction amount.'); + } + + $this->refundService->handleRefundNotification( + $orderTransactionEntity->getOrder(), + $notificationEntity, + RefundEntity::STATUS_SUCCESS + ); + $transitionState = $refundedAmount < $transactionAmount + ? OrderTransactionStates::STATE_PARTIALLY_REFUNDED + : OrderTransactionStates::STATE_REFUNDED; + + $this->refundService->doRefund($orderTransactionEntity, $transitionState, $context); + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @return void + * @throws \Adyen\AdyenException + */ + private function handleFailedRefundNotification( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity + ) { + $this->refundService->handleRefundNotification( + $orderTransactionEntity->getOrder(), + $notificationEntity, + RefundEntity::STATUS_FAILED + ); + } +} diff --git a/src/ScheduledTask/Webhook/CaptureWebhookHandler.php b/src/ScheduledTask/Webhook/CaptureWebhookHandler.php new file mode 100644 index 00000000..6a9fc7b8 --- /dev/null +++ b/src/ScheduledTask/Webhook/CaptureWebhookHandler.php @@ -0,0 +1,135 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\Entity\PaymentCapture\PaymentCaptureEntity; +use Adyen\Shopware\Service\CaptureService; +use Psr\Log\LoggerInterface; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler; +use Shopware\Core\Framework\Context; + +class CaptureWebhookHandler implements WebhookHandlerInterface +{ + /** + * @var LoggerInterface + */ + private $logger; + + /** + * @var CaptureService + */ + private $captureService; + + /** + * @var OrderTransactionStateHandler + */ + protected $orderTransactionStateHandler; + + /** + * @param CaptureService $captureService + * @param OrderTransactionStateHandler $orderTransactionStateHandler + * @param LoggerInterface $logger + */ + public function __construct( + CaptureService $captureService, + OrderTransactionStateHandler $orderTransactionStateHandler, + LoggerInterface $logger + ) { + $this->captureService = $captureService; + $this->orderTransactionStateHandler = $orderTransactionStateHandler; + $this->logger = $logger; + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void { + if ($notificationEntity->isSuccess() && $state !== $currentTransactionState) { + $this->handleSuccessfulNotification($orderTransactionEntity, $notificationEntity, $context); + } else { + $this->handleFailedNotification($orderTransactionEntity, $notificationEntity, $context); + } + } + + /** + * @param OrderTransactionEntity $orderTransaction + * @param NotificationEntity $notification + * @param Context $context + * @return void + */ + private function handleSuccessfulNotification( + OrderTransactionEntity $orderTransaction, + NotificationEntity $notification, + Context $context + ) { + $this->orderTransactionStateHandler->paid($orderTransaction->getId(), $context); + + $this->logger->info( + 'Handling CAPTURE notification', + ['order' => $orderTransaction->getOrder()->getVars(), 'notification' => $notification->getVars()] + ); + + $this->captureService->handleCaptureNotification( + $orderTransaction, + $notification, + PaymentCaptureEntity::STATUS_SUCCESS, + $context + ); + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param Context $context + * @return void + */ + private function handleFailedNotification( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + Context $context + ) { + $this->orderTransactionStateHandler->fail($orderTransactionEntity->getId(), $context); + + $this->captureService->handleCaptureNotification( + $orderTransactionEntity, + $notificationEntity, + PaymentCaptureEntity::STATUS_FAILED, + $context + ); + } +} diff --git a/src/ScheduledTask/Webhook/RefundFailedWebhookHandler.php b/src/ScheduledTask/Webhook/RefundFailedWebhookHandler.php new file mode 100644 index 00000000..cdeac9f6 --- /dev/null +++ b/src/ScheduledTask/Webhook/RefundFailedWebhookHandler.php @@ -0,0 +1,71 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\Entity\Refund\RefundEntity; +use Adyen\Shopware\Service\RefundService; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Framework\Context; + +class RefundFailedWebhookHandler implements WebhookHandlerInterface +{ + /** + * @var RefundService + */ + private $refundService; + + /** + * @param RefundService $refundService + * @return void + */ + public function __construct(RefundService $refundService) + { + $this->refundService = $refundService; + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + * @throws \Adyen\AdyenException + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void { + $this->refundService->handleRefundNotification( + $orderTransactionEntity->getOrder(), + $notificationEntity, + RefundEntity::STATUS_FAILED + ); + } +} diff --git a/src/ScheduledTask/Webhook/RefundWebhookHandler.php b/src/ScheduledTask/Webhook/RefundWebhookHandler.php new file mode 100644 index 00000000..85ce533d --- /dev/null +++ b/src/ScheduledTask/Webhook/RefundWebhookHandler.php @@ -0,0 +1,127 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\Entity\Refund\RefundEntity; +use Adyen\Shopware\Service\RefundService; +use Adyen\Util\Currency; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStates; +use Shopware\Core\Framework\Context; + +class RefundWebhookHandler implements WebhookHandlerInterface +{ + /** + * @var RefundService + */ + private $refundService; + + /** + * @param RefundService $refundService + * @return void + */ + public function __construct(RefundService $refundService) + { + $this->refundService = $refundService; + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + * @throws \Adyen\AdyenException + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void { + if ($notificationEntity->isSuccess() && $state !== $currentTransactionState) { + $this->handleSuccessfulNotification($orderTransactionEntity, $notificationEntity, $context); + } else { + $this->handleFailedNotification($orderTransactionEntity, $notificationEntity); + } + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param Context $context + * @return void + * @throws \Adyen\AdyenException + */ + private function handleSuccessfulNotification( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + Context $context + ) { + // Determine whether refund was full or partial. + $refundedAmount = (int) $notificationEntity->getAmountValue(); + + $currencyUtil = new Currency(); + $totalPrice = $orderTransactionEntity->getAmount()->getTotalPrice(); + $isoCode = $orderTransactionEntity->getOrder()->getCurrency()->getIsoCode(); + $transactionAmount = $currencyUtil->sanitize($totalPrice, $isoCode); + + if ($refundedAmount > $transactionAmount) { + throw new \Exception('The refunded amount is greater than the transaction amount.'); + } + + $this->refundService->handleRefundNotification( + $orderTransactionEntity->getOrder(), + $notificationEntity, + RefundEntity::STATUS_SUCCESS + ); + + $transitionState = $refundedAmount < $transactionAmount + ? OrderTransactionStates::STATE_PARTIALLY_REFUNDED + : OrderTransactionStates::STATE_REFUNDED; + + $this->refundService->doRefund($orderTransactionEntity, $transitionState, $context); + } + + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @return void + * @throws \Adyen\AdyenException + */ + private function handleFailedNotification( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity + ) { + $this->refundService->handleRefundNotification( + $orderTransactionEntity->getOrder(), + $notificationEntity, + RefundEntity::STATUS_FAILED + ); + } +} diff --git a/src/ScheduledTask/Webhook/WebhookHandlerFactory.php b/src/ScheduledTask/Webhook/WebhookHandlerFactory.php new file mode 100644 index 00000000..db1f1098 --- /dev/null +++ b/src/ScheduledTask/Webhook/WebhookHandlerFactory.php @@ -0,0 +1,117 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Service\CaptureService; +use Adyen\Shopware\Service\RefundService; +use Adyen\Webhook\EventCodes; +use Adyen\Webhook\Exception\InvalidDataException; +use Psr\Log\LoggerInterface; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler; + +class WebhookHandlerFactory +{ + /** + * @var LoggerInterface + */ + private static $logger; + + /** + * @var CaptureService + */ + private static $captureService; + + /** + * @var RefundService + */ + private static $refundService; + + /** + * @var OrderTransactionStateHandler + */ + private static $orderTransactionStateHandler; + + /** + * @param CaptureService $captureService + * @param RefundService $refundService + * @param OrderTransactionStateHandler $orderTransactionStateHandler + * @param LoggerInterface $logger + */ + public function __construct( + CaptureService $captureService, + RefundService $refundService, + OrderTransactionStateHandler $orderTransactionStateHandler, + LoggerInterface $logger + ) { + self::$captureService = $captureService; + self::$orderTransactionStateHandler = $orderTransactionStateHandler; + self::$refundService = $refundService; + self::$logger = $logger; + } + + /** + * @param string $eventCode + * @throws InvalidDataException + */ + public static function create(string $eventCode) + { + switch ($eventCode) { + case EventCodes::AUTHORISATION: + $handler = new AuthorisationWebhookHandler( + self::$captureService, + self::$orderTransactionStateHandler, + self::$logger + ); + break; + case EventCodes::CAPTURE: + $handler = new CaptureWebhookHandler( + self::$captureService, + self::$orderTransactionStateHandler, + self::$logger + ); + break; + case EventCodes::CANCEL_OR_REFUND: + $handler = new CancelOrRefundWebhookHandler( + self::$refundService + ); + break; + case EventCodes::REFUND: + $handler = new RefundWebhookHandler( + self::$refundService + ); + break; + case EventCodes::REFUND_FAILED: + $handler = new RefundFailedWebhookHandler( + self::$refundService + ); + break; + default: + $errorMessage = sprintf('Notification %s is not supported by the plugin.', $eventCode); + throw new InvalidDataException($errorMessage); + } + + return $handler; + } +} diff --git a/src/ScheduledTask/Webhook/WebhookHandlerInterface.php b/src/ScheduledTask/Webhook/WebhookHandlerInterface.php new file mode 100644 index 00000000..1644141f --- /dev/null +++ b/src/ScheduledTask/Webhook/WebhookHandlerInterface.php @@ -0,0 +1,48 @@ + + */ + +namespace Adyen\Shopware\ScheduledTask\Webhook; + +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionEntity; +use Shopware\Core\Framework\Context; + +interface WebhookHandlerInterface +{ + /** + * @param OrderTransactionEntity $orderTransactionEntity + * @param NotificationEntity $notificationEntity + * @param string $state + * @param string $currentTransactionState + * @param Context $context + * @return void + */ + public function handleWebhook( + OrderTransactionEntity $orderTransactionEntity, + NotificationEntity $notificationEntity, + string $state, + string $currentTransactionState, + Context $context + ): void; +} diff --git a/src/Service/NotificationReceiverService.php b/src/Service/NotificationReceiverService.php index 1fc75b6f..5b152915 100644 --- a/src/Service/NotificationReceiverService.php +++ b/src/Service/NotificationReceiverService.php @@ -173,8 +173,19 @@ private function processNotificationItem($notificationItem, $salesChannelId) // check if notification already exists if (!$this->notificationService->isDuplicateNotification($notificationItem)) { - $this->notificationService->insertNotification($notificationItem); - return true; + try { + $this->notificationService->insertNotification($notificationItem); + return true; + } catch (\Exception $exception) { + $this->logger->error( + 'Error occurred while saving notification to database', + [ + 'pspReference' => $notificationItem['pspReference'], + 'merchantReference' => $notificationItem['merchantReference'] + ] + ); + return false; + } } else { // duplicated so do nothing but return accepted to Adyen $this->logger->info('Duplicated notification received, skipped.'); diff --git a/src/Service/NotificationService.php b/src/Service/NotificationService.php index ed83b2d7..e37edbc8 100644 --- a/src/Service/NotificationService.php +++ b/src/Service/NotificationService.php @@ -24,12 +24,15 @@ namespace Adyen\Shopware\Service; +use Adyen\Shopware\Entity\Notification\NotificationEntity; +use Adyen\Shopware\ScheduledTask\ProcessNotificationsHandler; use DateTimeInterface; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; +use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\MultiFilter; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\NotFilter; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\RangeFilter; use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting; @@ -131,6 +134,14 @@ public function setNotificationSchedule(string $notificationId, DateTimeInterfac ); } + public function getNotificationById($notificationId) + { + return $this->notificationRepository->search( + (new Criteria())->addFilter(new EqualsFilter('id', $notificationId)), + Context::createDefaultContext() + )->first(); + } + public function getAllNotificationsByOrderNumber(string $orderNumber): EntityCollection { return $this->notificationRepository->search( @@ -179,6 +190,47 @@ public function getScheduledUnprocessedNotifications(): EntityCollection )->getEntities(); } + public function getSkippedUnprocessedNotifications(): EntityCollection + { + $oneDayAgo = (new \DateTime())->sub(new \DateInterval('P1D')); + + return $this->notificationRepository->search( + (new Criteria())->addFilter( + new EqualsFilter('done', 0), + new NotFilter( + NotFilter::CONNECTION_AND, + [ new EqualsFilter('scheduledProcessingTime', null) ] + ), + new MultiFilter( + MultiFilter::CONNECTION_AND, + [ + new RangeFilter( + 'scheduledProcessingTime', + [ + RangeFilter::LTE => $oneDayAgo->format('Y-m-d H:i:s') + ] + ), + new MultiFilter( + MultiFilter::CONNECTION_OR, + [ + new RangeFilter( + 'errorCount', + [ + RangeFilter::LT => ProcessNotificationsHandler::MAX_ERROR_COUNT + ] + ), + new EqualsFilter('errorCount', null) + ] + ) + ] + ) + ) + ->addSorting(new FieldSorting('scheduledProcessingTime', FieldSorting::ASCENDING)) + ->setLimit(100), + Context::createDefaultContext() + )->getEntities(); + } + public function changeNotificationState(string $notificationId, string $property, bool $state): void { $this->notificationRepository->update( @@ -205,4 +257,53 @@ public function saveError(string $notificationId, string $errorMessage, int $err Context::createDefaultContext() ); } + + /** + * Calculates the scheduled processing time according to notification type. + * + * @param NotificationEntity $notification + * @param bool $reschedule + * @return \DateTimeInterface|null + */ + public function calculateScheduledProcessingTime(NotificationEntity $notification, bool $reschedule = false) + { + if ($reschedule) { + $scheduledProcessingTime = new \DateTime(); + } else { + $scheduledProcessingTime = $notification->getCreatedAt(); + } + + switch ($notification->getEventCode()) { + case 'AUTHORISATION': + if (!$notification->isSuccess()) { + $scheduledProcessingTime = $scheduledProcessingTime->add(new \DateInterval('PT30M')); + } + break; + case 'OFFER_CLOSED': + $scheduledProcessingTime = $scheduledProcessingTime->add(new \DateInterval('PT30M')); + break; + default: + break; + } + + return $scheduledProcessingTime; + } + + /** + * @param NotificationEntity $notification + * @return bool + */ + public function canBeRescheduled(NotificationEntity $notification): bool + { + if (!is_null($notification->getScheduledProcessingTime())) { + $timeDifferenceInDays = $notification->getScheduledProcessingTime() + ->diff(new \DateTime())->format('%a'); + + if (!$notification->isDone() && $timeDifferenceInDays >= 1) { + return true; + } + } + + return false; + } } diff --git a/src/Service/Repository/SalesChannelRepository.php b/src/Service/Repository/SalesChannelRepository.php index de2704fb..f3504616 100644 --- a/src/Service/Repository/SalesChannelRepository.php +++ b/src/Service/Repository/SalesChannelRepository.php @@ -2,9 +2,11 @@ namespace Adyen\Shopware\Service\Repository; +use Shopware\Core\Checkout\Payment\Cart\AsyncPaymentTransactionStruct; use Shopware\Core\Content\Newsletter\Exception\SalesChannelDomainNotFoundException; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface; +use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; use Shopware\Core\System\SalesChannel\SalesChannelContext; @@ -39,16 +41,12 @@ public function __construct( * @param SalesChannelContext $context * @return string */ - public function getSalesChannelUrl(SalesChannelContext $context): string + public function getCurrentDomainUrl(SalesChannelContext $context): string { $criteria = new Criteria(); - if (!empty($context->getSalesChannel()->getHreflangDefaultDomainId())) { - $criteria->addFilter(new EqualsFilter('id', $context->getSalesChannel()->getHreflangDefaultDomainId())); - } else { - $criteria->addFilter(new EqualsFilter('salesChannelId', $context->getSalesChannel()->getId())); - $criteria->setLimit(1); - } + $domainId = $context->getSalesChannel()->getHreflangDefaultDomainId() ?: $context->getDomainId(); + $criteria->addFilter(new EqualsFilter('id', $domainId)); $domainEntity = $this->domainRepository ->search($criteria, $context->getContext()) @@ -64,7 +62,7 @@ public function getSalesChannelUrl(SalesChannelContext $context): string /** * @param SalesChannelContext $context * @return SalesChannelEntity - * @throws \Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException + * @throws InconsistentCriteriaIdsException */ public function getSalesChannelAssocLocale(SalesChannelContext $context): SalesChannelEntity { @@ -72,7 +70,7 @@ public function getSalesChannelAssocLocale(SalesChannelContext $context): SalesC return $this->salesChannelRepository->search( $salesChannelCriteria->addAssociation('language.locale'), - Context::createDefaultContext() + $context->getContext() )->first(); } } diff --git a/src/Subscriber/AdyenGivingSubscriber.php b/src/Subscriber/PostPaymentSubscriber.php similarity index 53% rename from src/Subscriber/AdyenGivingSubscriber.php rename to src/Subscriber/PostPaymentSubscriber.php index f3c5b251..f583f03c 100644 --- a/src/Subscriber/AdyenGivingSubscriber.php +++ b/src/Subscriber/PostPaymentSubscriber.php @@ -34,9 +34,10 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Routing\RouterInterface; -class AdyenGivingSubscriber implements EventSubscriberInterface +class PostPaymentSubscriber implements EventSubscriberInterface { const ADYEN_DATA_EXTENSION_ID = 'adyenFrontendData'; + const ACTION_TYPE_VOUCHER = 'voucher'; /** * @var ConfigurationService @@ -102,61 +103,107 @@ public function onCheckoutFinishPageLoaded(CheckoutFinishPageLoadedEvent $event) $page = $event->getPage(); $salesChannelContext = $event->getSalesChannelContext(); $salesChannelId = $salesChannelContext->getSalesChannel()->getId(); - $context = $salesChannelContext->getContext(); - - $backgroundImageUrl = $this->configurationService->getAdyenGivingBackgroundUrl($salesChannelId, $context); - $charityLogoUrl = $this->configurationService->getAdyenGivingCharityLogo($salesChannelId, $context); - $currency = $salesChannelContext->getCurrency()->getIsoCode(); - $amounts = $this->configurationService->getAdyenGivingDonationAmounts($salesChannelId); $order = $page->getOrder(); + + $frontendData = [ + 'clientKey' => $this->configurationService->getClientKey($salesChannelId), + 'locale' => $this->salesChannelRepository->getSalesChannelAssocLocale($salesChannelContext) + ->getLanguage()->getLocale()->getCode(), + 'environment' => $this->configurationService->getEnvironment($salesChannelId), + 'orderId' => $order->getId(), + ]; + + if ($this->configurationService->isAdyenGivingEnabled($salesChannelId)) { + $frontendData = $this->buildAdyenGivingData($frontendData, $order, $salesChannelContext); + } + + $frontendData = $this->buildVoucherActionData($frontendData, $order); + + $page->addExtension( + self::ADYEN_DATA_EXTENSION_ID, + new ArrayEntity($frontendData) + ); + } + + private function buildAdyenGivingData($frontendData, $order, $salesChannelContext) + { $orderTransaction = $order->getTransactions() ->filterByState(OrderTransactionStates::STATE_AUTHORIZED)->first(); if (is_null($orderTransaction)) { - return; + return $frontendData; } $customFields = $orderTransaction->getCustomFields(); - if (isset($customFields['donationToken']) && - $this->configurationService->isAdyenGivingEnabled($salesChannelId)) { - $donationAmounts = []; - try { - foreach (explode(',', $amounts) as $donationAmount) { - $donationAmounts[] = $this->currency->sanitize($donationAmount, $currency); - } - $donationAmounts = implode(',', $donationAmounts); - } catch (\Exception $e) { - $this->logger->error("Field 'donationAmounts' is not valid."); - return; + if (!isset($customFields['donationToken'])) { + return $frontendData; + } + + $salesChannelId = $salesChannelContext->getSalesChannel()->getId(); + + $backgroundImageUrl = $this->configurationService->getAdyenGivingBackgroundUrl( + $salesChannelId, + $salesChannelContext->getContext() + ); + $charityLogoUrl = $this->configurationService->getAdyenGivingCharityLogo( + $salesChannelId, + $salesChannelContext->getContext() + ); + $currency = $salesChannelContext->getCurrency()->getIsoCode(); + $amounts = $this->configurationService->getAdyenGivingDonationAmounts($salesChannelId); + + $donationAmounts = []; + try { + foreach (explode(',', $amounts) as $donationAmount) { + $donationAmounts[] = $this->currency->sanitize($donationAmount, $currency); } + $donationAmounts = implode(',', $donationAmounts); + } catch (\Exception $e) { + $this->logger->error("Field 'donationAmounts' is not valid."); + return $frontendData; + } + + $adyenGivingData = [ + 'givingEnabled' => true, + 'currency' => $currency, + 'values' => $donationAmounts, + 'backgroundUrl' => $backgroundImageUrl, + 'logoUrl' => $charityLogoUrl, + 'description' => $this->configurationService->getAdyenGivingCharityDescription($salesChannelId), + 'name' => $this->configurationService->getAdyenGivingCharityName($salesChannelId), + 'charityUrl' => $this->configurationService->getAdyenGivingCharityWebsite($salesChannelId), + 'donationEndpointUrl' => $this->router->generate( + 'store-api.action.adyen.donate' + ), + 'continueActionUrl' => $this->router->generate( + 'frontend.home.page' + ) + ]; - $page->addExtension( - self::ADYEN_DATA_EXTENSION_ID, - new ArrayEntity( - [ - 'clientKey' => $this->configurationService->getClientKey($salesChannelId), - 'locale' => $this->salesChannelRepository->getSalesChannelAssocLocale($salesChannelContext) - ->getLanguage()->getLocale()->getCode(), - 'environment' => $this->configurationService->getEnvironment($salesChannelId), - 'currency' => $currency, - 'values' => $donationAmounts, - 'backgroundUrl' => $backgroundImageUrl, - 'logoUrl' => $charityLogoUrl, - 'description' => $this->configurationService->getAdyenGivingCharityDescription($salesChannelId), - 'name' => $this->configurationService->getAdyenGivingCharityName($salesChannelId), - 'charityUrl' => $this->configurationService->getAdyenGivingCharityWebsite($salesChannelId), - 'orderId' => $order->getId(), - 'donationEndpointUrl' => $this->router->generate( - 'store-api.action.adyen.donate' - ), - 'continueActionUrl' => $this->router->generate( - 'frontend.home.page' - ) - ] - ) - ); + return array_merge($frontendData, $adyenGivingData); + } + + private function buildVoucherActionData($frontendData, $order) + { + $orderTransaction = $order->getTransactions() + ->filterByState(OrderTransactionStates::STATE_IN_PROGRESS)->first(); + + if (is_null($orderTransaction)) { + return $frontendData; + } + + $customFields = $orderTransaction->getCustomFields(); + + if (isset($customFields['action']) && $customFields['action']['type'] == self::ACTION_TYPE_VOUCHER) { + $voucherData = [ + 'action' => json_encode($customFields['action']) + ]; + + return array_merge($frontendData, $voucherData); } + + return $frontendData; } }