Passed
Push — feature/eco-2635-amazon-psd2-a... ( e3557f...8790e7 )
by Volodymyr
04:26
created

PaymentController::placeOrderAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 11
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 18
rs 9.9
1
<?php
2
3
/**
4
 * Apache OSL-2
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Yves\AmazonPay\Controller;
9
10
use Generated\Shared\Transfer\AmazonpayPaymentTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\AmazonpayPaymentTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use Generated\Shared\Transfer\CheckoutErrorTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\CheckoutErrorTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
12
use Generated\Shared\Transfer\CheckoutResponseTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\CheckoutResponseTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use Generated\Shared\Transfer\QuoteTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\QuoteTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use Spryker\Shared\Config\Config;
15
use Spryker\Yves\Kernel\Controller\AbstractController;
16
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
17
use SprykerEco\Shared\AmazonPay\AmazonPayConstants;
18
use SprykerEco\Yves\AmazonPay\Plugin\Provider\AmazonPayControllerProvider;
19
use Symfony\Component\HttpFoundation\JsonResponse;
20
use Symfony\Component\HttpFoundation\Request;
21
use Symfony\Component\HttpFoundation\Response;
22
23
/**
24
 * @method \SprykerEco\Client\AmazonPay\AmazonPayClientInterface getClient()
25
 * @method \SprykerEco\Yves\AmazonPay\AmazonPayFactory getFactory()
26
 */
27
class PaymentController extends AbstractController
28
{
29
    public const URL_PARAM_REFERENCE_ID = 'reference_id';
30
    public const URL_PARAM_SELLER_ID = 'seller_id';
31
    public const URL_PARAM_ACCESS_TOKEN = 'access_token';
32
    public const URL_PARAM_SHIPMENT_METHOD_ID = 'shipment_method_id';
33
    public const QUOTE_TRANSFER = 'quoteTransfer';
34
    public const SHIPMENT_METHODS = 'shipmentMethods';
35
    public const SELECTED_SHIPMENT_METHOD_ID = 'selectedShipmentMethodId';
36
    public const AMAZONPAY_CONFIG = 'amazonpayConfig';
37
    public const IS_ASYNCHRONOUS = 'isAsynchronous';
38
    public const CART_ITEMS = 'cartItems';
39
    public const SUCCESS = 'success';
40
    public const ERROR_AMAZONPAY_PAYMENT_FAILED = 'amazonpay.payment.failed';
41
    public const IS_AMAZON_PAYMENT_INVALID = 'isAmazonPaymentInvalid';
42
    public const ADDRESS_BOOK_MODE = 'addressBookMode';
43
    public const ORDER_REFERENCE = 'orderReferenceId';
44
45
    public const PSD2_DATA = 'psd2Data';
46
    public const PSD2_DATA_KEY_AJAX_ENDPOINT = 'psd2AjaxEndpoint';
47
    public const PSD2_DATA_KEY_SELLER_ID = 'amazonSellerId';
48
    public const PSD2_DATA_KEY_AMAZON_ORDER_REFERENCE_ID = 'amazonOrderReferenceId';
49
    public const PSD2_DATA_KEY_AMAZON_FAILURE_URL = 'amazonFailureUrl';
50
51
    /**
52
     * @param \Symfony\Component\HttpFoundation\Request $request
53
     *
54
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
55
     */
56
    public function checkoutAction(Request $request)
57
    {
58
        $response = $this->executeCheckoutAction($request);
59
60
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
61
            return $response;
62
        }
63
64
        return $this->view($response, [], '@AmazonPay/views/checkout/checkout.twig');
65
    }
66
67
    /**
68
     * @param \Symfony\Component\HttpFoundation\Request $request
69
     *
70
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
71
     */
72
    protected function executeCheckoutAction(Request $request)
