getUrlDecodedRequestBody()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
dl 0
loc 11
rs 10
cc 3
nc 3
nop 1
1
<?php
2
3
/**
4
 * MIT License
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
namespace SprykerEco\Yves\Heidelpay\Processor;
9
10
use Generated\Shared\Transfer\HeidelpayPaymentProcessingResponseTransfer;
11
use SprykerEco\Client\Heidelpay\HeidelpayClientInterface;
12
use SprykerEco\Yves\Heidelpay\Dependency\Client\HeidelpayToQuoteClientInterface;
13
use Symfony\Component\HttpFoundation\Request;
14
15
class HeidelpayPaymentResponseProcessor implements HeidelpayPaymentResponseProcessorInterface
16
{
17
    protected const RESPONSE_PARAMETERS_FILTER_PATTERN = '/^paymentForm+|^lang+/';
18
19
    /**
20
     * @var \SprykerEco\Client\Heidelpay\HeidelpayClientInterface
21
     */
22
    protected $heidelpayClient;
23
24
    /**
25
     * @var \SprykerEco\Yves\Heidelpay\Dependency\Client\HeidelpayToQuoteClientInterface
26
     */
27
    protected $quoteClient;
28
29
    /**
30
     * @param \SprykerEco\Client\Heidelpay\HeidelpayClientInterface $heidelpayClient
31
     * @param \SprykerEco\Yves\Heidelpay\Dependency\Client\HeidelpayToQuoteClientInterface $quoteClient
32
     */
33
    public function __construct(
34
        HeidelpayClientInterface $heidelpayClient,
35
        HeidelpayToQuoteClientInterface $quoteClient
36
    ) {
37
        $this->heidelpayClient = $heidelpayClient;
38
        $this->quoteClient = $quoteClient;
39
    }
40
41
    /**
42
     * @param \Symfony\Component\HttpFoundation\Request $request
43
     *
44
     * @return \Generated\Shared\Transfer\HeidelpayPaymentProcessingResponseTransfer
45
     */
46
    public function processPaymentResponse(Request $request): HeidelpayPaymentProcessingResponseTransfer
47
    {
48
        $requestAsArray = $this->getUrlDecodedRequestBody($request);
49
        $processingResultTransfer = $this->heidelpayClient
50
            ->processExternalPaymentResponse(
51
                $this->filterResponseParameters($requestAsArray)
52
            );
53
54
        if ($processingResultTransfer->getConnectorInvoiceAccountInfo() === null) {
55
            return $processingResultTransfer;
56
        }
57
58
        $this->updateQuoteWithConnectorInfo($processingResultTransfer);
59
60
        return $processingResultTransfer;
61
    }
62
63
    /**
64
     * @param \Generated\Shared\Transfer\HeidelpayPaymentProcessingResponseTransfer $processingResultTransfer
65
     *
66
     * @return void
67
     */
68
    protected function updateQuoteWithConnectorInfo(HeidelpayPaymentProcessingResponseTransfer $processingResultTransfer): void
69
    {
70
        $quoteTransfer = $this->quoteClient->getQuote();
71
72
        if ($quoteTransfer->getHeidelpayPayment() === null) {
73
            return;
74
        }
75
76
        $quoteTransfer->getHeidelpayPayment()
77
            ->setConnectorInvoiceAccountInfo(
78
                $processingResultTransfer->getConnectorInvoiceAccountInfo()
79
            );
80
81
        $this->quoteClient->setQuote($quoteTransfer);
82
    }
83
84
    /**
85
     * @param \Symfony\Component\HttpFoundation\Request $request
86
     *
87
     * @return array
88
     */
89
    protected function getUrlDecodedRequestBody(Request $request): array
90
    {
91
        $allRequestParameters = $request->request->all();
92
93
        foreach ($allRequestParameters as $key => $value) {
94
            if (is_string($value)) {
95
                $allRequestParameters[$key] = urldecode($value);
96
            }
97
        }
98
99
        return $allRequestParameters;
100
    }
101
102
    /**
103
     * @param string[] $responseArray
104
     *
105
     * @return string[]
106
     */
107
    public function filterResponseParameters(array $responseArray): array
108
    {
109
        return array_filter($responseArray, function ($key) {
110
            return !preg_match(static::RESPONSE_PARAMETERS_FILTER_PATTERN, $key);
111
        }, ARRAY_FILTER_USE_KEY);
112
    }
113
}
114