diff --git a/src/Verifier/PaymentAmountVerifier.php b/src/Verifier/PaymentAmountVerifier.php index 1d0795c6..c68429dd 100644 --- a/src/Verifier/PaymentAmountVerifier.php +++ b/src/Verifier/PaymentAmountVerifier.php @@ -41,7 +41,7 @@ private function getTotalPaymentAmountFromPaypal(PaymentInterface $payment, arra foreach ($paypalOrderDetails['purchase_units'] as $unit) { $stringAmount = $unit['amount']['value'] ?? '0'; - $totalAmount += (int) ($stringAmount * 100); + $totalAmount += (int) round($stringAmount * 100); } return $totalAmount; diff --git a/tests/Unit/PaymentAmountVerifierTest.php b/tests/Unit/PaymentAmountVerifierTest.php index 240ff369..b0a00c90 100644 --- a/tests/Unit/PaymentAmountVerifierTest.php +++ b/tests/Unit/PaymentAmountVerifierTest.php @@ -47,6 +47,24 @@ public function testVerifySucceedsWhenAmountsMatch(): void $this->addToAssertionCount(1); } + public function testVerifySucceedsWhenAmountsMatchWithRoundedValue(): void + { + $payment = $this->createMock(PaymentInterface::class); + $order = $this->createMock(OrderInterface::class); + $payment->method('getOrder')->willReturn($order); + $order->method('getTotal')->willReturn(225845); + + $paypalOrderDetails = [ + 'purchase_units' => [ + ['amount' => ['value' => '2258.45']], + ], + ]; + + $this->verifier->verify($payment, $paypalOrderDetails); + + $this->addToAssertionCount(1); + } + public function testVerifyThrowsExceptionWhenAmountsDoNotMatch(): void { $payment = $this->createMock(PaymentInterface::class);