diff --git a/composer.json b/composer.json index 3da8522e..b354b026 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,8 @@ "require": { "unzerdev/php-sdk": "^v3.4.1", "webmozart/path-util": "^2.3.0", - "guzzlehttp/guzzle": "^7.7" + "guzzlehttp/guzzle": "^7.7", + "ext-json": "*" }, "require-dev": { "squizlabs/php_codesniffer": "3.*", diff --git a/src/PaymentExtensions/UnzerPayment.php b/src/PaymentExtensions/UnzerPayment.php index fd49f474..908bb0a6 100644 --- a/src/PaymentExtensions/UnzerPayment.php +++ b/src/PaymentExtensions/UnzerPayment.php @@ -20,6 +20,7 @@ use OxidSolutionCatalysts\Unzer\Service\Unzer as UnzerService; use OxidSolutionCatalysts\Unzer\Service\UnzerSDKLoader; use OxidSolutionCatalysts\Unzer\Traits\ServiceContainer; +use UnzerSDK\Constants\RecurrenceTypes; use UnzerSDK\Exceptions\UnzerApiException; use UnzerSDK\Resources\Basket as UnzerResourceBasket; use UnzerSDK\Resources\Customer; @@ -156,12 +157,11 @@ public function execute( $userModel->save(); } - if ($paymentType instanceof UnzerSDKPaymentTypeCard || $paymentType instanceof Paypal) { - $savePayment = $request->getRequestParameter('oscunzersavepayment'); - if ($savePayment && $this->existsInSavedPaymentsList($userModel)) { - $savePayment = false; - } - $session->setVariable('oscunzersavepayment', $savePayment); + if ($this->isSafePaymentClickedByUserInRequest($paymentType)) { + $session->setVariable( + 'oscunzersavepayment', + $this->existsInSavedPaymentsList($userModel) ? $request->getRequestParameter('oscunzersavepayment') : false + ); } if ($userModel->getId()) { @@ -324,10 +324,11 @@ public function existsInSavedPaymentsList(User $user): bool if ($currentPayment) { $currentPaymentType = $currentPayment->getPaymentType(); foreach ($savedUserPayments as $savedPayment) { - if ($currentPaymentType instanceof UnzerSDKPaymentTypeCard) { - if ($this->areCardsEqual($currentPaymentType, $savedPayment)) { + if ( + $currentPaymentType instanceof UnzerSDKPaymentTypeCard + && $this->areCardsEqual($currentPaymentType, $savedPayment) + ) { return true; - } } if ( ($currentPaymentType instanceof Paypal) && @@ -385,7 +386,11 @@ private function performDefaultTransaction( $customer, $this->unzerOrderId, $this->unzerService->getShopMetadata($this->paymentMethod), - $uzrBasket + $uzrBasket, + null, + null, + null, + $this->isSafePaymentClickedByUserInRequest($paymentType) ? RecurrenceTypes::ONE_CLICK : null ); } @@ -424,7 +429,12 @@ private function performTransactionForSavedPayment( true, null, null, - \UnzerSDK\Constants\RecurrenceTypes::ONE_CLICK + RecurrenceTypes::ONE_CLICK ); } + + private function isSafePaymentClickedByUserInRequest(BasePaymentType $paymentType) { + return ($paymentType instanceof UnzerSDKPaymentTypeCard || $paymentType instanceof Paypal) + && Registry::getRequest()->getRequestParameter('oscunzersavepayment'); + } }