diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index ad9c5be7e..c9c5d7cc1 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -570,7 +570,8 @@ return array( $order_helper, $container->get( 'api.factory.purchase-unit' ), $container->get( 'api.factory.payer' ), - $container->get( 'api.factory.shipping-preference' ) + $container->get( 'api.factory.shipping-preference' ), + $container->get( 'wcgateway.builder.experience-context' ) ); }, 'wcgateway.processor.refunds' => static function ( ContainerInterface $container ): RefundProcessor { diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index f17dcfbd1..fccbf3016 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -14,9 +14,12 @@ use Psr\Log\LoggerInterface; use WC_Order; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\ApplicationContext; +use WooCommerce\PayPalCommerce\ApiClient\Entity\ExperienceContext; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; +use WooCommerce\PayPalCommerce\ApiClient\Entity\PaymentSource; use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; +use WooCommerce\PayPalCommerce\ApiClient\Factory\ExperienceContextBuilder; use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\PayerFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\PurchaseUnitFactory; @@ -143,6 +146,11 @@ class OrderProcessor { */ private $restore_order_data = array(); + /** + * The ExperienceContextBuilder. + */ + private ExperienceContextBuilder $experience_context_builder; + /** * OrderProcessor constructor. * @@ -159,6 +167,7 @@ class OrderProcessor { * @param PurchaseUnitFactory $purchase_unit_factory The PurchaseUnit factory. * @param PayerFactory $payer_factory The payer factory. * @param ShippingPreferenceFactory $shipping_preference_factory The shipping_preference factory. + * @param ExperienceContextBuilder $experience_context_builder The ExperienceContextBuilder. */ public function __construct( SessionHandler $session_handler, @@ -173,7 +182,8 @@ class OrderProcessor { OrderHelper $order_helper, PurchaseUnitFactory $purchase_unit_factory, PayerFactory $payer_factory, - ShippingPreferenceFactory $shipping_preference_factory + ShippingPreferenceFactory $shipping_preference_factory, + ExperienceContextBuilder $experience_context_builder ) { $this->session_handler = $session_handler; @@ -189,6 +199,7 @@ class OrderProcessor { $this->purchase_unit_factory = $purchase_unit_factory; $this->payer_factory = $payer_factory; $this->shipping_preference_factory = $shipping_preference_factory; + $this->experience_context_builder = $experience_context_builder; } /** @@ -317,7 +328,17 @@ class OrderProcessor { array( $pu ), $shipping_preference, $this->payer_factory->from_wc_order( $wc_order ), - ApplicationContext::USER_ACTION_PAY_NOW + ApplicationContext::USER_ACTION_PAY_NOW, + '', + array(), + new PaymentSource( + 'paypal', + (object) array( + 'experience_context' => $this->experience_context_builder + ->with_default_paypal_config( $shipping_preference, ExperienceContext::USER_ACTION_PAY_NOW ) + ->build()->to_array(), + ) + ) ); return $order; diff --git a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php index d7b8c2ed0..32527eff5 100644 --- a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php +++ b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\WcGateway\Processor; use Exception; +use WooCommerce\PayPalCommerce\ApiClient\Factory\ExperienceContextBuilder; use WooCommerce\PayPalCommerce\ApiClient\Factory\PayerFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\PurchaseUnitFactory; use WooCommerce\PayPalCommerce\ApiClient\Factory\ShippingPreferenceFactory; @@ -150,7 +151,8 @@ class OrderProcessorTest extends TestCase $order_helper, Mockery::mock(PurchaseUnitFactory::class), Mockery::mock(PayerFactory::class), - Mockery::mock(ShippingPreferenceFactory::class) + Mockery::mock(ShippingPreferenceFactory::class), + Mockery::mock(ExperienceContextBuilder::class) ); $wcOrder @@ -281,7 +283,8 @@ class OrderProcessorTest extends TestCase $order_helper, Mockery::mock(PurchaseUnitFactory::class), Mockery::mock(PayerFactory::class), - Mockery::mock(ShippingPreferenceFactory::class) + Mockery::mock(ShippingPreferenceFactory::class), + Mockery::mock(ExperienceContextBuilder::class) ); $wcOrder @@ -394,7 +397,8 @@ class OrderProcessorTest extends TestCase $order_helper, Mockery::mock(PurchaseUnitFactory::class), Mockery::mock(PayerFactory::class), - Mockery::mock(ShippingPreferenceFactory::class) + Mockery::mock(ShippingPreferenceFactory::class), + Mockery::mock(ExperienceContextBuilder::class) ); $wcOrder