73
    {
74
        $quoteTransfer = $this->getFactory()
75
            ->getQuoteClient()
76
            ->getQuote();
77
78
        if (!$this->isAllowedCheckout($quoteTransfer) || !$this->isRequestComplete($request)) {
79
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
80
81
            return $this->buildRedirectInternalResponse();
82
        }
83
84
        $this->storeAmazonPaymentIntoQuote($request, $quoteTransfer);
85
86
        $data = [
87
            static::QUOTE_TRANSFER => $quoteTransfer,
88
            static::CART_ITEMS => $this->getCartItems($quoteTransfer),
89
            static::AMAZONPAY_CONFIG => $this->getAmazonPayConfig(),
90
            static::PSD2_DATA => $this->preparePSD2Data($quoteTransfer),
91
        ];
92
93
        if ($this->isAmazonPaymentInvalid($quoteTransfer)) {
94
            $data[static::ORDER_REFERENCE] = $this->getAmazonPaymentOrderReferenceId($quoteTransfer);
95
            $data[static::ADDRESS_BOOK_MODE] = AmazonPayConfig::DISPLAY_MODE_READONLY;
96
        }
97
98
        return $data;
99
    }
100
101
    /**
102
     * @param \Symfony\Component\HttpFoundation\Request $request
103
     *
104
     * @return \Symfony\Component\HttpFoundation\Response
105
     */
106
    public function setOrderReferenceAction(Request $request)
107
    {
108
        $quoteTransfer = $this->getFactory()
109
            ->getQuoteClient()
110
            ->getQuote();
111
112
        if (!$this->isAmazonPayment($quoteTransfer)) {
113
            return $this->buildRedirectInternalResponse();
114
        }
115
116
        $quoteTransfer->getAmazonpayPayment()
117
            ->setOrderReferenceId(
118
                $request->request->get(static::URL_PARAM_REFERENCE_ID)
119
            );
120
121
        $this->getFactory()->getQuoteClient()->setQuote($quoteTransfer);
122
123
        return new JsonResponse([static::SUCCESS => true]);
124
    }
125
126
    /**
127
     * @param \Symfony\Component\HttpFoundation\Request $request
128
     *
129
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
130
     */
131
    public function getShipmentMethodsAction(Request $request)
132
    {
133
        $response = $this->executeShipmentMethodsAction($request);
134
135
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
136
            return $response;
137
        }
138
139
        return $this->view($response, [], '@AmazonPay/views/get-shipment-methods/get-shipment-methods.twig');
140
    }
141
142
    /**
143
     * @param Request $request
144
     *
145
     * @return Response
146
     */
147
    public function confirmPurchaseAction(Request $request): Response
1 ignored issue
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

147
    public function confirmPurchaseAction(/** @scrutinizer ignore-unused */ Request $request): Response

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
148
    {
149
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
150
151
        $quoteTransfer = $this->getClient()->confirmPurchase($quoteTransfer);
152
153
        $this->saveQuoteIntoSession($quoteTransfer);
154
155
        if  (!$quoteTransfer->getAmazonpayPayment()->getOrderReferenceStatus()->getState() === AmazonPayConfig::STATUS_OPEN) {
0 ignored issues
show
introduced by
The condition ! $quoteTransfer->getAma...nPayConfig::STATUS_OPEN is always false.
Loading history...
156
            return new JsonResponse([
157
                'success' => false,
158
            ], 400);
159
        }
160
161
        return new JsonResponse([
162
            'success' => true,
163
        ]);
164
    }
165
166
    /**
167
     * @param \Symfony\Component\HttpFoundation\Request $request
168
     *
169
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
170
     */
171
    protected function executeShipmentMethodsAction(Request $request)
1 ignored issue
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

171
    protected function executeShipmentMethodsAction(/** @scrutinizer ignore-unused */ Request $request)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
172
    {
173
        $quoteTransfer = $this->getFactory()
174
            ->getQuoteClient()
175
            ->getQuote();
176
177
        if (!$this->isAmazonPayment($quoteTransfer)) {
178
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
179
180
            return $this->buildRedirectInternalResponse();
181
        }
182
183
        $quoteTransfer = $this->getClient()
184
            ->addSelectedAddressToQuote($quoteTransfer);
185
        $this->saveQuoteIntoSession($quoteTransfer);
186
        $shipmentMethods = $this->getFactory()
187
            ->getShipmentClient()
188
            ->getAvailableMethods($quoteTransfer);
189
190
        return [
191
            static::SELECTED_SHIPMENT_METHOD_ID => $this->getCurrentShipmentMethodId($quoteTransfer),
192
            static::SHIPMENT_METHODS => $shipmentMethods->getMethods(),
193
            static::IS_AMAZON_PAYMENT_INVALID => $this->isAmazonPaymentInvalid($quoteTransfer),
194
        ];
195
    }
