From 268ab3a27a55777328ad1abfb2b618e72149dd53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCsken?= Date: Wed, 13 Nov 2024 15:04:34 +0100 Subject: [PATCH 1/2] Added saving of credentials and payee info --- .../Endpoint/ConnectManualRestEndpoint.php | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php index af81b90ca..5b7647aa9 100644 --- a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php @@ -16,6 +16,7 @@ use stdClass; use WooCommerce\PayPalCommerce\ApiClient\Authentication\PayPalBearer; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\Orders; use WooCommerce\PayPalCommerce\ApiClient\Helper\InMemoryCache; +use WooCommerce\PayPalCommerce\Settings\Data\GeneralSettings; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\WcGateway\Exception\NotFoundException; use WP_REST_Server; @@ -134,6 +135,18 @@ class ConnectManualRestEndpoint extends RestEndpoint { ); } + $settings = new GeneralSettings(); + if ( $use_sandbox ) { + $settings->set_is_sandbox( true ); + $settings->set_sandbox_client_id( $client_id ); + $settings->set_sandbox_client_secret( $client_secret ); + } else { + $settings->set_is_sandbox( false ); + $settings->set_live_client_id( $client_id ); + $settings->set_live_client_secret( $client_secret ); + } + $settings->save(); + try { $payee = $this->request_payee( $client_id, $client_secret, $use_sandbox ); } catch ( Exception $exception ) { @@ -146,6 +159,15 @@ class ConnectManualRestEndpoint extends RestEndpoint { } + if ( $use_sandbox ) { + $settings->set_sandbox_merchant_id( $payee->merchant_id ); + $settings->set_sandbox_merchant_email( $payee->email_address ); + } else { + $settings->set_live_merchant_id( $payee->merchant_id ); + $settings->set_live_merchant_email( $payee->email_address ); + } + $settings->save(); + $result = array( 'merchantId' => $payee->merchant_id, 'email' => $payee->email_address, From c13680b7f5ae2d992b2c6bd30da13ed88d16d50a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCsken?= Date: Fri, 15 Nov 2024 09:01:49 +0100 Subject: [PATCH 2/2] Use DI for General Settings and store only after verification --- modules/ppcp-settings/services.php | 7 +++- .../Endpoint/ConnectManualRestEndpoint.php | 40 ++++++++++--------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/modules/ppcp-settings/services.php b/modules/ppcp-settings/services.php index 80df22370..5b8b5e282 100644 --- a/modules/ppcp-settings/services.php +++ b/modules/ppcp-settings/services.php @@ -9,6 +9,7 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\Settings; +use WooCommerce\PayPalCommerce\Settings\Data\GeneralSettings; use WooCommerce\PayPalCommerce\Settings\Endpoint\ConnectManualRestEndpoint; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\Settings\Endpoint\OnboardingRestEndpoint; @@ -50,7 +51,8 @@ return array( return new ConnectManualRestEndpoint( $container->get( 'api.paypal-host-production' ), $container->get( 'api.paypal-host-sandbox' ), - $container->get( 'woocommerce.logger.woocommerce' ) + $container->get( 'woocommerce.logger.woocommerce' ), + $container->get( 'settings.general' ) ); }, 'settings.casual-selling.supported-countries' => static function ( ContainerInterface $container ) : array { @@ -109,4 +111,7 @@ return array( return in_array( $country, $eligible_countries, true ); }, + 'settings.general' => static function ( ContainerInterface $container ) : GeneralSettings { + return new GeneralSettings(); + }, ); diff --git a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php index 5b7647aa9..23f90589e 100644 --- a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php @@ -56,6 +56,13 @@ class ConnectManualRestEndpoint extends RestEndpoint { */ protected $rest_base = 'connect_manual'; + /** + * Settings instance. + * + * @var GeneralSettings + */ + private $settings = null; + /** * Field mapping for request. * @@ -82,16 +89,19 @@ class ConnectManualRestEndpoint extends RestEndpoint { * @param string $live_host The API host for the live mode. * @param string $sandbox_host The API host for the sandbox mode. * @param LoggerInterface $logger The logger. + * @param GeneralSettings $settings Settings instance. */ public function __construct( string $live_host, string $sandbox_host, - LoggerInterface $logger + LoggerInterface $logger, + GeneralSettings $settings ) { $this->live_host = $live_host; $this->sandbox_host = $sandbox_host; $this->logger = $logger; + $this->settings = $settings; } /** @@ -135,18 +145,6 @@ class ConnectManualRestEndpoint extends RestEndpoint { ); } - $settings = new GeneralSettings(); - if ( $use_sandbox ) { - $settings->set_is_sandbox( true ); - $settings->set_sandbox_client_id( $client_id ); - $settings->set_sandbox_client_secret( $client_secret ); - } else { - $settings->set_is_sandbox( false ); - $settings->set_live_client_id( $client_id ); - $settings->set_live_client_secret( $client_secret ); - } - $settings->save(); - try { $payee = $this->request_payee( $client_id, $client_secret, $use_sandbox ); } catch ( Exception $exception ) { @@ -160,13 +158,19 @@ class ConnectManualRestEndpoint extends RestEndpoint { } if ( $use_sandbox ) { - $settings->set_sandbox_merchant_id( $payee->merchant_id ); - $settings->set_sandbox_merchant_email( $payee->email_address ); + $this->settings->set_is_sandbox( true ); + $this->settings->set_sandbox_client_id( $client_id ); + $this->settings->set_sandbox_client_secret( $client_secret ); + $this->settings->set_sandbox_merchant_id( $payee->merchant_id ); + $this->settings->set_sandbox_merchant_email( $payee->email_address ); } else { - $settings->set_live_merchant_id( $payee->merchant_id ); - $settings->set_live_merchant_email( $payee->email_address ); + $this->settings->set_is_sandbox( false ); + $this->settings->set_live_client_id( $client_id ); + $this->settings->set_live_client_secret( $client_secret ); + $this->settings->set_live_merchant_id( $payee->merchant_id ); + $this->settings->set_live_merchant_email( $payee->email_address ); } - $settings->save(); + $this->settings->save(); $result = array( 'merchantId' => $payee->merchant_id,