Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions assets/shop/js/mollie/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ const {Mollie} = window;

document.addEventListener('DOMContentLoaded', function () {
const mollieData = document.querySelector('.online-online-payment__container');
if (!mollieData) {
return;
}

let disableValidationMollieComponents = false;
let selectedValue = false;
let orderToken = null;
let orderId = null;
let qrCodeInterval = null;

showQrCodePopUp();

if (!mollieData) {
return;
}

const orderTotalRow = document.getElementById('sylius-shop-checkout-summary-order-total');
const initialOrderTotal = orderTotalRow ? orderTotalRow.textContent : null;
const cardActiveClass = 'online-payment__item--active';
Expand Down Expand Up @@ -171,8 +175,8 @@ document.addEventListener('DOMContentLoaded', function () {
.then((response) => response.json())
.then((data) => {
let qrCode = data.qrCode;
if (orderToken === null) {
orderToken = data.orderToken;
if (orderId === null) {
orderId = data.orderId;
}

if (qrCode) {
Expand All @@ -181,7 +185,7 @@ document.addEventListener('DOMContentLoaded', function () {
qrCodeMethod = 'iDeal';
}
createPopup(qrCode, qrCodeMethod);
qrCodeInterval = setInterval(() => checkQrCode(url + '?orderToken=' + orderToken), 1000);
qrCodeInterval = setInterval(() => checkQrCode(url + '?orderId=' + orderId), 1000);
}
});
}
Expand All @@ -195,7 +199,7 @@ document.addEventListener('DOMContentLoaded', function () {
let qrBoxElement = document.getElementById('sylius-shop-checkout-summary-qr-box')
if (qrBoxElement) {
let thankYouPageUrl = qrBoxElement.getAttribute('data-thankYouPage');
window.location.href = thankYouPageUrl + '?orderToken=' + orderToken;
window.location.href = thankYouPageUrl + '?orderId=' + orderId;
}
}
});
Expand Down Expand Up @@ -239,8 +243,6 @@ document.addEventListener('DOMContentLoaded', function () {
}
}

showQrCodePopUp();

function createPopup(qrCode, qrCodeMethod) {
// Create popup container
var popupContainer = document.createElement('div');
Expand Down
24 changes: 9 additions & 15 deletions src/Controller/Shop/PageRedirectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\RouterInterface;

class PageRedirectController
Expand All @@ -33,29 +32,24 @@ public function __construct(

public function thankYouAction(Request $request, SessionInterface $session): RedirectResponse
{
$orderToken = $request->get('orderToken');
$thankYouPageUrl = $this->router->generate('sylius_shop_order_thank_you');
$orderId = $request->get('orderId');

if (null === $orderToken || '' === $orderToken) {
throw new NotFoundHttpException('Order token is required.');
if (null !== $orderId && (string) $session->get('sylius_mollie_qr_order_id') !== (string) $orderId) {
return new RedirectResponse($this->router->generate('sylius_shop_cart_summary'));
}

/** @var OrderInterface|null $order */
$order = $this->orderRepository->findOneByTokenValue($orderToken);

if (null === $order) {
throw new NotFoundHttpException(sprintf('Order with token "%s" does not exist.', $orderToken));
}
$session->set('sylius_order_id', $orderId);
$thankYouPageUrl = $this->router->generate('sylius_shop_order_thank_you');

$session->set('sylius_order_id', $order->getId());
/** @var OrderInterface|null $order */
$order = $this->orderRepository->findOneBy(['id' => $orderId]);
$payment = $order->getLastPayment();
$tokenValue = $order->getTokenValue();
$orderToken = $order->getTokenValue();

if ($payment?->getState() === self::ORDER_COMPLETED_STATE) {
return new RedirectResponse($thankYouPageUrl);
}

$cartSummaryUrl = $this->router->generate('sylius_shop_order_show', ['tokenValue' => $tokenValue]);
$cartSummaryUrl = $this->router->generate('sylius_shop_order_show', ['tokenValue' => $orderToken]);

return new RedirectResponse($cartSummaryUrl);
}
Expand Down
30 changes: 20 additions & 10 deletions src/Controller/Shop/QrCodeAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public function createPayment(Request $request): Response
if ($qrCodeEnabled) {
/** @var OrderInterface $order */
$order = $this->cartContext->getCart();
$request->getSession()->set('sylius_mollie_qr_order_id', $order->getId());
$molliePayment = $this->buildPaymentObject($request, $order);

try {
Expand All @@ -78,19 +79,28 @@ public function createPayment(Request $request): Response

public function fetchQrCodeFromOrder(Request $request): JsonResponse
{
/** @var OrderInterface|null $order */
$order = $this->cartContext->getCart();
$orderToken = $request->get('orderToken');
$session = $request->getSession();
$qrCode = null;
$orderId = $request->get('orderId');

if (null !== $orderId) {
if ((string) $session->get('sylius_mollie_qr_order_id') !== (string) $orderId) {
return new JsonResponse([], Response::HTTP_FORBIDDEN);
}

/** @var OrderInterface|null $order */
$order = $this->orderRepository->findOneBy(['id' => $orderId]);
} else {
/** @var OrderInterface|null $order */
$order = $this->cartContext->getCart();
$session->set('sylius_mollie_qr_order_id', $order->getId());
}

if (null !== $orderToken && '' !== $orderToken &&
(null === $order || $order->getTokenValue() !== $orderToken)) {
return new JsonResponse([], Response::HTTP_FORBIDDEN);
if (null !== $order) {
$qrCode = $order->getQrCode();
}

return new JsonResponse(
['qrCode' => $order?->getQrCode(), 'orderToken' => $order?->getTokenValue()],
Response::HTTP_OK,
);
return new JsonResponse(['qrCode' => $qrCode, 'orderId' => $order->getId()], Response::HTTP_OK);
}

public function removeQrCodeFromOrder(Request $request): JsonResponse
Expand Down
Loading