Merge branch 'trunk' into PCP-591-save-and-display-vaulted-payment-methods-in-woo-commerce-native-endpoint

This commit is contained in:
emilicastells 2023-01-23 12:13:02 +01:00
commit b1adb7f0d0
No known key found for this signature in database
GPG key ID: 1520C07081754570
18 changed files with 112 additions and 734 deletions

View file

@ -1,5 +1,15 @@
*** Changelog *** *** Changelog ***
= 2.0.2 - TBD =
* Fix - Do not call PayPal get order by ID if it does not exist #1029
* Fix - Type check error conflict with German Market #1056
* Fix - Backend Storage for the PayPalRequestIdRepository does not scale #983
* Fix - Ensure WC()->payment_gateways is not null #1128
* Enhancement - Remove plugin data after uninstalling #1075
* Enhancement - Add FraudNet to all payments #1040
* Enhancement - Update "Standard Payments" tab settings #1065
* Enhancement - Update PHP 7.2 requirement in all relevant files #1084
= 2.0.1 - 2022-12-13 = = 2.0.1 - 2022-12-13 =
* Fix - Error while syncing tracking data to PayPal -> Sync GZD Tracking #1020 * Fix - Error while syncing tracking data to PayPal -> Sync GZD Tracking #1020
* Fix - Fix product price retrieval for variable product buttons #1000 * Fix - Fix product price retrieval for variable product buttons #1000

426
composer.lock generated
View file

