Passed
Push — feature/eco-2635-amazon-psd2-a... ( c90ef7...746ddc )
by Volodymyr
09:42
created

PaymentController::paymentFailedAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
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
50
    /**
51
     * @param \Symfony\Component\HttpFoundation\Request $request
52
     *
53
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
54
     */
55
    public function checkoutAction(Request $request)
56
    {
57
        $response = $this->executeCheckoutAction($request);
58
59
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
60
            return $response;
61
        }
62
63
        return $this->view($response, [], '@AmazonPay/views/checkout/checkout.twig');
64
    }
65
66
    /**
67
     * @param \Symfony\Component\HttpFoundation\Request $request
68
     *
69
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
70
     */
71
    protected function executeCheckoutAction(Request $request)
72
    {
73
        $quoteTransfer = $this->getFactory()
74
            ->getQuoteClient()
75
            ->getQuote();
76
77
        if (!$this->isAllowedCheckout($quoteTransfer) || !$this->isRequestComplete($request)) {
78
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
79
80
            return $this->buildRedirectInternalResponse();
81
        }
82
83
        $this->storeAmazonPaymentIntoQuote($request, $quoteTransfer);
84
85
        $data = [
86
            static::QUOTE_TRANSFER => $quoteTransfer,
87
            static::CART_ITEMS => $this->getCartItems($quoteTransfer),
88
            static::AMAZONPAY_CONFIG => $this->getAmazonPayConfig(),
89
            static::PSD2_DATA => $this->preparePSD2Data($quoteTransfer),
90
        ];
91
92
        if ($this->isAmazonPaymentInvalid($quoteTransfer)) {
93
            $data[static::ORDER_REFERENCE] = $this->getAmazonPaymentOrderReferenceId($quoteTransfer);
94
            $data[static::ADDRESS_BOOK_MODE] = AmazonPayConfig::DISPLAY_MODE_READONLY;
95
        }
96
97
        return $data;
98
    }
99
100
    /**
101
     * @param \Symfony\Component\HttpFoundation\Request $request
102
     *
103
     * @return \Symfony\Component\HttpFoundation\Response
104
     */
105
    public function setOrderReferenceAction(Request $request)
106
    {
107
        $quoteTransfer = $this->getFactory()
108
            ->getQuoteClient()
109
            ->getQuote();
110
111
        if (!$this->isAmazonPayment($quoteTransfer)) {
112
            return $this->buildRedirectInternalResponse();
113
        }
114
115
        $quoteTransfer->getAmazonpayPayment()
116
            ->setOrderReferenceId(
117
                $request->request->get(static::URL_PARAM_REFERENCE_ID)
118
            );
119
120
        $this->getFactory()->getQuoteClient()->setQuote($quoteTransfer);
121
122
        return new JsonResponse([static::SUCCESS => true]);
123
    }
124
125
    /**
126
     * @param \Symfony\Component\HttpFoundation\Request $request
127
     *
128
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
129
     */
130
    public function getShipmentMethodsAction(Request $request)
131
    {
132
        $response = $this->executeShipmentMethodsAction($request);
133
134
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
135
            return $response;
136
        }
137
138
        return $this->view($response, [], '@AmazonPay/views/get-shipment-methods/get-shipment-methods.twig');
139
    }
140
141
    /**
142
     * @param Request $request
143
     *
144
     * @return Response
145
     */
146
    public function placeOrderAction(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

146
    public function placeOrderAction(/** @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...
147
    {
148
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
149
        $checkoutResponseTransfer = $this->getFactory()->getCheckoutClient()->placeOrder($quoteTransfer);
150
151
        $this->saveQuoteIntoSession($quoteTransfer);
152
153
        if (!$checkoutResponseTransfer->getIsSuccess()) {
154
155
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
156
            $this->setCheckoutErrorMessages($checkoutResponseTransfer);
157
158
            return new JsonResponse([
159
                'success' => false,
160
            ], 400);
161
        }
162
163
        return new JsonResponse([
164
            'success' => true,
165
        ]);
166
    }
167
168
169
    /**
170
     * @param \Symfony\Component\HttpFoundation\Request $request
171
     *
172
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
173
     */
174
    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

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

250
    public function confirmPurchaseAction(/** @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...
251
    {
252
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
253
254
        if (!$this->isAmazonPayment($quoteTransfer)) {
255
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
256
257
            return $this->buildRedirectInternalResponse();
258
        }
259
260
        $checkoutResponseTransfer = $this->getFactory()->getCheckoutClient()->placeOrder($quoteTransfer);
261
        $this->saveQuoteIntoSession($quoteTransfer);
262
263
        if ($checkoutResponseTransfer->getIsSuccess()) {
264
            return $this->redirectResponseInternal(AmazonPayControllerProvider::SUCCESS);
265
        }
266
267
        $this->addAmazonPayErrorFromQuote($quoteTransfer);
268
        $this->setCheckoutErrorMessages($checkoutResponseTransfer);
269
270
        return $this->buildRedirectInternalResponse();
271
    }
272
273
    /**
274
     * @param \Symfony\Component\HttpFoundation\Request $request
275
     *
276
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
277
     */
278
    public function successAction(Request $request)
279
    {
280
        $response = $this->executeSuccessAction($request);
281
282
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always true.
Loading history...
283
            return $response;
284
        }
285
286
        return $this->view($response, [], '@AmazonPay/views/success/success.twig');
287
    }
288
289
    /**
290
     * @param \Symfony\Component\HttpFoundation\Request $request
291
     *
292
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
293
     */
294
    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

294
    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...
295
    {
296
        $this->getFactory()->getCustomerClient()->markCustomerAsDirty();
297
        $this->getFactory()->getCartClient()->clearQuote();
298
299
        return [
300
            static::IS_ASYNCHRONOUS => $this->isAsynchronous(),
301
            static::AMAZONPAY_CONFIG => $this->getAmazonPayConfig(),
302
        ];
303
    }
304
305
    /**
306
     * @param Request $request
307
     *
308
     * @return Response
309
     */
310
    public function paymentFailedAction(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

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