196
197
    /**
198
     * @param \Symfony\Component\HttpFoundation\Request $request
199
     *
200
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
201
     */
202
    public function updateShipmentMethodAction(Request $request)
203
    {
204
        $response = $this->executeShipmentMethodAction($request);
205
206
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
207
            return $response;
208
        }
209
210
        return $this->view($response, [], '@AmazonPay/views/shipment-method/shipment-method.twig');
211
    }
212
213
    /**
214
     * @param \Symfony\Component\HttpFoundation\Request $request
215
     *
216
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
217
     */
218
    protected function executeShipmentMethodAction(Request $request)
219
    {
220
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
221
222
        if (!$this->isAmazonPayment($quoteTransfer)) {
223
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
224
225
            return $this->buildRedirectInternalResponse();
226
        }
227
228
        $quoteTransfer->getShipment()->setShipmentSelection(
229
            $request->request->get(static::URL_PARAM_SHIPMENT_METHOD_ID)
230
        );
231
        $quoteTransfer = $this->getClient()
232
            ->addSelectedShipmentMethodToQuote($quoteTransfer);
233
        $quoteTransfer = $this->getFactory()
234
            ->getCalculationClient()->recalculate($quoteTransfer);
235
        $this->saveQuoteIntoSession($quoteTransfer);
236
237
        return [
238
            static::QUOTE_TRANSFER => $quoteTransfer,
239
        ];
240
    }
241
242
    /**
243
     * @param \Symfony\Component\HttpFoundation\Request $request
244
     *
245
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
246
     */
247
    public function successAction(Request $request)
248
    {
249
        $response = $this->executeSuccessAction($request);
250
251
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
252
253
        $this->getFactory()->getCheckoutClient()->placeOrder($quoteTransfer);
254
        $this->getFactory()->getCheckoutClient()->placeOrder($quoteTransfer);
255
256
        return $this->view($response, [], '@AmazonPay/views/success/success.twig');
257
    }
258
259
    /**
260
     * @param \Symfony\Component\HttpFoundation\Request $request
261
     *
262
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
263
     */
264
    protected function executeSuccessAction(Request $request)
1 ignored issue
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

264
    protected function executeSuccessAction(/** @scrutinizer ignore-unused */ Request $request)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
265
    {
266
        return [
267
            static::IS_ASYNCHRONOUS => $this->isAsynchronous(),
268
            static::AMAZONPAY_CONFIG => $this->getAmazonPayConfig(),
269
        ];
270
    }
271
272
    /**
273
     * @param \Symfony\Component\HttpFoundation\Request $request
274
     *
275
     * @return \Symfony\Component\HttpFoundation\Response
276
     */
277
    public function paymentFailedAction(Request $request): Response
1 ignored issue
show
Unused Code introduced by
The parameter $request is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

277
    public function paymentFailedAction(/** @scrutinizer ignore-unused */ Request $request): Response

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
278
    {
279
        $this->getFactory()->getMessengerClient()->addErrorMessage(static::ERROR_AMAZONPAY_PAYMENT_FAILED);
280
281
        return $this->buildRedirectInternalResponse();
282
    }
283
284
    /**
285
     * @param \Symfony\Component\HttpFoundation\Request $request
286
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
287
     *
288
     * @return void
289
     */
290
    protected function storeAmazonPaymentIntoQuote(Request $request, QuoteTransfer $quoteTransfer)
291
    {
292
        $amazonPaymentTransfer = $this->buildAmazonPaymentTransfer($request);
293
294
        $quoteTransfer->setAmazonpayPayment($amazonPaymentTransfer);
295
        $quoteTransfer = $this->getClient()
296
            ->handleCartWithAmazonPay($quoteTransfer);
297
        $this->saveQuoteIntoSession($quoteTransfer);
298
    }
299
300
    /**
301
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
302
     *
303
     * @return void
304
     */
305
    protected function saveQuoteIntoSession(QuoteTransfer $quoteTransfer)
