From 4f977bdee9048327381f26aff60ad77302ed2184 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Mon, 3 Oct 2022 12:31:21 +0200 Subject: [PATCH 1/4] Revert vault failed vaule and use order add meta instead of add update post meta --- .../ppcp-vaulting/src/PaymentTokenChecker.php | 1 + modules/ppcp-vaulting/src/VaultingModule.php | 30 ++++--------------- 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/modules/ppcp-vaulting/src/PaymentTokenChecker.php b/modules/ppcp-vaulting/src/PaymentTokenChecker.php index e798ec139..581270c28 100644 --- a/modules/ppcp-vaulting/src/PaymentTokenChecker.php +++ b/modules/ppcp-vaulting/src/PaymentTokenChecker.php @@ -143,6 +143,7 @@ class PaymentTokenChecker { try { $subscription_behavior_when_fails = $this->settings->get( 'subscription_behavior_when_vault_fails' ); + $wc_order->add_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); } catch ( NotFoundException $exception ) { return; } diff --git a/modules/ppcp-vaulting/src/VaultingModule.php b/modules/ppcp-vaulting/src/VaultingModule.php index a680d580c..d83aecd6a 100644 --- a/modules/ppcp-vaulting/src/VaultingModule.php +++ b/modules/ppcp-vaulting/src/VaultingModule.php @@ -178,25 +178,15 @@ class VaultingModule implements ModuleInterface { */ $logger = $container->get( 'woocommerce.logger.woocommerce' ); - /** - * The Gateway settings. - * - * @var Settings $settings - */ - $settings = $container->get( 'wcgateway.settings' ); - - $vault_failed = get_post_meta( $order->get_id(), PaymentTokenChecker::VAULTING_FAILED_META_KEY ); + $vault_failed = $order->get_meta( PaymentTokenChecker::VAULTING_FAILED_META_KEY ); if ( $subscription_helper->has_subscription( $order->get_id() ) && ! empty( $vault_failed ) ) { - $subscription_behavior_when_vault_fails_setting_name = 'subscription_behavior_when_vault_fails'; - $subscription_behavior_when_vault_fails = $settings->get( $subscription_behavior_when_vault_fails_setting_name ); - $logger->info( "Adding vaulting failure info to email for order #{$order->get_id()}." ); - if ( $subscription_behavior_when_vault_fails === 'void_auth' ) { + if ( $vault_failed === 'void_auth' ) { echo wp_kses_post( '

' . __( 'The subscription payment failed because the payment method could not be saved. Please try again with a different payment method.', 'woocommerce-paypal-payments' ) . '

' ); } - if ( $subscription_behavior_when_vault_fails === 'capture_auth' ) { + if ( $vault_failed === 'capture_auth' ) { echo wp_kses_post( '

' . __( 'The subscription has been activated, but the payment method could not be saved. Please contact the merchant to save a payment method for automatic subscription renewal payments.', 'woocommerce-paypal-payments' ) . '

' ); } } @@ -220,21 +210,11 @@ class VaultingModule implements ModuleInterface { */ $logger = $container->get( 'woocommerce.logger.woocommerce' ); - /** - * The Gateway settings. - * - * @var Settings $settings - */ - $settings = $container->get( 'wcgateway.settings' ); - - $vault_failed = get_post_meta( $order->get_id(), PaymentTokenChecker::VAULTING_FAILED_META_KEY ); + $vault_failed = $order->get_meta( PaymentTokenChecker::VAULTING_FAILED_META_KEY ); if ( $subscription_helper->has_subscription( $order->get_id() ) && ! empty( $vault_failed ) ) { - $subscription_behavior_when_vault_fails_setting_name = 'subscription_behavior_when_vault_fails'; - $subscription_behavior_when_vault_fails = $settings->get( $subscription_behavior_when_vault_fails_setting_name ); - $logger->info( "Changing subscription auto-renewal status for order #{$order->get_id()}." ); - if ( $subscription_behavior_when_vault_fails === 'capture_auth' ) { + if ( $vault_failed === 'capture_auth' ) { $subscriptions = function_exists( 'wcs_get_subscriptions_for_order' ) ? wcs_get_subscriptions_for_order( $order->get_id() ) : array(); foreach ( $subscriptions as $subscription ) { $subscription->set_requires_manual_renewal( true ); From fd478318a2d5f320d5a6b59000f5dfe15edb7ef4 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Mon, 3 Oct 2022 12:43:54 +0200 Subject: [PATCH 2/4] Use update instead of add for wc meta --- modules/ppcp-vaulting/src/PaymentTokenChecker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-vaulting/src/PaymentTokenChecker.php b/modules/ppcp-vaulting/src/PaymentTokenChecker.php index 581270c28..d937b6edf 100644 --- a/modules/ppcp-vaulting/src/PaymentTokenChecker.php +++ b/modules/ppcp-vaulting/src/PaymentTokenChecker.php @@ -143,7 +143,7 @@ class PaymentTokenChecker { try { $subscription_behavior_when_fails = $this->settings->get( 'subscription_behavior_when_vault_fails' ); - $wc_order->add_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); + $wc_order->update_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); } catch ( NotFoundException $exception ) { return; } From 7d541812e87d070824c906b585eceefce6f4acf8 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Mon, 3 Oct 2022 14:16:33 +0200 Subject: [PATCH 3/4] Add save meta data for order --- modules/ppcp-vaulting/src/PaymentTokenChecker.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/ppcp-vaulting/src/PaymentTokenChecker.php b/modules/ppcp-vaulting/src/PaymentTokenChecker.php index d937b6edf..2bad12114 100644 --- a/modules/ppcp-vaulting/src/PaymentTokenChecker.php +++ b/modules/ppcp-vaulting/src/PaymentTokenChecker.php @@ -144,6 +144,7 @@ class PaymentTokenChecker { try { $subscription_behavior_when_fails = $this->settings->get( 'subscription_behavior_when_vault_fails' ); $wc_order->update_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); + $wc_order->save_meta_data(); } catch ( NotFoundException $exception ) { return; } From 5d875487b089de765d45e218e1b6b1357c62c641 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Mon, 3 Oct 2022 15:12:18 +0200 Subject: [PATCH 4/4] Set previous failure behavior value if setting not saved yet --- modules/ppcp-vaulting/src/PaymentTokenChecker.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-vaulting/src/PaymentTokenChecker.php b/modules/ppcp-vaulting/src/PaymentTokenChecker.php index 2bad12114..cd57e9426 100644 --- a/modules/ppcp-vaulting/src/PaymentTokenChecker.php +++ b/modules/ppcp-vaulting/src/PaymentTokenChecker.php @@ -143,12 +143,13 @@ class PaymentTokenChecker { try { $subscription_behavior_when_fails = $this->settings->get( 'subscription_behavior_when_vault_fails' ); - $wc_order->update_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); - $wc_order->save_meta_data(); } catch ( NotFoundException $exception ) { - return; + $subscription_behavior_when_fails = 'void_auth'; } + $wc_order->update_meta_data( self::VAULTING_FAILED_META_KEY, $subscription_behavior_when_fails ); + $wc_order->save_meta_data(); + switch ( $subscription_behavior_when_fails ) { case 'void_auth': $order = $this->order_repository->for_wc_order( $wc_order );