Do not enter the checkout continuation state for dcc

it supposed to be used only for PayPal payments started on the product or cart pages
This commit is contained in:
Alex P 2022-06-22 17:22:40 +03:00
parent d80c051141
commit 5e547c79cc
2 changed files with 26 additions and 3 deletions

View file

@ -234,7 +234,6 @@ class SmartButton implements SmartButtonInterface {
if (
$this->settings->has( 'dcc_enabled' )
&& $this->settings->get( 'dcc_enabled' )
&& ! $this->session_handler->order()
) {
add_action(
$this->checkout_dcc_button_renderer_hook(),
@ -1073,7 +1072,7 @@ class SmartButton implements SmartButtonInterface {
if ( is_cart() ) {
$context = 'cart';
}
if ( is_checkout() && ! $this->session_handler->order() ) {
if ( is_checkout() && ! $this->is_paypal_continuation() ) {
$context = 'checkout';
}
if ( is_checkout_pay_page() ) {
@ -1082,6 +1081,23 @@ class SmartButton implements SmartButtonInterface {
return $context;
}
/**
* Checks if PayPal payment was already initiated (on the product or cart pages).
*
* @return bool
*/
private function is_paypal_continuation(): bool {
$order = $this->session_handler->order();
if ( ! $order ) {
return false;
}
$source = $order->payment_source();
if ( $source && $source->card() ) {
return false; // Ignore for DCC.
}
return true;
}
/**
* Whether DCC is enabled or not.
*

View file

@ -59,10 +59,17 @@ class CancelController {
) { // Input var ok.
$this->session_handler->destroy_session_data();
}
if ( ! $this->session_handler->order() ) {
$order = $this->session_handler->order();
if ( ! $order ) {
return;
}
$source = $order->payment_source();
if ( $source && $source->card() ) {
return; // Ignore for DCC.
}
$url = add_query_arg( array( $param_name => wp_create_nonce( $nonce ) ), wc_get_checkout_url() );
add_action(
'woocommerce_review_order_after_submit',