306
    {
307
        $this->getFactory()
308
            ->getQuoteClient()
309
            ->setQuote($quoteTransfer);
310
    }
311
312
    /**
313
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
314
     *
315
     * @return int|null
316
     */
317
    protected function getCurrentShipmentMethodId(QuoteTransfer $quoteTransfer)
318
    {
319
        if ($quoteTransfer->getShipment() === null || $quoteTransfer->getShipment()->getMethod() === null) {
320
            return null;
321
        }
322
323
        return $quoteTransfer->getShipment()->getMethod()->getIdShipmentMethod();
324
    }
325
326
    /**
327
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
328
     *
329
     * @return \ArrayObject|\Generated\Shared\Transfer\ItemTransfer[]
330
     */
331
    protected function getCartItems(QuoteTransfer $quoteTransfer)
332
    {
333
        return $quoteTransfer->getItems();
334
    }
335
336
    /**
337
     * @param \Symfony\Component\HttpFoundation\Request $request
338
     *
339
     * @return bool
340
     */
341
    protected function isRequestComplete(Request $request)
342
    {
343
        return (
344
            $request->query->get(static::URL_PARAM_REFERENCE_ID) !== null &&
345
            $request->query->get(static::URL_PARAM_ACCESS_TOKEN) !== null
346
        );
347
    }
348
349
    /**
350
     * @param \Symfony\Component\HttpFoundation\Request $request
351
     *
352
     * @return \Generated\Shared\Transfer\AmazonpayPaymentTransfer
353
     */
354
    protected function buildAmazonPaymentTransfer(Request $request)
355
    {
356
        $amazonPaymentTransfer = new AmazonpayPaymentTransfer();
357
        $amazonPaymentTransfer->setOrderReferenceId($request->query->get(static::URL_PARAM_REFERENCE_ID));
358
        $amazonPaymentTransfer->setAddressConsentToken($request->query->get(static::URL_PARAM_ACCESS_TOKEN));
359
360
        return $amazonPaymentTransfer;
361
    }
362
363
    /**
364
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
365
     *
366
     * @return bool
367
     */
368
    protected function isAllowedCheckout(QuoteTransfer $quoteTransfer)
369
    {
370
        return $quoteTransfer->getTotals() !== null;
371
    }
372
373
    /**
374
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
375
     *
376
     * @return bool
377
     */
378
    protected function isLogoutRedirect(QuoteTransfer $quoteTransfer)
379
    {
380
        if ($this->isAmazonPaymentInvalid($quoteTransfer)) {
381
            return false;
382
        }
383
384
        if ($this->getAmazonPayConfig()->getCaptureNow() &&
385
            $quoteTransfer->getAmazonpayPayment() !== null
386
            && $quoteTransfer->getAmazonpayPayment()->getResponseHeader() !== null
387
            && !$quoteTransfer->getAmazonpayPayment()->getResponseHeader()->getIsSuccess()
388
        ) {
389
            return true;
390
        }
391
392
        return false;
393
    }
394
395
    /**
396
     * @param \Symfony\Component\HttpFoundation\Request $request
397
     *
398
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
399
     */
400
    protected function buildRedirectExternalResponse(Request $request)
401
    {
402
        if ($request->headers->get('Referer') === null) {
0 ignored issues
show
introduced by
The condition $request->headers->get('Referer') === null is always false.
Loading history...
403
            return $this->buildRedirectInternalResponse();
404
        }
405
406
        return $this->redirectResponseExternal($request->headers->get('Referer'));
407
    }
408
409
    /**
410
     * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer
411
     *
412
     * @return void
413
     */
414
    protected function setCheckoutErrorMessages(CheckoutResponseTransfer $checkoutResponseTransfer)
415
    {
416
        foreach ($checkoutResponseTransfer->getErrors() as $checkoutErrorTransfer) {
417
            $this->addErrorMessage(
418
                $this->translateCheckoutErrorMessage($checkoutErrorTransfer)
419
            );
420
        }
421
    }
422
423
    /**
424
     * @param \Generated\Shared\Transfer\CheckoutErrorTransfer $checkoutErrorTransfer
425
     *
426
     * @return string
427
     */
