Passed
Push — feature/eco-2635-amazon-psd2-a... ( 624fe6...3742a8 )
by Volodymyr
04:42 queued 37s
created

PaymentController::psd2Action()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 6
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 Elastica\Response;
11
use Generated\Shared\Transfer\AmazonpayCallTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfer\AmazonpayCallTransfer 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\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...
13
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...
14
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...
15
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...
16
use Spryker\Shared\Config\Config;
17
use Spryker\Yves\Kernel\Controller\AbstractController;
18
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
19
use SprykerEco\Shared\AmazonPay\AmazonPayConstants;
20
use SprykerEco\Yves\AmazonPay\Plugin\Provider\AmazonPayControllerProvider;
21
use Symfony\Component\HttpFoundation\JsonResponse;
22
use Symfony\Component\HttpFoundation\Request;
23
24
/**
25
 * @method \SprykerEco\Client\AmazonPay\AmazonPayClientInterface getClient()
26
 * @method \SprykerEco\Yves\AmazonPay\AmazonPayFactory getFactory()
27
 */
28
class PaymentController extends AbstractController
29
{
30
    public const URL_PARAM_REFERENCE_ID = 'reference_id';
31
    public const URL_PARAM_SELLER_ID = 'seller_id';
32
    public const URL_PARAM_ACCESS_TOKEN = 'access_token';
33
    public const URL_PARAM_SHIPMENT_METHOD_ID = 'shipment_method_id';
34
    public const QUOTE_TRANSFER = 'quoteTransfer';
35
    public const SHIPMENT_METHODS = 'shipmentMethods';
36
    public const SELECTED_SHIPMENT_METHOD_ID = 'selectedShipmentMethodId';
37
    public const AMAZONPAY_CONFIG = 'amazonpayConfig';
38
    public const IS_ASYNCHRONOUS = 'isAsynchronous';
39
    public const CART_ITEMS = 'cartItems';
40
    public const SUCCESS = 'success';
41
    public const ERROR_AMAZONPAY_PAYMENT_FAILED = 'amazonpay.payment.failed';
42
    public const IS_AMAZON_PAYMENT_INVALID = 'isAmazonPaymentInvalid';
43
    public const ADDRESS_BOOK_MODE = 'addressBookMode';
44
    public const ORDER_REFERENCE = 'orderReferenceId';
45
46
    public const PSD2_DATA = 'psd2Data';
47
    public const PSD2_DATA_KEY_AJAX_ENDPOINT = 'psd2AjaxEndpoint';
48
    public const PSD2_DATA_KEY_SELLER_ID = 'amazonSellerId';
49
    public const PSD2_DATA_KEY_AMAZON_ORDER_REFERENCE_ID = 'amazonOrderReferenceId';
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
        return new JsonResponse([static::SUCCESS => true]);
122
    }
123
124
    /**
125
     * @param \Symfony\Component\HttpFoundation\Request $request
126
     *
127
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
128
     */
129
    public function getShipmentMethodsAction(Request $request)
130
    {
131
        $response = $this->executeShipmentMethodsAction($request);
132
133
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always false.
Loading history...
134
            return $response;
135
        }
136
137
        return $this->view($response, [], '@AmazonPay/views/get-shipment-methods/get-shipment-methods.twig');
138
    }
139
140
    /**
141
     * @param \Symfony\Component\HttpFoundation\Request $request
142
     *
143
     * @return \Symfony\Component\HttpFoundation\Response
144
     */
145
    public function psd2Action(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

145
    public function psd2Action(/** @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...
146
    {
147
//        $this->getClient()->setOrderDetailsAndConfirmation(new AmazonpayCallTransfer());
148
149
        return new JsonResponse([
0 ignored issues
show
Bug Best Practice introduced by
The expression return new Symfony\Compo...ray('success' => true)) returns the type Symfony\Component\HttpFoundation\JsonResponse which is incompatible with the type-hinted return Elastica\Response.
Loading history...
150
            'success' => true,
151
        ]);
152
    }
153
154
155
    /**
156
     * @param \Symfony\Component\HttpFoundation\Request $request
157
     *
158
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
159
     */
160
    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

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

236
    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...
237
    {
238
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
239
240
        if (!$this->isAmazonPayment($quoteTransfer)) {
241
            $this->addAmazonPayErrorFromQuote($quoteTransfer);
242
243
            return $this->buildRedirectInternalResponse();
244
        }
245
246
        $checkoutResponseTransfer = $this->getFactory()->getCheckoutClient()->placeOrder($quoteTransfer);
247
        $this->saveQuoteIntoSession($quoteTransfer);
248
249
        if ($checkoutResponseTransfer->getIsSuccess()) {
250
            return $this->redirectResponseInternal(AmazonPayControllerProvider::SUCCESS);
251
        }
252
253
        $this->addAmazonPayErrorFromQuote($quoteTransfer);
254
        $this->setCheckoutErrorMessages($checkoutResponseTransfer);
255
256
        return $this->buildRedirectInternalResponse();
257
    }
258
259
    /**
260
     * @param \Symfony\Component\HttpFoundation\Request $request
261
     *
262
     * @return \Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse
263
     */
264
    public function successAction(Request $request)
265
    {
266
        $response = $this->executeSuccessAction($request);
267
268
        if (!is_array($response)) {
0 ignored issues
show
introduced by
The condition is_array($response) is always true.
Loading history...
269
            return $response;
270
        }
271
272
        return $this->view($response, [], '@AmazonPay/views/success/success.twig');
273
    }
274
275
    /**
276
     * @param \Symfony\Component\HttpFoundation\Request $request
277
     *
278
     * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
279
     */
280
    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

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