@ -35,10 +35,6 @@
], ],
"description": "Promoting container interoperability through standard service providers", "description": "Promoting container interoperability through standard service providers",
"homepage": "https://github.com/container-interop/service-provider", "homepage": "https://github.com/container-interop/service-provider",
"support": {
"issues": "https://github.com/container-interop/service-provider/issues",
"source": "https://github.com/container-interop/service-provider/tree/master"
},
"time": "2017-09-20T14:13:36+00:00" "time": "2017-09-20T14:13:36+00:00"
}, },
{ {
@ -90,10 +86,6 @@
} }
], ],
"description": "Interfaces for human readable string interoperation.", "description": "Interfaces for human readable string interoperation.",
"support": {
"issues": "https://github.com/Dhii/human-readable-interface/issues",
"source": "https://github.com/Dhii/human-readable-interface/tree/v0.2.0-alpha1"
},
"time": "2021-03-05T00:36:01+00:00" "time": "2021-03-05T00:36:01+00:00"
}, },
{ {
@ -142,10 +134,6 @@
} }
], ],
"description": "Interfaces for modules", "description": "Interfaces for modules",
"support": {
"issues": "https://github.com/Dhii/module-interface/issues",
"source": "https://github.com/Dhii/module-interface/tree/v0.3.0-alpha2"
},
"time": "2021-08-23T08:23:01+00:00" "time": "2021-08-23T08:23:01+00:00"
}, },
{ {
@ -189,10 +177,6 @@
} }
], ],
"description": "Interfaces for package-related interop", "description": "Interfaces for package-related interop",
"support": {
"issues": "https://github.com/Dhii/package-interface/issues",
"source": "https://github.com/Dhii/package-interface/tree/v0.1.0-alpha4"
},
"time": "2021-12-08T15:57:36+00:00" "time": "2021-12-08T15:57:36+00:00"
}, },
{ {
@ -241,10 +225,6 @@
} }
], ],
"description": "A base interface for validators", "description": "A base interface for validators",
"support": {
"issues": "https://github.com/Dhii/validation-interface/issues",
"source": "https://github.com/Dhii/validation-interface/tree/v0.3.0-alpha3"
},
"time": "2021-01-14T16:19:20+00:00" "time": "2021-01-14T16:19:20+00:00"
}, },
{ {
@ -288,10 +268,6 @@
} }
], ],
"description": "Implementation for dealing with SemVer-compliant versions", "description": "Implementation for dealing with SemVer-compliant versions",
"support": {
"issues": "https://github.com/Dhii/versions/issues",
"source": "https://github.com/Dhii/versions/tree/v0.1.0-alpha3"
},
"time": "2021-12-08T16:54:50+00:00" "time": "2021-12-08T16:54:50+00:00"
}, },
{ {
@ -336,10 +312,6 @@
"container-interop", "container-interop",
"psr" "psr"
], ],
"support": {
"issues": "https://github.com/php-fig/container/issues",
"source": "https://github.com/php-fig/container/tree/1.1.1"
},
"time": "2021-03-05T17:36:06+00:00" "time": "2021-03-05T17:36:06+00:00"
}, },
{ {
@ -387,9 +359,6 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00" "time": "2021-05-03T11:20:27+00:00"
}, },
{ {
@ -430,10 +399,6 @@
} }
], ],
"description": "A polyfill for getallheaders.", "description": "A polyfill for getallheaders.",
"support": {
"issues": "https://github.com/ralouphie/getallheaders/issues",
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
},
"time": "2019-03-08T08:55:37+00:00" "time": "2019-03-08T08:55:37+00:00"
}, },
{ {
@ -500,9 +465,6 @@
"portable", "portable",
"shim" "shim"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -566,10 +528,6 @@
} }
], ],
"description": "Composer plugin to merge multiple composer.json files", "description": "Composer plugin to merge multiple composer.json files",
"support": {
"issues": "https://github.com/wikimedia/composer-merge-plugin/issues",
"source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1"
},
"time": "2021-02-24T05:28:06+00:00" "time": "2021-02-24T05:28:06+00:00"
}, },
{ {
@ -618,10 +576,6 @@
} }
], ],
"description": "Interfaces for interop within WordPress", "description": "Interfaces for interop within WordPress",
"support": {
"issues": "https://github.com/wp-oop/wordpress-interface/issues",
"source": "https://github.com/wp-oop/wordpress-interface/tree/v0.1.0-alpha2"
},
"time": "2021-04-30T09:37:37+00:00" "time": "2021-04-30T09:37:37+00:00"
} }
], ],
@ -702,11 +656,6 @@
"non-blocking", "non-blocking",
"promise" "promise"
], ],
"support": {
"irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/amp/issues",
"source": "https://github.com/amphp/amp/tree/v2.6.2"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/amphp", "url": "https://github.com/amphp",
@ -748,12 +697,12 @@
} }
}, },
"autoload": { "autoload": {
"files": [
"lib/functions.php"
],
"psr-4": { "psr-4": {
"Amp\\ByteStream\\": "lib" "Amp\\ByteStream\\": "lib"
} },
"files": [
"lib/functions.php"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -779,11 +728,6 @@
"non-blocking", "non-blocking",
"stream" "stream"
], ],
"support": {
"irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/byte-stream/issues",
"source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/amphp", "url": "https://github.com/amphp",
@ -834,10 +778,6 @@
"runkit", "runkit",
"testing" "testing"
], ],
"support": {
"issues": "https://github.com/antecedent/patchwork/issues",
"source": "https://github.com/antecedent/patchwork/tree/2.1.21"
},
"time": "2022-02-07T07:28:34+00:00" "time": "2022-02-07T07:28:34+00:00"
}, },
{ {
@ -904,10 +844,6 @@
"test", "test",
"testing" "testing"
], ],
"support": {
"issues": "https://github.com/Brain-WP/BrainMonkey/issues",
"source": "https://github.com/Brain-WP/BrainMonkey"
},
"time": "2021-11-11T15:53:55+00:00" "time": "2021-11-11T15:53:55+00:00"
}, },
{ {
@ -963,10 +899,6 @@
} }
], ],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"support": {
"issues": "https://github.com/composer/package-versions-deprecated/issues",
"source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
},
"funding": [ "funding": [
{ {
"url": "https://packagist.com", "url": "https://packagist.com",
@ -1034,10 +966,6 @@
"regex", "regex",
"regular expression" "regular expression"
], ],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/2.1.0"
},
"funding": [ "funding": [
{ {
"url": "https://packagist.com", "url": "https://packagist.com",
@ -1114,11 +1042,6 @@
"validation", "validation",
"versioning" "versioning"
], ],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.3.2"
},
"funding": [ "funding": [
{ {
"url": "https://packagist.com", "url": "https://packagist.com",
@ -1180,11 +1103,6 @@
"Xdebug", "Xdebug",
"performance" "performance"
], ],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
},
"funding": [ "funding": [
{ {
"url": "https://packagist.com", "url": "https://packagist.com",
@ -1270,10 +1188,6 @@
"stylecheck", "stylecheck",
"tests" "tests"
], ],
"support": {
"issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
"source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
},
"time": "2022-02-04T12:51:07+00:00" "time": "2022-02-04T12:51:07+00:00"
}, },
{ {
@ -1325,10 +1239,6 @@
} }
], ],
"description": "A highly ISP-compliant collection of interfaces that represent maps and lists.", "description": "A highly ISP-compliant collection of interfaces that represent maps and lists.",
"support": {
"issues": "https://github.com/Dhii/collections-interface/issues",
"source": "https://github.com/Dhii/collections-interface/tree/v0.3.0"
},
"time": "2021-10-06T10:56:09+00:00" "time": "2021-10-06T10:56:09+00:00"
}, },
{ {
@ -1385,10 +1295,6 @@
"PSR-11", "PSR-11",
"container" "container"
], ],
"support": {
"issues": "https://github.com/Dhii/containers/issues",
"source": "https://github.com/Dhii/containers/tree/v0.1.4"
},
"time": "2021-10-06T11:13:51+00:00" "time": "2021-10-06T11:13:51+00:00"
}, },
{ {
@ -1422,38 +1328,34 @@
"MIT" "MIT"
], ],
"description": "implementation of xdg base directory specification for php", "description": "implementation of xdg base directory specification for php",
"support": {
"issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
"source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
},
"time": "2019-12-04T15:06:13+00:00" "time": "2019-12-04T15:06:13+00:00"
}, },
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
"version": "1.4.1", "version": "1.5.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/instantiator.git", "url": "https://github.com/doctrine/instantiator.git",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1 || ^8.0" "php": "^7.1 || ^8.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^9", "doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*", "ext-pdo": "*",
"ext-phar": "*", "ext-phar": "*",
"phpbench/phpbench": "^0.16 || ^1", "phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.4", "phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.22" "vimeo/psalm": "^4.30 || ^5.4"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -1478,10 +1380,6 @@
"constructor", "constructor",
"instantiate" "instantiate"
], ],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
},
"funding": [ "funding": [
{ {
"url": "https://www.doctrine-project.org/sponsorship.html", "url": "https://www.doctrine-project.org/sponsorship.html",
@ -1496,7 +1394,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-03-03T08:28:38+00:00" "time": "2022-12-30T00:15:36+00:00"
}, },
{ {
"name": "felixfbecker/advanced-json-rpc", "name": "felixfbecker/advanced-json-rpc",
@ -1537,10 +1435,6 @@
} }
], ],
"description": "A more advanced JSONRPC implementation", "description": "A more advanced JSONRPC implementation",
"support": {
"issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
"source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
},
"time": "2021-06-11T22:34:44+00:00" "time": "2021-06-11T22:34:44+00:00"
}, },
{ {
@ -1593,10 +1487,6 @@
"php", "php",
"server" "server"
], ],
"support": {
"issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
"source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
},
"time": "2022-03-02T22:36:06+00:00" "time": "2022-03-02T22:36:06+00:00"
}, },
{ {
@ -1645,10 +1535,6 @@
"Result-Type", "Result-Type",
"result" "result"
], ],
"support": {
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
"source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/GrahamCampbell", "url": "https://github.com/GrahamCampbell",
@ -1706,10 +1592,6 @@
"keywords": [ "keywords": [
"test" "test"
], ],
"support": {
"issues": "https://github.com/hamcrest/hamcrest-php/issues",
"source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
},
"time": "2020-07-09T08:09:16+00:00" "time": "2020-07-09T08:09:16+00:00"
}, },
{ {
@ -1775,10 +1657,6 @@
"test double", "test double",
"testing" "testing"
], ],
"support": {
"issues": "https://github.com/mockery/mockery/issues",
"source": "https://github.com/mockery/mockery/tree/1.3.6"
},
"time": "2022-09-07T15:05:49+00:00" "time": "2022-09-07T15:05:49+00:00"
}, },
{ {
@ -1828,10 +1706,6 @@
"object", "object",
"object graph" "object graph"
], ],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
},
"funding": [ "funding": [
{ {
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
@ -1884,25 +1758,20 @@
} }
], ],
"description": "Map nested JSON structures onto PHP classes", "description": "Map nested JSON structures onto PHP classes",
"support": {
"email": "cweiske@cweiske.de",
"issues": "https://github.com/cweiske/jsonmapper/issues",
"source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0"
},
"time": "2022-12-08T20:46:14+00:00" "time": "2022-12-08T20:46:14+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.15.2", "version": "v4.15.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039",
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1941,11 +1810,7 @@
"parser", "parser",
"php" "php"
], ],
"support": { "time": "2023-01-16T22:05:37+00:00"
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2"
},
"time": "2022-11-12T15:38:23+00:00"
}, },
{ {
"name": "openlss/lib-array2xml", "name": "openlss/lib-array2xml",
@ -1994,10 +1859,6 @@
"xml", "xml",
"xml conversion" "xml conversion"
], ],
"support": {
"issues": "https://github.com/nullivex/lib-array2xml/issues",
"source": "https://github.com/nullivex/lib-array2xml/tree/master"
},
"time": "2019-03-29T20:06:56+00:00" "time": "2019-03-29T20:06:56+00:00"
}, },
{ {
@ -2054,10 +1915,6 @@
} }
], ],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
"source": "https://github.com/phar-io/manifest/tree/2.0.3"
},
"time": "2021-07-20T11:28:43+00:00" "time": "2021-07-20T11:28:43+00:00"
}, },
{ {
@ -2105,10 +1962,6 @@
} }
], ],
"description": "Library for handling version information and constraints", "description": "Library for handling version information and constraints",
"support": {
"issues": "https://github.com/phar-io/version/issues",
"source": "https://github.com/phar-io/version/tree/3.2.1"
},
"time": "2022-02-21T01:04:05+00:00" "time": "2022-02-21T01:04:05+00:00"
}, },
{ {
@ -2149,10 +2002,6 @@
"woocommerce", "woocommerce",
"wordpress" "wordpress"
], ],
"support": {
"issues": "https://github.com/php-stubs/woocommerce-stubs/issues",
"source": "https://github.com/php-stubs/woocommerce-stubs/tree/v5.9.1"
},
"time": "2022-04-30T06:35:48+00:00" "time": "2022-04-30T06:35:48+00:00"
}, },
{ {
@ -2196,10 +2045,6 @@
"static analysis", "static analysis",
"wordpress" "wordpress"
], ],
"support": {
"issues": "https://github.com/php-stubs/wordpress-stubs/issues",
"source": "https://github.com/php-stubs/wordpress-stubs/tree/v5.9.5"
},
"time": "2022-11-09T05:32:14+00:00" "time": "2022-11-09T05:32:14+00:00"
}, },
{ {
@ -2258,10 +2103,6 @@
"phpcs", "phpcs",
"standards" "standards"
], ],
"support": {
"issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
"source": "https://github.com/PHPCompatibility/PHPCompatibility"
},
"time": "2019-12-27T09:44:58+00:00" "time": "2019-12-27T09:44:58+00:00"
}, },
{ {
@ -2315,10 +2156,6 @@
"standards", "standards",
"static analysis" "static analysis"
], ],
"support": {
"issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
"source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
},
"time": "2022-10-25T01:46:02+00:00" "time": "2022-10-25T01:46:02+00:00"
}, },
{ {
@ -2370,10 +2207,6 @@
"static analysis", "static analysis",
"wordpress" "wordpress"
], ],
"support": {
"issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
"source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
},
"time": "2022-10-24T09:00:36+00:00" "time": "2022-10-24T09:00:36+00:00"
}, },
{ {
@ -2423,10 +2256,6 @@
"reflection", "reflection",
"static analysis" "static analysis"
], ],
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
"source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
"time": "2020-06-27T09:03:43+00:00" "time": "2020-06-27T09:03:43+00:00"
}, },
{ {
@ -2480,10 +2309,6 @@
} }
], ],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
},
"time": "2021-10-19T17:43:47+00:00" "time": "2021-10-19T17:43:47+00:00"
}, },
{ {
@ -2530,10 +2355,6 @@
} }
], ],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
},
"time": "2022-03-15T21:29:03+00:00" "time": "2022-03-15T21:29:03+00:00"
}, },
{ {
@ -2595,10 +2416,6 @@
"php", "php",
"type" "type"
], ],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
"source": "https://github.com/schmittjoh/php-option/tree/1.9.0"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/GrahamCampbell", "url": "https://github.com/GrahamCampbell",
@ -2672,10 +2489,6 @@
"testing", "testing",
"xunit" "xunit"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.15"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -2732,10 +2545,6 @@
"filesystem", "filesystem",
"iterator" "iterator"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -2783,10 +2592,6 @@
"keywords": [ "keywords": [
"template" "template"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
},
"time": "2015-06-21T13:50:34+00:00" "time": "2015-06-21T13:50:34+00:00"
}, },
{ {
@ -2836,16 +2641,6 @@
"keywords": [ "keywords": [
"timer" "timer"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:20:02+00:00" "time": "2020-11-30T08:20:02+00:00"
}, },
{ {
@ -2895,16 +2690,6 @@
"keywords": [ "keywords": [
"tokenizer" "tokenizer"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
"source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"abandoned": true, "abandoned": true,
"time": "2021-07-26T12:15:06+00:00" "time": "2021-07-26T12:15:06+00:00"
}, },
@ -2985,10 +2770,6 @@
"testing", "testing",
"xunit" "xunit"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.31"
},
"funding": [ "funding": [
{ {
"url": "https://phpunit.de/sponsors.html", "url": "https://phpunit.de/sponsors.html",
@ -3048,16 +2829,6 @@
], ],
"description": "Looks up which function or method a line of code belongs to", "description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
"source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:15:22+00:00" "time": "2020-11-30T08:15:22+00:00"
}, },
{ {
@ -3122,10 +2893,6 @@
"compare", "compare",
"equality" "equality"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -3188,16 +2955,6 @@
"unidiff", "unidiff",
"unified diff" "unified diff"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"source": "https://github.com/sebastianbergmann/diff/tree/3.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:59:04+00:00" "time": "2020-11-30T07:59:04+00:00"
}, },
{ {
@ -3251,16 +3008,6 @@
"environment", "environment",
"hhvm" "hhvm"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:53:42+00:00" "time": "2020-11-30T07:53:42+00:00"
}, },
{ {
@ -3328,10 +3075,6 @@
"export", "export",
"exporter" "exporter"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -3392,10 +3135,6 @@
"keywords": [ "keywords": [
"global state" "global state"
], ],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"source": "https://github.com/sebastianbergmann/global-state/tree/3.0.2"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -3449,16 +3188,6 @@
], ],
"description": "Traverses array structures and object graphs to enumerate all referenced objects", "description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/", "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
"source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:40:27+00:00" "time": "2020-11-30T07:40:27+00:00"
}, },
{ {
@ -3504,16 +3233,6 @@
], ],
"description": "Allows reflection of object attributes, including inherited and non-public ones", "description": "Allows reflection of object attributes, including inherited and non-public ones",
"homepage": "https://github.com/sebastianbergmann/object-reflector/", "homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
"source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:37:18+00:00" "time": "2020-11-30T07:37:18+00:00"
}, },
{ {
@ -3567,16 +3286,6 @@
], ],
"description": "Provides functionality to recursively process PHP variables", "description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context", "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:34:24+00:00" "time": "2020-11-30T07:34:24+00:00"
}, },
{ {
@ -3619,16 +3328,6 @@
], ],
"description": "Provides a list of PHP built-in functions that operate on resources", "description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations", "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"support": {
"issues": "https://github.com/sebastianbergmann/resource-operations/issues",
"source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:30:19+00:00" "time": "2020-11-30T07:30:19+00:00"
}, },
{ {
@ -3675,10 +3374,6 @@
], ],
"description": "Collection of value objects that represent the types of the PHP type system", "description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type", "homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"source": "https://github.com/sebastianbergmann/type/tree/1.1.4"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
@ -3728,10 +3423,6 @@
], ],
"description": "Library that helps with managing the version number of Git-hosted PHP projects", "description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version", "homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
"source": "https://github.com/sebastianbergmann/version/tree/master"
},
"time": "2016-10-03T07:35:21+00:00" "time": "2016-10-03T07:35:21+00:00"
}, },
{ {
@ -3783,25 +3474,20 @@
"phpcs", "phpcs",
"standards" "standards"
], ],
"support": {
"issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
"source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
},
"time": "2022-06-18T07:21:10+00:00" "time": "2022-06-18T07:21:10+00:00"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v5.4.16", "version": "v5.4.17",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef" "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/8e9b9c8dfb33af6057c94e1b44846bee700dc5ef", "url": "https://api.github.com/repos/symfony/console/zipball/58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f",
"reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef", "reference": "58422fdcb0e715ed05b385f70d3e8b5ed4bbd45f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3870,9 +3556,6 @@
"console", "console",
"terminal" "terminal"
], ],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.16"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -3887,7 +3570,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-11-25T14:09:27+00:00" "time": "2022-12-28T14:15:31+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@ -3937,9 +3620,6 @@
], ],
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4019,9 +3699,6 @@
"polyfill", "polyfill",
"portable" "portable"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4100,9 +3777,6 @@
"portable", "portable",
"shim" "shim"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4184,9 +3858,6 @@
"portable", "portable",
"shim" "shim"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4267,9 +3938,6 @@
"portable", "portable",
"shim" "shim"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4346,9 +4014,6 @@
"portable", "portable",
"shim" "shim"
], ],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4429,9 +4094,6 @@
"interoperability", "interoperability",
"standards" "standards"
], ],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4450,16 +4112,16 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v5.4.15", "version": "v5.4.17",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", "url": "https://api.github.com/repos/symfony/string/zipball/55733a8664b8853b003e70251c58bc8cb2d82a6b",
"reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", "reference": "55733a8664b8853b003e70251c58bc8cb2d82a6b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4515,9 +4177,6 @@
"utf-8", "utf-8",
"utf8" "utf8"
], ],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.15"
},
"funding": [ "funding": [
{ {
"url": "https://symfony.com/sponsor", "url": "https://symfony.com/sponsor",
@ -4532,7 +4191,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-10-05T15:16:54+00:00" "time": "2022-12-12T15:54:21+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",
@ -4572,10 +4231,6 @@
} }
], ],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
"source": "https://github.com/theseer/tokenizer/tree/1.2.1"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/theseer", "url": "https://github.com/theseer",
@ -4686,10 +4341,6 @@
"inspection", "inspection",
"php" "php"
], ],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
"source": "https://github.com/vimeo/psalm/tree/4.30.0"
},
"time": "2022-11-06T20:37:08+00:00" "time": "2022-11-06T20:37:08+00:00"
}, },
{ {
@ -4760,10 +4411,6 @@
"env", "env",
"environment" "environment"
], ],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
"source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0"
},
"funding": [ "funding": [
{ {
"url": "https://github.com/GrahamCampbell", "url": "https://github.com/GrahamCampbell",
@ -4828,10 +4475,6 @@
"check", "check",
"validate" "validate"
], ],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/1.11.0"
},
"time": "2022-06-03T18:03:27+00:00" "time": "2022-06-03T18:03:27+00:00"
}, },
{ {
@ -4878,10 +4521,6 @@
} }
], ],
"description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
"support": {
"issues": "https://github.com/webmozart/path-util/issues",
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
},
"abandoned": "symfony/filesystem", "abandoned": "symfony/filesystem",
"time": "2015-12-17T08:42:14+00:00" "time": "2015-12-17T08:42:14+00:00"
}, },
@ -4923,10 +4562,6 @@
"woocommerce", "woocommerce",
"wordpress" "wordpress"
], ],
"support": {
"issues": "https://github.com/woocommerce/woocommerce-sniffs/issues",
"source": "https://github.com/woocommerce/woocommerce-sniffs/tree/0.1.3"
},
"time": "2022-02-17T15:34:51+00:00" "time": "2022-02-17T15:34:51+00:00"
}, },
{ {
@ -4973,11 +4608,6 @@
"standards", "standards",
"wordpress" "wordpress"
], ],
"support": {
"issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues",
"source": "https://github.com/WordPress/WordPress-Coding-Standards",
"wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki"
},
"time": "2020-05-13T23:57:56+00:00" "time": "2020-05-13T23:57:56+00:00"
} }
], ],
@ -4990,9 +4620,9 @@
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": "^7.2 | ^8.0", "php": "^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0, ^7.2 | ^8.0",
"ext-json": "*" "ext-json": "*"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.3.0" "plugin-api-version": "1.1.0"
} }

