Skip to content

Commit 5ef567f

Browse files
authored
Add support for promotions (#767)
1 parent dedf694 commit 5ef567f

File tree

1 file changed

+58
-26
lines changed
  • app/code/Meta/Sales/Controller/Checkout

1 file changed

+58
-26
lines changed

app/code/Meta/Sales/Controller/Checkout/Index.php

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
use Magento\Quote\Api\CartRepositoryInterface;
3131
use Magento\Quote\Api\Data\CartItemInterfaceFactory;
3232
use Magento\Quote\Model\GuestCart\GuestCartItemRepository;
33+
use Magento\Quote\Model\GuestCart\GuestCouponManagement;
3334
use Magento\Quote\Model\Quote\AddressFactory;
3435
use Magento\Quote\Model\Quote;
3536
use Magento\Quote\Model\QuoteFactory;
@@ -46,21 +47,6 @@
4647
*/
4748
class Index implements HttpGetActionInterface
4849
{
49-
/**
50-
* @var Authenticator
51-
*/
52-
private Authenticator $authenticator;
53-
54-
/**
55-
* @var FBEHelper
56-
*/
57-
private FBEHelper $fbeHelper;
58-
59-
/**
60-
* @var OrderHelper
61-
*/
62-
private OrderHelper $orderHelper;
63-
6450
/**
6551
* @var QuoteFactory
6652
*/
@@ -91,6 +77,11 @@ class Index implements HttpGetActionInterface
9177
*/
9278
private CartItemInterfaceFactory $cartItemInterfaceFactory;
9379

80+
/**
81+
* @var GuestCouponManagement
82+
*/
83+
private GuestCouponManagement $guestCouponManagement;
84+
9485
/**
9586
* @var CheckoutSession
9687
*/
@@ -106,6 +97,21 @@ class Index implements HttpGetActionInterface
10697
*/
10798
private RedirectFactory $resultRedirectFactory;
10899

100+
/**
101+
* @var Authenticator
102+
*/
103+
private Authenticator $authenticator;
104+
105+
/**
106+
* @var FBEHelper
107+
*/
108+
private FBEHelper $fbeHelper;
109+
110+
/**
111+
* @var OrderHelper
112+
*/
113+
private OrderHelper $orderHelper;
114+
109115

110116
/**
111117
* @param QuoteFactory $quoteFactory
@@ -114,12 +120,13 @@ class Index implements HttpGetActionInterface
114120
* @param CartRepositoryInterface $quoteRepository
115121
* @param GuestCartItemRepository $guestCartItemRepository
116122
* @param CartItemInterfaceFactory $cartItemInterfaceFactory
123+
* @param GuestCouponManagement $guestCouponManagement
117124
* @param CheckoutSession $checkoutSession
118125
* @param Http $httpRequest
119126
* @param RedirectFactory $resultRedirectFactory
120127
* @param Authenticator $authenticator
121-
* @param OrderHelper $orderHelper
122128
* @param FBEHelper $fbeHelper
129+
* @param OrderHelper $orderHelper
123130
*/
124131
public function __construct(
125132
QuoteFactory $quoteFactory,
@@ -128,11 +135,12 @@ public function __construct(
128135
CartRepositoryInterface $quoteRepository,
129136
GuestCartitemRepository $guestCartItemRepository,
130137
CartItemInterfaceFactory $cartItemInterfaceFactory,
131-
FBEHelper $fbeHelper,
138+
GuestCouponManagement $guestCouponManagement,
132139
CheckoutSession $checkoutSession,
133140
Http $httpRequest,
134141
RedirectFactory $resultRedirectFactory,
135142
Authenticator $authenticator,
143+
FBEHelper $fbeHelper,
136144
OrderHelper $orderHelper
137145
)
138146
{
@@ -142,11 +150,12 @@ public function __construct(
142150
$this->quoteRepository = $quoteRepository;
143151
$this->guestCartItemRepository = $guestCartItemRepository;
144152
$this->cartItemInterfaceFactory = $cartItemInterfaceFactory;
145-
$this->fbeHelper = $fbeHelper;
153+
$this->guestCouponManagement = $guestCouponManagement;
146154
$this->checkoutSession = $checkoutSession;
147155
$this->httpRequest = $httpRequest;
148156
$this->resultRedirectFactory = $resultRedirectFactory;
149157
$this->authenticator = $authenticator;
158+
$this->fbeHelper = $fbeHelper;
150159
$this->orderHelper = $orderHelper;
151160
}
152161

@@ -162,6 +171,7 @@ public function execute()
162171
{
163172
$externalBusinessId = $this->httpRequest->getParam('external_business_id');
164173
$products = explode(',', $this->httpRequest->getParam('products'));
174+
$coupon = $this->httpRequest->getParam('coupon');
165175
$signature = $this->httpRequest->getParam('signature');
166176

167177
$storeId = $this->orderHelper->getStoreIdByExternalBusinessId($externalBusinessId);
@@ -173,9 +183,9 @@ public function execute()
173183
parse_str($query_string, $params);
174184
unset($params['signature']);
175185
$new_query_string = http_build_query($params);
176-
$validation_uri = str_replace($query_string, $new_query_string, $uri);
186+
$validation_uri = urldecode(str_replace($query_string, $new_query_string, $uri));
177187

178-
if (!$this->authenticator->verifySignature(urldecode($validation_uri), $signature)) {
188+
if (!$this->authenticator->verifySignature($validation_uri, $signature)) {
179189
$e = new LocalizedException(__('RSA Signature Validation Failed'));
180190
$this->fbeHelper->logExceptionImmediatelyToMeta(
181191
$e,
@@ -185,7 +195,8 @@ public function execute()
185195
'event_type' => 'rsa_signature_validation_error',
186196
'extra_data' => [
187197
'request_uri' => $uri,
188-
'request_signature' => $signature
198+
'request_signature' => $signature,
199+
'validation_uri' => $validation_uri
189200
]
190201
]
191202
);
@@ -222,7 +233,7 @@ public function execute()
222233
}
223234

224235
$quoteIdMask->setQuoteId($quote->getId())->save();
225-
$quoteIdMaskID = $quoteIdMask->getMaskedId();
236+
$cartId = $quoteIdMask->getMaskedId();
226237

227238
// Add items to cart
228239
foreach ($products as $product) {
@@ -233,7 +244,7 @@ public function execute()
233244
$cartItem = $this->cartItemInterfaceFactory->create();
234245
$cartItem->setSku($sku);
235246
$cartItem->setQty($quantity);
236-
$cartItem->setQuoteId($quoteIdMaskID);
247+
$cartItem->setQuoteId($cartId);
237248

238249
$this->guestCartItemRepository->save($cartItem);
239250
} catch (\Exception $e) {
@@ -244,8 +255,29 @@ public function execute()
244255
'event' => 'meta_checkout_url',
245256
'event_type' => 'error_adding_item',
246257
'extra_data' => [
247-
'cart_id' => $quote->getId(),
248-
'sku' => $sku
258+
'cart_id' => $cartId,
259+
'sku' => $sku,
260+
'quantity' => $quantity
261+
]
262+
]
263+
);
264+
}
265+
}
266+
267+
// Add coupon to cart
268+
if ($coupon) {
269+
try {
270+
$this->guestCouponManagement->set($cartId, $coupon);
271+
} catch (\Exception $e) {
272+
$this->fbeHelper->logExceptionImmediatelyToMeta(
273+
$e,
274+
[
275+
'store_id' => $storeId,
276+
'event' => 'meta_checkout_url',
277+
'event_type' => 'error_adding_coupon',
278+
'extra_data' => [
279+
'cart_id' => $cartId,
280+
'coupon' => $coupon
249281
]
250282
]
251283
);
@@ -259,4 +291,4 @@ public function execute()
259291

260292
return $resultRedirect;
261293
}
262-
}
294+
}

0 commit comments

Comments
 (0)