diff --git a/src/Services/PaymentService.php b/src/Services/PaymentService.php index e05dd4cc..a8a11b2a 100755 --- a/src/Services/PaymentService.php +++ b/src/Services/PaymentService.php @@ -86,7 +86,7 @@ public function performAuthorization( ): Authorization { $payment = $this->createPayment($paymentType); $paymentType = $payment->getPaymentType(); - $authorization->setSpecialParams($paymentType !== null ? $paymentType->getTransactionParams() : []); + $authorization->setSpecialParams($paymentType?->getTransactionParams() ?? []); $payment->setAuthorization($authorization) ->setCustomer($customer) @@ -157,7 +157,7 @@ public function performCharge(Charge $charge, $paymentType, $customer = null, ?M $paymentType = $payment->getPaymentType(); /** @var Charge $charge */ - $charge->setSpecialParams($paymentType->getTransactionParams() ?? []); + $charge->setSpecialParams($paymentType?->getTransactionParams() ?? []); $payment->addCharge($charge)->setCustomer($customer)->setMetadata($metadata)->setBasket($basket); $this->getResourceService()->createResource($charge); @@ -417,7 +417,7 @@ public function performSca(Sca $sca, $paymentType, $customer = null, ?Metadata $ $paymentType = $payment->getPaymentType(); /** @var Sca $sca */ - $sca->setSpecialParams($paymentType->getTransactionParams() ?? []); + $sca->setSpecialParams($paymentType?->getTransactionParams() ?? []); $payment->setSca($sca)->setCustomer($customer)->setMetadata($metadata)->setBasket($basket); $this->getResourceService()->createResource($sca); diff --git a/test/unit/Services/PaymentServiceTest.php b/test/unit/Services/PaymentServiceTest.php index f73cb6c8..ea3441cc 100755 --- a/test/unit/Services/PaymentServiceTest.php +++ b/test/unit/Services/PaymentServiceTest.php @@ -31,6 +31,7 @@ use UnzerSDK\Resources\TransactionTypes\Cancellation; use UnzerSDK\Resources\TransactionTypes\Charge; use UnzerSDK\Resources\TransactionTypes\Payout; +use UnzerSDK\Resources\TransactionTypes\Sca; use UnzerSDK\Resources\TransactionTypes\Shipment; use UnzerSDK\Services\CancelService; use UnzerSDK\Services\PaymentService; @@ -283,6 +284,42 @@ public function chargePaymentShouldSetArgumentsInNewChargeObject(): void $this->assertEquals([$returnedCharge], $payment->getCharges()); } + /** + * Verify performCharge does not throw a fatal error when the payment type resolves to null. + * + * @test + */ + public function performChargeWithNullPaymentTypeShouldNotThrowFatalError(): void + { + $resourceSrvMock = $this->getMockBuilder(ResourceService::class)->disableOriginalConstructor()->setMethods(['createResource'])->getMock(); + $paymentSrv = (new Unzer('s-priv-123'))->setResourceService($resourceSrvMock)->getPaymentService(); + + try { + $paymentSrv->performCharge(new Charge(), null); + $this->assertTrue(true); + } catch (\Throwable $e) { + $this->fail('performCharge threw an unexpected error: ' . $e->getMessage()); + } + } + + /** + * Verify performSca does not throw a fatal error when the payment type resolves to null. + * + * @test + */ + public function performScaWithNullPaymentTypeShouldNotThrowFatalError(): void + { + $resourceSrvMock = $this->getMockBuilder(ResourceService::class)->disableOriginalConstructor()->setMethods(['createResource'])->getMock(); + $paymentSrv = (new Unzer('s-priv-123'))->setResourceService($resourceSrvMock)->getPaymentService(); + + try { + $paymentSrv->performSca(new Sca(), null); + $this->assertTrue(true); + } catch (\Throwable $e) { + $this->fail('performSca threw an unexpected error: ' . $e->getMessage()); + } + } + // //