getOrdersController(); self::$paymentsController = $client->getPaymentsController(); } public function testCreateOrder(): Order { $request = [ 'body' => OrderRequestBuilder::init( CheckoutPaymentIntent::AUTHORIZE, [ PurchaseUnitRequestBuilder::init( AmountWithBreakdownBuilder::init( 'USD', '25.00' ) ->breakdown( AmountBreakdownBuilder::init() ->itemTotal( MoneyBuilder::init( 'USD', '25.00' )->build() ) ->shipping( MoneyBuilder::init( 'USD', '0' )->build() ) ->taxTotal( MoneyBuilder::init( 'USD', '0' )->build() ) ->build() )->build() ) ->description('Clothing Shop') ->items([ ItemBuilder::init( 'Levis 501', MoneyBuilder::init( 'USD', '25.00' )->build(), '1' ) ->tax( MoneyBuilder::init( 'USD', '0.00' )->build() ) ->sku('5158936') ->build() ]) ->build() ] ) ->paymentSource( PaymentSourceBuilder::init() ->paypal( PayPalWalletBuilder::init() ->experienceContext( PayPalWalletExperienceContextBuilder::init() ->locale('en-US') ->returnUrl('https://example.com/returnUrl') ->cancelUrl('https://example.com/cancelUrl') ->landingPage(PayPalExperienceLandingPage::LOGIN) ->build() ) ->build() ) ->build() ) ->build(), 'payPalRequestId' => strval(rand(1, 99999999999)) ]; $response = self::$ordersController->ordersCreate($request); $this->assertTrue($response->isSuccess()); $this->assertEquals(200, $response->getStatusCode()); return $response->getResult(); } /** * @depends testCreateOrder * @throws Exception */ public function testCompletePayment(Order $orderDetail): void { $links = $orderDetail->getLinks(); $url = null; if (isset($links)) { $url = $links[1]->getHref(); } $this->assertNotNull($url); WebDriverUtilities::completePayment($url ?? ''); } /** * @depends testCreateOrder * @depends testCompletePayment */ public function testAuthorizeOrder(Order $orderDetail): OrderAuthorizeResponse { $request = [ 'id' => $orderDetail->getId(), 'payPalRequestId' => strval(rand(1, 99999999999)), 'prefer' => 'return=representation' ]; $response = self::$ordersController->ordersAuthorize($request); $this->assertTrue($response->isSuccess()); $this->assertEquals(201, $response->getStatusCode()); return $response->getResult(); } /** * @depends testAuthorizeOrder */ public function testCaptureAuthorization(OrderAuthorizeResponse $authorizeResponse): void { $purchaseUnits = $authorizeResponse->getPurchaseUnits(); $authorizationId = null; if (isset($purchaseUnits)) { $authorizations = $purchaseUnits[0]->getPayments()->getAuthorizations(); if (isset($authorizations)) { $authorizationId = $authorizations[0]->getId(); } } $this->assertNotNull($authorizationId); $request = [ 'authorizationId' => $authorizationId, 'prefer' => 'return=representation' ]; $response = self::$paymentsController->authorizationsCapture($request); $this->assertTrue($response->isSuccess()); $this->assertEquals(201, $response->getStatusCode()); } }