Use WC order creator on approve order

This commit is contained in:
Narek Zakarian 2024-05-14 15:29:58 +04:00
parent 5a09aba17c
commit 1d729e3572
No known key found for this signature in database
GPG key ID: 07AFD7E7A9C164A7

View file

@ -14,13 +14,15 @@ use Exception;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus;
use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource;
use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException; use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException;
use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies; use WooCommerce\PayPalCommerce\ApiClient\Helper\DccApplies;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper; use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper;
use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException; use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException;
use WooCommerce\PayPalCommerce\Button\Helper\ContextTrait;
use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure; use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure;
use WooCommerce\PayPalCommerce\Button\Helper\WooCommerceOrderCreator;
use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\Session\SessionHandler;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
/** /**
@ -28,6 +30,8 @@ use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
*/ */
class ApproveOrderEndpoint implements EndpointInterface { class ApproveOrderEndpoint implements EndpointInterface {
use ContextTrait;
const ENDPOINT = 'ppc-approve-order'; const ENDPOINT = 'ppc-approve-order';
/** /**
@ -79,6 +83,27 @@ class ApproveOrderEndpoint implements EndpointInterface {
*/ */
protected $order_helper; protected $order_helper;
/**
* Whether the final review is enabled.
*
* @var bool
*/
protected $final_review_enabled;
/**
* The WC gateway.
*
* @var PayPalGateway
*/
protected $gateway;
/**
* The WooCommerce order creator.
*
* @var WooCommerceOrderCreator
*/
protected $wc_order_creator;
/** /**
* The logger. * The logger.
* *
@ -89,14 +114,17 @@ class ApproveOrderEndpoint implements EndpointInterface {
/** /**
* ApproveOrderEndpoint constructor. * ApproveOrderEndpoint constructor.
* *
* @param RequestData $request_data The request data helper. * @param RequestData $request_data The request data helper.
* @param OrderEndpoint $order_endpoint The order endpoint. * @param OrderEndpoint $order_endpoint The order endpoint.
* @param SessionHandler $session_handler The session handler. * @param SessionHandler $session_handler The session handler.
* @param ThreeDSecure $three_d_secure The 3d secure helper object. * @param ThreeDSecure $three_d_secure The 3d secure helper object.
* @param Settings $settings The settings. * @param Settings $settings The settings.
* @param DccApplies $dcc_applies The DCC applies object. * @param DccApplies $dcc_applies The DCC applies object.
* @param OrderHelper $order_helper The order helper. * @param OrderHelper $order_helper The order helper.
* @param LoggerInterface $logger The logger. * @param bool $final_review_enabled Whether the final review is enabled.
* @param PayPalGateway $gateway The WC gateway.
* @param WooCommerceOrderCreator $wc_order_creator The WooCommerce order creator.
* @param LoggerInterface $logger The logger.
*/ */
public function __construct( public function __construct(
RequestData $request_data, RequestData $request_data,
@ -106,17 +134,23 @@ class ApproveOrderEndpoint implements EndpointInterface {
Settings $settings, Settings $settings,
DccApplies $dcc_applies, DccApplies $dcc_applies,
OrderHelper $order_helper, OrderHelper $order_helper,
bool $final_review_enabled,
PayPalGateway $gateway,
WooCommerceOrderCreator $wc_order_creator,
LoggerInterface $logger LoggerInterface $logger
) { ) {
$this->request_data = $request_data; $this->request_data = $request_data;
$this->api_endpoint = $order_endpoint; $this->api_endpoint = $order_endpoint;
$this->session_handler = $session_handler; $this->session_handler = $session_handler;
$this->threed_secure = $three_d_secure; $this->threed_secure = $three_d_secure;
$this->settings = $settings; $this->settings = $settings;
$this->dcc_applies = $dcc_applies; $this->dcc_applies = $dcc_applies;
$this->order_helper = $order_helper; $this->order_helper = $order_helper;
$this->logger = $logger; $this->final_review_enabled = $final_review_enabled;
$this->gateway = $gateway;
$this->wc_order_creator = $wc_order_creator;
$this->logger = $logger;
} }
/** /**
@ -182,6 +216,7 @@ class ApproveOrderEndpoint implements EndpointInterface {
); );
} }
$this->session_handler->replace_order( $order ); $this->session_handler->replace_order( $order );
wp_send_json_success(); wp_send_json_success();
} }
@ -200,6 +235,14 @@ class ApproveOrderEndpoint implements EndpointInterface {
$this->session_handler->replace_funding_source( $funding_source ); $this->session_handler->replace_funding_source( $funding_source );
$this->session_handler->replace_order( $order ); $this->session_handler->replace_order( $order );
if ( ! $this->final_review_enabled && ! $this->is_checkout() ) {
$wc_order = $this->wc_order_creator->create_from_paypal_order( $order, WC()->cart->get_cart() );
$this->gateway->process_payment( $wc_order->get_id() );
$order_received_url = $wc_order->get_checkout_order_received_url();
wp_send_json_success( array( 'order_received_url' => $order_received_url ) );
}
wp_send_json_success(); wp_send_json_success();
return true; return true;
} catch ( Exception $error ) { } catch ( Exception $error ) {