Files
2026-04-28 15:13:50 +02:00

95 lines
3.8 KiB
PHP

<?php
/**
* Class Create_And_Confirm_Intention_Test
*
* @package Checkout_Service
*/
namespace WCPay\WooPay\Service;
use WC_Payments_Features;
use WCPay\Core\Server\Request;
use WCPay\Core\Server\Request\WooPay_Create_And_Confirm_Intention;
use WCPay\Core\Server\Request\WooPay_Create_And_Confirm_Setup_Intention;
use WCPay\Payment_Information;
/**
* Checkout service class.
*/
class Checkout_Service {
/**
* Create woopay request from base create and confirm request.
*
* @param Request $base_request Base request.
* @param Payment_Information $payment_information Using saved payment method.
*
* @return WooPay_Create_And_Confirm_Intention
* @throws \WCPay\Core\Exceptions\Server\Request\Extend_Request_Exception
*/
public function create_intention_request( Request $base_request, Payment_Information $payment_information ) {
$request = WooPay_Create_And_Confirm_Intention::extend( $base_request );
$request->set_has_woopay_subscription( '1' === $payment_information->get_order()->get_meta( '_woopay_has_subscription' ) );
$request->set_save_payment_method_to_platform( $payment_information->should_save_payment_method_to_platform() );
$request->set_is_platform_payment_method( $this->is_platform_payment_method( $payment_information ) );
return $request;
}
/**
* Create woopay setup and confirm intent request from base create and confirm request.
*
* @param Request $base_request Base request.
* @param Payment_Information $payment_information Using saved payment method.
* @param bool $save_in_platform_account Should save in platform account.
* @param bool $save_payment_method_to_platform Should save in platform.
*
* @return WooPay_Create_And_Confirm_Setup_Intention
* @throws \WCPay\Core\Exceptions\Server\Request\Extend_Request_Exception
*/
public function create_and_confirm_setup_intention_request( Request $base_request, Payment_Information $payment_information, bool $save_in_platform_account, bool $save_payment_method_to_platform ) {
$request = WooPay_Create_And_Confirm_Setup_Intention::extend( $base_request );
$request->set_save_in_platform_account( $save_in_platform_account );
$request->set_save_payment_method_to_platform( $save_payment_method_to_platform );
$request->set_is_platform_payment_method( $this->is_platform_payment_method( $payment_information ) );
return $request;
}
/**
* Determine if current payment method is a platform payment method.
*
* @param Payment_Information $payment_information Payment information object used to determine if a saved payment method is being used as well as helps to determine
* if stripe platform account should be used or not.
*
* @return boolean True if it is a platform payment method.
*/
public function is_platform_payment_method( Payment_Information $payment_information ) {
// Return false for express checkout method.
if ( isset( $_POST['express_payment_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
return false;
}
$should_use_stripe_platform = \WC_Payments::get_payment_gateway_by_id( $payment_information->get_payment_method_stripe_id() )->should_use_stripe_platform_on_checkout_page();
// Make sure the payment method being charged was created in the platform.
if (
! $payment_information->is_using_saved_payment_method() &&
$should_use_stripe_platform
) {
// This payment method was created under the platform account.
return true;
}
return false;
}
/**
* Load filters.
*
* @return void
*/
public function init() {
add_filter( 'wcpay_create_and_confirm_intent_request', [ $this, 'create_intention_request' ], 10, 3 );
add_filter( 'wcpay_create_and_confirm_setup_intention_request', [ $this, 'create_and_confirm_setup_intention_request' ], 10, 4 );
}
}