428
    protected function translateCheckoutErrorMessage(CheckoutErrorTransfer $checkoutErrorTransfer): string
429
    {
430
        $checkoutErrorMessage = $checkoutErrorTransfer->getMessage();
431
432
        return $this->getFactory()->getGlossaryStorageClient()->translate(
433
            $checkoutErrorMessage,
434
            $this->getLocale(),
435
            $checkoutErrorTransfer->getParameters()
436
        ) ?: $checkoutErrorMessage;
437
    }
438
439
    /**
440
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
441
     *
442
     * @return void
443
     */
444
    protected function addAmazonPayErrorFromQuote(QuoteTransfer $quoteTransfer)
445
    {
446
        if ($quoteTransfer->getAmazonpayPayment() === null
447
            || $quoteTransfer->getAmazonpayPayment()->getResponseHeader() === null
448
            || $quoteTransfer->getAmazonpayPayment()->getResponseHeader()->getErrorMessage() === null) {
449
            return;
450
        }
451
452
        $this->addErrorMessage(
453
            $quoteTransfer->getAmazonpayPayment()->getResponseHeader()->getErrorMessage()
454
        );
455
    }
456
457
    /**
458
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
459
     *
460
     * @return bool
461
     */
462
    protected function isAmazonPayment(QuoteTransfer $quoteTransfer)
463
    {
464
        return $quoteTransfer->getAmazonpayPayment() !== null;
465
    }
466
467
    /**
468
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
469
     */
470
    protected function buildRedirectInternalResponse()
471
    {
472
        return $this->redirectResponseInternal($this->getPaymentRejectRoute());
473
    }
474
475
    /**
476
     * @return string
477
     */
478
    protected function getPaymentRejectRoute()
479
    {
480
        return Config::get(AmazonPayConstants::PAYMENT_REJECT_ROUTE);
481
    }
482
483
    /**
484
     * @return bool
485
     */
486
    protected function isAsynchronous()
487
    {
488
        return $this->getAmazonPayConfig()->getAuthTransactionTimeout() > 0
489
            && !$this->getAmazonPayConfig()->getCaptureNow();
490
    }
491
492
    /**
493
     * @return \SprykerEco\Shared\AmazonPay\AmazonPayConfigInterface
494
     */
495
    protected function getAmazonPayConfig()
496
    {
497
        return $this->getFactory()->createAmazonPayConfig();
498
    }
499
500
    /**
501
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
502
     *
503
     * @return bool
504
     */
505
    protected function isAmazonPaymentInvalid(QuoteTransfer $quoteTransfer)
506
    {
507
        if ($quoteTransfer->getAmazonpayPayment()->getResponseHeader() !== null
508
            && $quoteTransfer->getAmazonpayPayment()->getResponseHeader()->getIsInvalidPaymentMethod()) {
509
            return true;
510
        }
511
512
        return false;
513
    }
514
515
    /**
516
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
517
     *
518
     * @return string|null
519
     */
520
    protected function getAmazonPaymentOrderReferenceId(QuoteTransfer $quoteTransfer)
521
    {
522
        if ($quoteTransfer->getAmazonpayPayment() !== null && $quoteTransfer->getAmazonpayPayment()->getOrderReferenceId() !== null) {
523
            return $quoteTransfer->getAmazonpayPayment()->getOrderReferenceId();
524
        }
525
526
        return null;
527
    }
528
529
    /**
530
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
531
     *
532
     * @return array
533
     */
534
    protected function preparePSD2Data(QuoteTransfer $quoteTransfer): array
535
    {
536
        return [
537
            static::PSD2_DATA_KEY_AJAX_ENDPOINT => $this->getApplication()->path(AmazonPayControllerProvider::CONFIRM_PURCHASE),
538
            static::PSD2_DATA_KEY_SELLER_ID => $this->getAmazonPayConfig()->getSellerId(),
539
            static::PSD2_DATA_KEY_AMAZON_ORDER_REFERENCE_ID => $quoteTransfer->getAmazonpayPayment()->getOrderReferenceId(),
540
            static::PSD2_DATA_KEY_AMAZON_FAILURE_URL => $this->getApplication()->path(AmazonPayControllerProvider::PAYMENT_FAILED),
541
        ];
542
    }
543
}
544