Skip to content

Commit

Permalink
Fixed redirect to guest customer
Browse files Browse the repository at this point in the history
  • Loading branch information
L3RAZ committed Nov 12, 2024
1 parent acc1a46 commit d5b20b3
Showing 1 changed file with 34 additions and 15 deletions.
49 changes: 34 additions & 15 deletions controllers/front/payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ class Ps_CheckoutPaymentModuleFrontController extends AbstractFrontController
*/
private $paypalOrderId;

/**
* @var CommandBusInterface
*/
private $commandBus;

public function checkAccess()
{
return $this->context->customer && $this->context->cart;
Expand Down Expand Up @@ -80,10 +85,10 @@ public function postProcess()
try {
$this->paypalOrderId = new PayPalOrderId($orderId);

$this->commandBus = $this->module->getService('ps_checkout.bus.command');

/** @var PayPalOrderRepository $payPalOrderRepository */
$payPalOrderRepository = $this->module->getService(PayPalOrderRepository::class);
/** @var CommandBusInterface $commandBus */
$commandBus = $this->module->getService('ps_checkout.bus.command');
/** @var Psr\SimpleCache\CacheInterface $payPalOrderCache */
$payPalOrderCache = $this->module->getService('ps_checkout.cache.paypal.order');

Expand All @@ -93,17 +98,21 @@ public function postProcess()
$orders->where('id_cart', '=', $payPalOrder->getIdCart());

if ($orders->count()) {
$this->redirectToOrderHistoryPage();
if ($this->context->customer->isLogged()) {
$this->redirectToOrderHistoryPage();
} else {
$payPalOrderQueryResult = $this->getPayPalOrder($orderId);
$payPalOrderFromCache = $payPalOrderQueryResult->getPayPalOrder();

$this->redirectToOrderConfirmationPage($payPalOrder->getIdCart(), $payPalOrderFromCache['purchase_units'][0]['payments']['captures'][0]['id'], $payPalOrderFromCache['status']);
}
}

if ($payPalOrder->getIdCart() !== $this->context->cart->id) {
$this->redirectToOrderPage();
}

$payPalOrderQuery = new GetPayPalOrderForCheckoutCompletedQuery($orderId);

/** @var GetPayPalOrderForCheckoutCompletedQueryResult $payPalOrderQueryResult */
$payPalOrderQueryResult = $commandBus->handle($payPalOrderQuery);
$payPalOrderQueryResult = $this->getPayPalOrder($orderId);
$payPalOrderFromCache = $payPalOrderQueryResult->getPayPalOrder();

if ($payPalOrderFromCache['status'] === 'COMPLETED') {
Expand All @@ -122,7 +131,7 @@ public function postProcess()
$this->redirectTo3DSVerification($payPalOrderFromCache);
break;
case Card3DSecure::PROCEED:
$commandBus->handle(new CapturePayPalOrderCommand($orderId, array_keys($payPalOrderFromCache['payment_source'])[0]));
$this->commandBus->handle(new CapturePayPalOrderCommand($orderId, array_keys($payPalOrderFromCache['payment_source'])[0]));
$payPalOrderFromCache = $payPalOrderCache->get($orderId);
$this->createOrder($payPalOrderFromCache, $payPalOrder);
break;
Expand All @@ -133,7 +142,7 @@ public function postProcess()
}

if ($payPalOrderFromCache['status'] === 'APPROVED') {
$commandBus->handle(new CapturePayPalOrderCommand($orderId, array_keys($payPalOrderFromCache['payment_source'])[0]));
$this->commandBus->handle(new CapturePayPalOrderCommand($orderId, array_keys($payPalOrderFromCache['payment_source'])[0]));
$payPalOrderFromCache = $payPalOrderCache->get($orderId);
$this->createOrder($payPalOrderFromCache, $payPalOrder);
}
Expand All @@ -154,17 +163,14 @@ public function postProcess()
*/
private function createOrder($payPalOrderFromCache, $payPalOrder)
{
/** @var CommandBusInterface $commandBus */
$commandBus = $this->module->getService('ps_checkout.bus.command');

$capture = $payPalOrderFromCache['purchase_units'][0]['payments']['captures'][0] ?? null;
$commandBus->handle(new CreateOrderCommand($payPalOrder->getId()->getValue(), $capture));
$capture = isset($payPalOrderFromCache['purchase_units'][0]['payments']['captures'][0]) ? $payPalOrderFromCache['purchase_units'][0]['payments']['captures'][0] : null;
$this->commandBus->handle(new CreateOrderCommand($payPalOrder->getId()->getValue(), $capture));
if ($payPalOrder->getPaymentTokenId() && $payPalOrder->checkCustomerIntent(PayPalOrder::CUSTOMER_INTENT_FAVORITE)) {
/** @var PaymentTokenRepository $paymentTokenRepository */
$paymentTokenRepository = $this->module->getService(PaymentTokenRepository::class);
$paymentTokenRepository->setTokenFavorite($payPalOrder->getPaymentTokenId());
}
$this->redirectToOrderConfirmationPage($payPalOrder->getIdCart(), $capture['id'], $payPalOrderFromCache['status']);
$this->redirectToOrderConfirmationPage($payPalOrder->getIdCart(), $capture ? $capture['id'] : null, $payPalOrderFromCache['status']);
}

/**
Expand Down Expand Up @@ -228,6 +234,19 @@ private function redirectToOrderConfirmationPage($cartId, $captureId, $payPalOrd
}
}

/**
* @param string $orderId
*
* @return GetPayPalOrderForCheckoutCompletedQueryResult
* @throws PayPalOrderException
*/
private function getPayPalOrder($orderId)
{
$payPalOrderQuery = new GetPayPalOrderForCheckoutCompletedQuery($orderId);

return $this->commandBus->handle($payPalOrderQuery);
}

private function redirectToOrderHistoryPage()
{
Tools::redirect($this->context->link->getPageLink('history'));
Expand Down

0 comments on commit d5b20b3

Please sign in to comment.