View file

@ -54,7 +54,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Repository\CustomerRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\OrderRepository; use WooCommerce\PayPalCommerce\ApiClient\Repository\OrderRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PartnerReferralsData; use WooCommerce\PayPalCommerce\ApiClient\Repository\PartnerReferralsData;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayeeRepository; use WooCommerce\PayPalCommerce\ApiClient\Repository\PayeeRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
return array( return array(
@ -118,8 +117,7 @@ return array(
$container->get( 'api.factory.payment-token' ), $container->get( 'api.factory.payment-token' ),
$container->get( 'api.factory.payment-token-action-links' ), $container->get( 'api.factory.payment-token-action-links' ),
$container->get( 'woocommerce.logger.woocommerce' ), $container->get( 'woocommerce.logger.woocommerce' ),
$container->get( 'api.repository.customer' ), $container->get( 'api.repository.customer' )
$container->get( 'api.repository.paypal-request-id' )
); );
}, },
'api.endpoint.webhook' => static function ( ContainerInterface $container ) : WebhookEndpoint { 'api.endpoint.webhook' => static function ( ContainerInterface $container ) : WebhookEndpoint {
@ -187,7 +185,6 @@ return array(
$settings = $container->get( 'wcgateway.settings' ); $settings = $container->get( 'wcgateway.settings' );
$intent = $settings->has( 'intent' ) && strtoupper( (string) $settings->get( 'intent' ) ) === 'AUTHORIZE' ? 'AUTHORIZE' : 'CAPTURE'; $intent = $settings->has( 'intent' ) && strtoupper( (string) $settings->get( 'intent' ) ) === 'AUTHORIZE' ? 'AUTHORIZE' : 'CAPTURE';
$application_context_repository = $container->get( 'api.repository.application-context' ); $application_context_repository = $container->get( 'api.repository.application-context' );
$paypal_request_id = $container->get( 'api.repository.paypal-request-id' );
$subscription_helper = $container->get( 'subscription.helper' ); $subscription_helper = $container->get( 'subscription.helper' );
return new OrderEndpoint( return new OrderEndpoint(
$container->get( 'api.host' ), $container->get( 'api.host' ),
@ -197,7 +194,6 @@ return array(
$intent, $intent,
$logger, $logger,
$application_context_repository, $application_context_repository,
$paypal_request_id,
$subscription_helper, $subscription_helper,
$container->get( 'wcgateway.is-fraudnet-enabled' ), $container->get( 'wcgateway.is-fraudnet-enabled' ),
$container->get( 'wcgateway.fraudnet' ) $container->get( 'wcgateway.fraudnet' )
@ -210,9 +206,6 @@ return array(
$container->get( 'woocommerce.logger.woocommerce' ) $container->get( 'woocommerce.logger.woocommerce' )
); );
}, },
'api.repository.paypal-request-id' => static function( ContainerInterface $container ) : PayPalRequestIdRepository {
return new PayPalRequestIdRepository();
},
'api.repository.application-context' => static function( ContainerInterface $container ) : ApplicationContextRepository { 'api.repository.application-context' => static function( ContainerInterface $container ) : ApplicationContextRepository {
$settings = $container->get( 'wcgateway.settings' ); $settings = $container->get( 'wcgateway.settings' );

View file

@ -116,13 +116,6 @@ class OrderEndpoint {
*/ */
private $bn_code; private $bn_code;
/**
* The paypal request id repository.
*
* @var PayPalRequestIdRepository
*/
private $paypal_request_id_repository;
/** /**
* OrderEndpoint constructor. * OrderEndpoint constructor.
* *
@ -133,7 +126,6 @@ class OrderEndpoint {
* @param string $intent The intent. * @param string $intent The intent.
* @param LoggerInterface $logger The logger. * @param LoggerInterface $logger The logger.
* @param ApplicationContextRepository $application_context_repository The application context repository. * @param ApplicationContextRepository $application_context_repository The application context repository.
* @param PayPalRequestIdRepository $paypal_request_id_repository The paypal request id repository.
* @param SubscriptionHelper $subscription_helper The subscription helper. * @param SubscriptionHelper $subscription_helper The subscription helper.
* @param bool $is_fraudnet_enabled true if FraudNet support is enabled in settings, otherwise false. * @param bool $is_fraudnet_enabled true if FraudNet support is enabled in settings, otherwise false.
* @param FraudNet $fraudnet The FraudNet entity. * @param FraudNet $fraudnet The FraudNet entity.
@ -147,7 +139,6 @@ class OrderEndpoint {
string $intent, string $intent,
LoggerInterface $logger, LoggerInterface $logger,
ApplicationContextRepository $application_context_repository, ApplicationContextRepository $application_context_repository,
PayPalRequestIdRepository $paypal_request_id_repository,
SubscriptionHelper $subscription_helper, SubscriptionHelper $subscription_helper,
bool $is_fraudnet_enabled, bool $is_fraudnet_enabled,
FraudNet $fraudnet, FraudNet $fraudnet,
@ -162,7 +153,6 @@ class OrderEndpoint {
$this->logger = $logger; $this->logger = $logger;
$this->application_context_repository = $application_context_repository; $this->application_context_repository = $application_context_repository;
$this->bn_code = $bn_code; $this->bn_code = $bn_code;
$this->paypal_request_id_repository = $paypal_request_id_repository;
$this->is_fraudnet_enabled = $is_fraudnet_enabled; $this->is_fraudnet_enabled = $is_fraudnet_enabled;
$this->subscription_helper = $subscription_helper; $this->subscription_helper = $subscription_helper;
$this->fraudnet = $fraudnet; $this->fraudnet = $fraudnet;
@ -190,7 +180,6 @@ class OrderEndpoint {
* @param Payer|null $payer The payer off the order. * @param Payer|null $payer The payer off the order.
* @param PaymentToken|null $payment_token The payment token. * @param PaymentToken|null $payment_token The payment token.
* @param PaymentMethod|null $payment_method The payment method. * @param PaymentMethod|null $payment_method The payment method.
* @param string $paypal_request_id The paypal request id.
* *
* @return Order * @return Order
* @throws RuntimeException If the request fails. * @throws RuntimeException If the request fails.
@ -200,8 +189,7 @@ class OrderEndpoint {
string $shipping_preference, string $shipping_preference,
Payer $payer = null, Payer $payer = null,
PaymentToken $payment_token = null, PaymentToken $payment_token = null,
PaymentMethod $payment_method = null, PaymentMethod $payment_method = null
string $paypal_request_id = ''
): Order { ): Order {
$bearer = $this->bearer->bearer(); $bearer = $this->bearer->bearer();
$data = array( $data = array(
@ -240,8 +228,6 @@ class OrderEndpoint {
'body' => wp_json_encode( $data ), 'body' => wp_json_encode( $data ),
); );
$paypal_request_id = $paypal_request_id ? $paypal_request_id : uniqid( 'ppcp-', true );
$args['headers']['PayPal-Request-Id'] = $paypal_request_id;
if ( $this->bn_code ) { if ( $this->bn_code ) {
$args['headers']['PayPal-Partner-Attribution-Id'] = $this->bn_code; $args['headers']['PayPal-Partner-Attribution-Id'] = $this->bn_code;
} }
@ -286,7 +272,6 @@ class OrderEndpoint {
throw $error; throw $error;
} }
$order = $this->order_factory->from_paypal_response( $json ); $order = $this->order_factory->from_paypal_response( $json );
$this->paypal_request_id_repository->set_for_order( $order, $paypal_request_id );
return $order; return $order;
} }
@ -307,10 +292,9 @@ class OrderEndpoint {
$args = array( $args = array(
'method' => 'POST', 'method' => 'POST',
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Prefer' => 'return=representation', 'Prefer' => 'return=representation',
'PayPal-Request-Id' => $this->paypal_request_id_repository->get_for_order( $order ),
), ),
); );
if ( $this->bn_code ) { if ( $this->bn_code ) {
@ -382,10 +366,9 @@ class OrderEndpoint {
$args = array( $args = array(
'method' => 'POST', 'method' => 'POST',
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Prefer' => 'return=representation', 'Prefer' => 'return=representation',
'PayPal-Request-Id' => $this->paypal_request_id_repository->get_for_order( $order ),
), ),
); );
if ( $this->bn_code ) { if ( $this->bn_code ) {
@ -456,9 +439,8 @@ class OrderEndpoint {
$url = trailingslashit( $this->host ) . 'v2/checkout/orders/' . $id; $url = trailingslashit( $this->host ) . 'v2/checkout/orders/' . $id;
$args = array( $args = array(
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'PayPal-Request-Id' => $this->paypal_request_id_repository->get_for_order_id( $id ),
), ),
); );
if ( $this->bn_code ) { if ( $this->bn_code ) {
@ -469,14 +451,8 @@ class OrderEndpoint {
$error = new RuntimeException( $error = new RuntimeException(
__( 'Could not retrieve order.', 'woocommerce-paypal-payments' ) __( 'Could not retrieve order.', 'woocommerce-paypal-payments' )
); );
$this->logger->log( $this->logger->warning( $error->getMessage() );
'warning',
$error->getMessage(),
array(
'args' => $args,
'response' => $response,
)
);
throw $error; throw $error;
} }
$json = json_decode( $response['body'] ); $json = json_decode( $response['body'] );
@ -511,8 +487,8 @@ class OrderEndpoint {
); );
throw $error; throw $error;
} }
$order = $this->order_factory->from_paypal_response( $json );
return $order; return $this->order_factory->from_paypal_response( $json );
} }
/** /**
@ -543,12 +519,9 @@ class OrderEndpoint {
$args = array( $args = array(
'method' => 'PATCH', 'method' => 'PATCH',
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Prefer' => 'return=representation', 'Prefer' => 'return=representation',
'PayPal-Request-Id' => $this->paypal_request_id_repository->get_for_order(
$order_to_update
),
), ),
'body' => wp_json_encode( $patches_array ), 'body' => wp_json_encode( $patches_array ),
); );

View file

@ -133,7 +133,7 @@ class PayUponInvoiceOrderEndpoint {
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Prefer' => 'return=representation', 'Prefer' => 'return=representation',
'PayPal-Client-Metadata-Id' => $this->fraudnet->session_id(), 'PayPal-Client-Metadata-Id' => $this->fraudnet->session_id(),
'PayPal-Request-Id' => uniqid( 'ppcp-', true ), 'PayPal-Request-Id' => uniqid( 'ppcp-', true ), // Request-Id header is required.
), ),
'body' => wp_json_encode( $data ), 'body' => wp_json_encode( $data ),
); );

View file

@ -19,7 +19,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Factory\PaymentTokenActionLinksFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\PaymentTokenFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\PaymentTokenFactory;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Repository\CustomerRepository; use WooCommerce\PayPalCommerce\ApiClient\Repository\CustomerRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository;
/** /**
* Class PaymentTokenEndpoint * Class PaymentTokenEndpoint
@ -70,13 +69,6 @@ class PaymentTokenEndpoint {
*/ */
protected $customer_repository; protected $customer_repository;
/**
* The request id repository.
*
* @var PayPalRequestIdRepository
*/
private $request_id_repository;
/** /**
* PaymentTokenEndpoint constructor. * PaymentTokenEndpoint constructor.
* *
@ -86,7 +78,6 @@ class PaymentTokenEndpoint {
* @param PaymentTokenActionLinksFactory $payment_token_action_links_factory The PaymentTokenActionLinks factory. * @param PaymentTokenActionLinksFactory $payment_token_action_links_factory The PaymentTokenActionLinks factory.
* @param LoggerInterface $logger The logger. * @param LoggerInterface $logger The logger.
* @param CustomerRepository $customer_repository The customer repository. * @param CustomerRepository $customer_repository The customer repository.
* @param PayPalRequestIdRepository $request_id_repository The request id repository.
*/ */
public function __construct( public function __construct(
string $host, string $host,
@ -94,8 +85,7 @@ class PaymentTokenEndpoint {
PaymentTokenFactory $factory, PaymentTokenFactory $factory,
PaymentTokenActionLinksFactory $payment_token_action_links_factory, PaymentTokenActionLinksFactory $payment_token_action_links_factory,
LoggerInterface $logger, LoggerInterface $logger,
CustomerRepository $customer_repository, CustomerRepository $customer_repository
PayPalRequestIdRepository $request_id_repository
) { ) {
$this->host = $host; $this->host = $host;
@ -104,7 +94,6 @@ class PaymentTokenEndpoint {
$this->payment_token_action_links_factory = $payment_token_action_links_factory; $this->payment_token_action_links_factory = $payment_token_action_links_factory;
$this->logger = $logger; $this->logger = $logger;
$this->customer_repository = $customer_repository; $this->customer_repository = $customer_repository;
$this->request_id_repository = $request_id_repository;
} }
/** /**
@ -277,14 +266,11 @@ class PaymentTokenEndpoint {
), ),
); );
$request_id = uniqid( 'ppcp-vault', true );
$args = array( $args = array(
'method' => 'POST', 'method' => 'POST',
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
'Request-Id' => $request_id,
), ),
'body' => wp_json_encode( $data ), 'body' => wp_json_encode( $data ),
); );
@ -311,8 +297,6 @@ class PaymentTokenEndpoint {
$links = $this->payment_token_action_links_factory->from_paypal_response( $json ); $links = $this->payment_token_action_links_factory->from_paypal_response( $json );
$this->request_id_repository->set( "ppcp-vault-{$user_id}", $request_id );
return $links; return $links;
} }
@ -336,7 +320,6 @@ class PaymentTokenEndpoint {
'method' => 'POST', 'method' => 'POST',
'headers' => array( 'headers' => array(
'Authorization' => 'Bearer ' . $bearer->token(), 'Authorization' => 'Bearer ' . $bearer->token(),
'Request-Id' => $this->request_id_repository->get( "ppcp-vault-{$user_id}" ),
'Content-Type' => 'application/json', 'Content-Type' => 'application/json',
), ),
); );

View file

@ -1,112 +0,0 @@
<?php
/**
* The repository for the request IDs.
*
* @package WooCommerce\PayPalCommerce\ApiClient\Repository
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Repository;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
/**
* Class PayPalRequestIdRepository
*/
class PayPalRequestIdRepository {
const KEY = 'ppcp-request-ids';
/**
* Returns a request ID based on the order ID.
*
* @param string $order_id The order ID.
*
* @return string
*/
public function get_for_order_id( string $order_id ): string {
return $this->get( $order_id );
}
/**
* Returns the request ID for an order.
*
* @param Order $order The order.
*
* @return string
*/
public function get_for_order( Order $order ): string {
return $this->get_for_order_id( $order->id() );
}
/**
* Sets a request ID for a specific order.
*
* @param Order $order The order.
* @param string $request_id The ID.
*
* @return bool
*/
public function set_for_order( Order $order, string $request_id ): bool {
$this->set( $order->id(), $request_id );
return true;
}
/**
* Sets a request ID for the given key.
*
* @param string $key The key in the request ID storage.
* @param string $request_id The ID.
*/
public function set( string $key, string $request_id ): void {
$all = $this->all();
$day_in_seconds = 86400;
$all[ $key ] = array(
'id' => $request_id,
'expiration' => time() + 10 * $day_in_seconds,
);
$all = $this->cleanup( $all );
update_option( self::KEY, $all );
}
/**
* Returns a request ID.
*
* @param string $key The key in the request ID storage.
*
* @return string
*/
public function get( string $key ): string {
$all = $this->all();
return isset( $all[ $key ] ) ? (string) $all[ $key ]['id'] : '';
}
/**
* Return all IDs.
*
* @return array
*/
private function all(): array {
return (array) get_option( 'ppcp-request-ids', array() );
}
/**
* Clean up outdated request IDs.
*
* @param array $all All request IDs.
*
* @return array
*/
private function cleanup( array $all ): array {
foreach ( $all as $order_id => $value ) {
if ( time() < $value['expiration'] ) {
continue;
}
unset( $all[ $order_id ] );
}
return $all;
}
}

View file

@ -24,7 +24,6 @@ return array(
'uninstall.ppcp-all-option-names' => function( ContainerInterface $container ) : array { 'uninstall.ppcp-all-option-names' => function( ContainerInterface $container ) : array {
return array( return array(
$container->get( 'webhook.last-webhook-storage.key' ), $container->get( 'webhook.last-webhook-storage.key' ),
PayPalRequestIdRepository::KEY,
'woocommerce_ppcp-is_pay_later_settings_migrated', 'woocommerce_ppcp-is_pay_later_settings_migrated',
'woocommerce_' . PayPalGateway::ID . '_settings', 'woocommerce_' . PayPalGateway::ID . '_settings',
'woocommerce_' . CreditCardGateway::ID . '_settings', 'woocommerce_' . CreditCardGateway::ID . '_settings',

View file

@ -72,7 +72,6 @@ return array(
$settings = $container->get( 'wcgateway.settings' ); $settings = $container->get( 'wcgateway.settings' );
$intent = $settings->has( 'intent' ) && strtoupper( (string) $settings->get( 'intent' ) ) === 'AUTHORIZE' ? 'AUTHORIZE' : 'CAPTURE'; $intent = $settings->has( 'intent' ) && strtoupper( (string) $settings->get( 'intent' ) ) === 'AUTHORIZE' ? 'AUTHORIZE' : 'CAPTURE';
$application_context_repository = $container->get( 'api.repository.application-context' ); $application_context_repository = $container->get( 'api.repository.application-context' );
$pay_pal_request_id_repository = $container->get( 'api.repository.paypal-request-id' );
$subscription_helper = $container->get( 'subscription.helper' ); $subscription_helper = $container->get( 'subscription.helper' );
return new OrderEndpoint( return new OrderEndpoint(
$container->get( 'api.host' ), $container->get( 'api.host' ),
@ -82,7 +81,6 @@ return array(
$intent, $intent,
$logger, $logger,
$application_context_repository, $application_context_repository,
$pay_pal_request_id_repository,
$subscription_helper, $subscription_helper,
$container->get( 'wcgateway.is-fraudnet-enabled' ), $container->get( 'wcgateway.is-fraudnet-enabled' ),
$container->get( 'wcgateway.fraudnet' ), $container->get( 'wcgateway.fraudnet' ),

View file

@ -99,6 +99,10 @@ class DisableGateways {
* @return bool * @return bool
*/ */
private function disable_all_gateways() : bool { private function disable_all_gateways() : bool {
if ( is_null( WC()->payment_gateways ) ) {
return false;
}
foreach ( WC()->payment_gateways->payment_gateways() as $gateway ) { foreach ( WC()->payment_gateways->payment_gateways() as $gateway ) {
if ( PayPalGateway::ID === $gateway->id && $gateway->enabled !== 'yes' ) { if ( PayPalGateway::ID === $gateway->id && $gateway->enabled !== 'yes' ) {
return true; return true;

View file

@ -63,7 +63,15 @@ class OXXO {
add_filter( add_filter(
'woocommerce_available_payment_gateways', 'woocommerce_available_payment_gateways',
function ( array $methods ): array { /**
* Param types removed to avoid third-party issues.
*
* @psalm-suppress MissingClosureParamType
*/
function ( $methods ) {
if ( ! is_array( $methods ) ) {
return $methods;
}
if ( ! $this->checkout_allowed_for_oxxo() ) { if ( ! $this->checkout_allowed_for_oxxo() ) {
unset( $methods[ OXXOGateway::ID ] ); unset( $methods[ OXXOGateway::ID ] );

View file

@ -10,9 +10,11 @@ declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\WcGateway\Processor; namespace WooCommerce\PayPalCommerce\WcGateway\Processor;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WC_Order;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper; use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper;
use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure; use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure;
@ -160,12 +162,27 @@ class OrderProcessor {
* *
* @return bool * @return bool
*/ */
public function process( \WC_Order $wc_order ): bool { public function process( WC_Order $wc_order ): bool {
$order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); $order = $this->session_handler->order();
$order = $this->session_handler->order() ?? $this->order_endpoint->order( $order_id );
if ( ! $order ) { if ( ! $order ) {
$this->last_error = __( 'No PayPal order found in the current WooCommerce session.', 'woocommerce-paypal-payments' ); $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY );
return false; if ( ! $order_id ) {
$this->logger->warning(
sprintf(
'No PayPal order ID found in order #%d meta.',
$wc_order->get_id()
)
);
$this->last_error = __( 'Could not retrieve order. This browser may not be supported. Please try again with a different browser.', 'woocommerce-paypal-payments' );
return false;
}
try {
$order = $this->order_endpoint->order( $order_id );
} catch ( RuntimeException $exception ) {
$this->last_error = __( 'Could not retrieve PayPal order.', 'woocommerce-paypal-payments' );
return false;
}
} }
$this->add_paypal_meta( $wc_order, $order, $this->environment ); $this->add_paypal_meta( $wc_order, $order, $this->environment );

View file

@ -16,7 +16,6 @@ use WooCommerce\PayPalCommerce\AdminNotices\Repository\Repository;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Capture; use WooCommerce\PayPalCommerce\ApiClient\Entity\Capture;
use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus;
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository;
use WooCommerce\PayPalCommerce\Onboarding\State; use WooCommerce\PayPalCommerce\Onboarding\State;
use WooCommerce\PayPalCommerce\WcGateway\Admin\FeesRenderer; use WooCommerce\PayPalCommerce\WcGateway\Admin\FeesRenderer;
use WooCommerce\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn; use WooCommerce\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn;
@ -215,7 +214,6 @@ class WCGatewayModule implements ModuleInterface {
'woocommerce_paypal_commerce_gateway_deactivate', 'woocommerce_paypal_commerce_gateway_deactivate',
static function () use ( $c ) { static function () use ( $c ) {
delete_option( Settings::KEY ); delete_option( Settings::KEY );
delete_option( PayPalRequestIdRepository::KEY );
delete_option( 'woocommerce_' . PayPalGateway::ID . '_settings' ); delete_option( 'woocommerce_' . PayPalGateway::ID . '_settings' );
delete_option( 'woocommerce_' . CreditCardGateway::ID . '_settings' ); delete_option( 'woocommerce_' . CreditCardGateway::ID . '_settings' );
} }
@ -237,6 +235,8 @@ class WCGatewayModule implements ModuleInterface {
add_action( add_action(
'woocommerce_paypal_payments_gateway_migrate', 'woocommerce_paypal_payments_gateway_migrate',
static function () use ( $c ) { static function () use ( $c ) {
delete_option( 'ppcp-request-ids' );
$settings = $c->get( 'wcgateway.settings' ); $settings = $c->get( 'wcgateway.settings' );
assert( $settings instanceof Settings ); assert( $settings instanceof Settings );

View file

@ -1,6 +1,6 @@
{ {
"name": "woocommerce-paypal-payments", "name": "woocommerce-paypal-payments",
"version": "2.0.1", "version": "2.0.2",
"description": "WooCommerce PayPal Payments", "description": "WooCommerce PayPal Payments",
"repository": "https://github.com/woocommerce/woocommerce-paypal-payments", "repository": "https://github.com/woocommerce/woocommerce-paypal-payments",
"license": "GPL-2.0", "license": "GPL-2.0",
@ -58,7 +58,7 @@
"prearchive": "rm -rf $npm_package_name.zip", "prearchive": "rm -rf $npm_package_name.zip",
"archive": "zip -r $npm_package_name.zip . -x **.git/\\* **node_modules/\\*", "archive": "zip -r $npm_package_name.zip . -x **.git/\\* **node_modules/\\*",
"postarchive": "yarn run archive:cleanup && rm -rf $npm_package_name && unzip $npm_package_name.zip -d $npm_package_name && rm $npm_package_name.zip && zip -r $npm_package_name.zip $npm_package_name && rm -rf $npm_package_name", "postarchive": "yarn run archive:cleanup && rm -rf $npm_package_name && unzip $npm_package_name.zip -d $npm_package_name && rm $npm_package_name.zip && zip -r $npm_package_name.zip $npm_package_name && rm -rf $npm_package_name",
"archive:cleanup": "zip -d $npm_package_name.zip .env* .ddev/\\* .editorconfig tests/\\* .github/\\* .psalm/\\* wordpress_org_assets/\\* \\*.DS_Store README.md .gitattributes .gitignore .travis.yml composer.json composer.lock package.json package-lock.json patchwork.json yarn.lock phpunit.xml.dist .phpunit.result.cache phpcs.xml.dist modules/ppcp-button/.babelrc modules/ppcp-button/package.json modules/ppcp-button/webpack.config.js modules/ppcp-button/yarn.lock vendor/\\*/.idea/\\* vendor/\\*/.gitignore vendor/\\*/.gitattributes vendor/\\*/.travis.yml" "archive:cleanup": "zip -d $npm_package_name.zip .env* .ddev/\\* \\*.idea/\\* .editorconfig tests/\\* .github/\\* .psalm/\\* wordpress_org_assets/\\* \\*.DS_Store \\*README.md \\*.gitattributes \\*.gitignore \\*composer.json \\*composer.lock patchwork.json phpunit.xml.dist .phpunit.result.cache phpcs.xml* psalm*.xml* \\*.babelrc \\*package.json \\*webpack.config.js \\*yarn.lock \\*.travis.yml"
}, },
"config": { "config": {
"wp_org_slug": "woocommerce-paypal-payments" "wp_org_slug": "woocommerce-paypal-payments"

View file

@ -4,7 +4,7 @@ Tags: woocommerce, paypal, payments, ecommerce, e-commerce, store, sales, sell,
Requires at least: 5.3 Requires at least: 5.3
Tested up to: 6.1 Tested up to: 6.1
Requires PHP: 7.2 Requires PHP: 7.2
Stable tag: 2.0.1 Stable tag: 2.0.2
License: GPLv2 License: GPLv2
License URI: http://www.gnu.org/licenses/gpl-2.0.html License URI: http://www.gnu.org/licenses/gpl-2.0.html
@ -81,6 +81,16 @@ Follow the steps below to connect the plugin to your PayPal account:
== Changelog == == Changelog ==
= 2.0.2 =
* Fix - Do not call PayPal get order by ID if it does not exist #1029
* Fix - Type check error conflict with German Market #1056
* Fix - Backend Storage for the PayPalRequestIdRepository does not scale #983
* Fix - Ensure WC()->payment_gateways is not null #1128
* Enhancement - Remove plugin data after uninstalling #1075
* Enhancement - Add FraudNet to all payments #1040
* Enhancement - Update "Standard Payments" tab settings #1065
* Enhancement - Update PHP 7.2 requirement in all relevant files #1084
= 2.0.1 = = 2.0.1 =
* Fix - Error while syncing tracking data to PayPal -> Sync GZD Tracking #1020 * Fix - Error while syncing tracking data to PayPal -> Sync GZD Tracking #1020
* Fix - Fix product price retrieval for variable product buttons #1000 * Fix - Fix product price retrieval for variable product buttons #1000

View file

@ -24,7 +24,6 @@ use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\PatchCollectionFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\PatchCollectionFactory;
use WooCommerce\PayPalCommerce\ApiClient\Helper\ErrorResponse; use WooCommerce\PayPalCommerce\ApiClient\Helper\ErrorResponse;
use WooCommerce\PayPalCommerce\ApiClient\Repository\ApplicationContextRepository; use WooCommerce\PayPalCommerce\ApiClient\Repository\ApplicationContextRepository;
use WooCommerce\PayPalCommerce\ApiClient\Repository\PayPalRequestIdRepository;
use Mockery; use Mockery;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\Subscription\Helper\SubscriptionHelper; use WooCommerce\PayPalCommerce\Subscription\Helper\SubscriptionHelper;
@ -68,9 +67,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order_id')->with($orderId)->andReturn('uniqueRequestId');
$headers = Mockery::mock(Requests_Utility_CaseInsensitiveDictionary::class); $headers = Mockery::mock(Requests_Utility_CaseInsensitiveDictionary::class);
$headers->shouldReceive('getAll'); $headers->shouldReceive('getAll');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
@ -85,7 +81,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -130,12 +125,9 @@ class OrderEndpointTest extends TestCase
$patchCollectionFactory = Mockery::mock(PatchCollectionFactory::class); $patchCollectionFactory = Mockery::mock(PatchCollectionFactory::class);
$intent = 'CAPTURE'; $intent = 'CAPTURE';
$logger = Mockery::mock(LoggerInterface::class); $logger = Mockery::mock(LoggerInterface::class);
$logger->shouldReceive('log'); $logger->shouldReceive('warning');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order_id')->with($orderId)->andReturn('uniqueRequestId');
$headers = Mockery::mock(Requests_Utility_CaseInsensitiveDictionary::class); $headers = Mockery::mock(Requests_Utility_CaseInsensitiveDictionary::class);
$headers->shouldReceive('getAll'); $headers->shouldReceive('getAll');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
@ -150,7 +142,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -191,9 +182,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldReceive('log'); $logger->shouldReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order_id')->with($orderId)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -206,7 +194,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -261,9 +248,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToCapture)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -276,7 +260,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -334,7 +317,6 @@ class OrderEndpointTest extends TestCase
$logger = Mockery::mock(LoggerInterface::class); $logger = Mockery::mock(LoggerInterface::class);
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -347,7 +329,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -381,9 +362,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldReceive('log'); $logger->shouldReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToCapture)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -396,7 +374,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -437,9 +414,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldReceive('log'); $logger->shouldReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToCapture)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -452,7 +426,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -495,9 +468,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToCapture)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -512,7 +482,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -579,9 +548,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToUpdate)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -596,7 +562,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -625,9 +590,6 @@ class OrderEndpointTest extends TestCase
if ($args['headers']['Prefer'] !== 'return=representation') { if ($args['headers']['Prefer'] !== 'return=representation') {
return false; return false;
} }
if ($args['headers']['PayPal-Request-Id'] !== 'uniqueRequestId') {
return false;
}
$body = json_decode($args['body']); $body = json_decode($args['body']);
if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') { if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') {
return false; return false;
@ -688,9 +650,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldReceive('log'); $logger->shouldReceive('log');
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToUpdate)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -703,7 +662,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -727,9 +685,6 @@ class OrderEndpointTest extends TestCase
if ($args['headers']['Prefer'] !== 'return=representation') { if ($args['headers']['Prefer'] !== 'return=representation') {
return false; return false;
} }
if ($args['headers']['PayPal-Request-Id'] !== 'uniqueRequestId') {
return false;
}
$body = json_decode($args['body']); $body = json_decode($args['body']);
if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') { if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') {
return false; return false;
@ -791,9 +746,6 @@ class OrderEndpointTest extends TestCase
$logger->shouldReceive('debug'); $logger->shouldReceive('debug');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('get_for_order')->with($orderToUpdate)->andReturn('uniqueRequestId');
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -808,7 +760,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -833,9 +784,6 @@ class OrderEndpointTest extends TestCase
if ($args['headers']['Prefer'] !== 'return=representation') { if ($args['headers']['Prefer'] !== 'return=representation') {
return false; return false;
} }
if ($args['headers']['PayPal-Request-Id'] !== 'uniqueRequestId') {
return false;
}
$body = json_decode($args['body']); $body = json_decode($args['body']);
if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') { if (! is_array($body) || $body[0] !== 'patch-1' || $body[1] !== 'patch-2') {
return false; return false;
@ -873,7 +821,6 @@ class OrderEndpointTest extends TestCase
$logger = Mockery::mock(LoggerInterface::class); $logger = Mockery::mock(LoggerInterface::class);
$logger->shouldNotReceive('log'); $logger->shouldNotReceive('log');
$applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$fraudnet = Mockery::mock(FraudNet::class); $fraudnet = Mockery::mock(FraudNet::class);
@ -886,7 +833,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -938,15 +884,6 @@ class OrderEndpointTest extends TestCase
->expects('current_context') ->expects('current_context')
->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_NO_SHIPPING)) ->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_NO_SHIPPING))
->andReturn($applicationContext); ->andReturn($applicationContext);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('set_for_order')->andReturnUsing(function ($order, $id) use ($expectedOrder) : bool {
if ($order !== $expectedOrder) {
return false;
}
return strpos($id, 'ppcp') !== false;
});
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true); $subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true);
@ -960,7 +897,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -1051,15 +987,6 @@ class OrderEndpointTest extends TestCase
->expects('current_context') ->expects('current_context')
->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE)) ->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE))
->andReturn($applicationContext); ->andReturn($applicationContext);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$paypalRequestIdRepository
->expects('set_for_order')->andReturnUsing(function ($order, $id) use ($expectedOrder) : bool {
if ($order !== $expectedOrder) {
return false;
}
return strpos($id, 'ppcp') !== false;
});
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true); $subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true);
@ -1073,7 +1000,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -1141,7 +1067,6 @@ class OrderEndpointTest extends TestCase
->expects('current_context') ->expects('current_context')
->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_NO_SHIPPING)) ->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_NO_SHIPPING))
->andReturn($applicationContext); ->andReturn($applicationContext);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true); $subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true);
@ -1155,7 +1080,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -1234,7 +1158,6 @@ class OrderEndpointTest extends TestCase
->expects('current_context') ->expects('current_context')
->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE)) ->with(Matchers::identicalTo(ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE))
->andReturn($applicationContext); ->andReturn($applicationContext);
$paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class);
$subscription_helper = Mockery::mock(SubscriptionHelper::class); $subscription_helper = Mockery::mock(SubscriptionHelper::class);
$subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true); $subscription_helper->shouldReceive('cart_contains_subscription')->andReturn(true);
@ -1248,7 +1171,6 @@ class OrderEndpointTest extends TestCase
$intent, $intent,
$logger, $logger,
$applicationContextRepository, $applicationContextRepository,
$paypalRequestIdRepository,
$subscription_helper, $subscription_helper,
false, false,
$fraudnet $fraudnet
@ -1294,3 +1216,4 @@ class OrderEndpointTest extends TestCase
$testee->create([$purchaseUnit], ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE, $payer); $testee->create([$purchaseUnit], ApplicationContext::SHIPPING_PREFERENCE_GET_FROM_FILE, $payer);
} }
} }

View file

@ -1,58 +0,0 @@
<?php
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Repository;
use Mockery;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
use WooCommerce\PayPalCommerce\TestCase;
use function Brain\Monkey\Functions\when;
class PayPalRequestIdRepositoryTest extends TestCase
{
private $testee;
private $data = [];
public function setUp(): void
{
parent::setUp();
$this->testee = new PayPalRequestIdRepository();
when('get_option')->alias(function () {
return $this->data;
});
when('update_option')->alias(function (string $key, array $data) {
$this->data = $data;
});
}
public function testForOrder()
{
$this->testee->set_for_order($this->createPaypalOrder('42'), 'request1');
$this->testee->set_for_order($this->createPaypalOrder('43'), 'request2');
self::assertEquals('request1', $this->testee->get_for_order($this->createPaypalOrder('42')));
self::assertEquals('request2', $this->testee->get_for_order($this->createPaypalOrder('43')));
self::assertEquals('', $this->testee->get_for_order($this->createPaypalOrder('41')));
}
public function testExpiration()
{
$this->testee->set_for_order($this->createPaypalOrder('42'), 'request1');
$this->data['42']['expiration'] = time() - 1;
$this->testee->set_for_order($this->createPaypalOrder('43'), 'request2');
self::assertEquals('', $this->testee->get_for_order($this->createPaypalOrder('42')));
self::assertEquals('request2', $this->testee->get_for_order($this->createPaypalOrder('43')));
}
private function createPaypalOrder(string $id): Order {
$order = Mockery::mock(Order::class);
$order
->shouldReceive('id')
->andReturn($id);
return $order;
}
}

View file

@ -3,13 +3,13 @@
* Plugin Name: WooCommerce PayPal Payments * Plugin Name: WooCommerce PayPal Payments
* Plugin URI: https://woocommerce.com/products/woocommerce-paypal-payments/ * Plugin URI: https://woocommerce.com/products/woocommerce-paypal-payments/
* Description: PayPal's latest complete payments processing solution. Accept PayPal, Pay Later, credit/debit cards, alternative digital wallets local payment types and bank accounts. Turn on only PayPal options or process a full suite of payment methods. Enable global transaction with extensive currency and country coverage. * Description: PayPal's latest complete payments processing solution. Accept PayPal, Pay Later, credit/debit cards, alternative digital wallets local payment types and bank accounts. Turn on only PayPal options or process a full suite of payment methods. Enable global transaction with extensive currency and country coverage.
* Version: 2.0.1 * Version: 2.0.2
* Author: WooCommerce * Author: WooCommerce
* Author URI: https://woocommerce.com/ * Author URI: https://woocommerce.com/
* License: GPL-2.0 * License: GPL-2.0
* Requires PHP: 7.2 * Requires PHP: 7.2
* WC requires at least: 3.9 * WC requires at least: 3.9
* WC tested up to: 7.1 * WC tested up to: 7.2
* Text Domain: woocommerce-paypal-payments * Text Domain: woocommerce-paypal-payments
* *
* @package WooCommerce\PayPalCommerce * @package WooCommerce\PayPalCommerce
@ -23,7 +23,7 @@ use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
define( 'PAYPAL_API_URL', 'https://api.paypal.com' ); define( 'PAYPAL_API_URL', 'https://api.paypal.com' );
define( 'PAYPAL_SANDBOX_API_URL', 'https://api.sandbox.paypal.com' ); define( 'PAYPAL_SANDBOX_API_URL', 'https://api.sandbox.paypal.com' );
define( 'PAYPAL_INTEGRATION_DATE', '2022-04-13' ); define( 'PAYPAL_INTEGRATION_DATE', '2023-01-11' );
define( 'PPCP_FLAG_SUBSCRIPTION', true ); define( 'PPCP_FLAG_SUBSCRIPTION', true );