ResponseFromHeidelpay   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 218
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 17
eloc 91
dl 0
loc 218
c 1
b 0
f 1
rs 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A getJsonEncodedPayloadFromApiResponse() 0 21 1
A mapBankCountries() 0 17 3
A mapBanks() 0 17 3
A mapPaymentFormUrl() 0 10 2
A mapError() 0 14 2
A mapConfig() 0 9 1
A getConnectorInfo() 0 7 2
A map() 0 18 1
A addResponseFullPayload() 0 4 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\Zed\Heidelpay\Business\Adapter\Mapper;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\HeidelpayBankCountryTransfer;
12
use Generated\Shared\Transfer\HeidelpayBankTransfer;
13
use Generated\Shared\Transfer\HeidelpayResponseConfigTransfer;
14
use Generated\Shared\Transfer\HeidelpayResponseErrorTransfer;
15
use Generated\Shared\Transfer\HeidelpayResponseTransfer;
16
use Heidelpay\PhpPaymentApi\Exceptions\PaymentFormUrlException;
17
use Heidelpay\PhpPaymentApi\ParameterGroups\ConfigParameterGroup;
18
use Heidelpay\PhpPaymentApi\Response;
19
use SprykerEco\Zed\Heidelpay\Dependency\Service\HeidelpayToUtilEncodingServiceInterface;
20
21
class ResponseFromHeidelpay implements ResponseFromHeidelpayInterface
22
{
23
    public const RESPONSE_PARAMETER_GROUP_PROCESSING = 'processing';
24
    public const RESPONSE_PARAMETER_GROUP_ACCOUNT = 'account';
25
    public const RESPONSE_PARAMETER_GROUP_ADDRESS = 'address';
26
    public const RESPONSE_PARAMETER_GROUP_CONFIG = 'config';
27
    public const RESPONSE_PARAMETER_GROUP_CONTACT = 'contact';
28
    public const RESPONSE_PARAMETER_GROUP_CRITERION = 'criterion';
29
    public const RESPONSE_PARAMETER_GROUP_FRONTEND = 'frontend';
30
    public const RESPONSE_PARAMETER_GROUP_IDENTIFICATION = 'identification';
31
    public const RESPONSE_PARAMETER_GROUP_NAME = 'name';
32
    public const RESPONSE_PARAMETER_GROUP_PAYMENT = 'payment';
33
    public const RESPONSE_PARAMETER_GROUP_PRESENTATION = 'presentation';
34
    public const RESPONSE_PARAMETER_GROUP_REQUEST = 'request';
35
    public const RESPONSE_PARAMETER_GROUP_SECURITY = 'security';
36
    public const RESPONSE_PARAMETER_GROUP_TRANSACTION = 'transaction';
37
    public const RESPONSE_PARAMETER_GROUP_USER = 'user';
38
39
    /**
40
     * @var \SprykerEco\Zed\Heidelpay\Dependency\Service\HeidelpayToUtilEncodingServiceInterface
41
     */
42
    protected $utilEncoding;
43
44
    /**
45
     * @param \SprykerEco\Zed\Heidelpay\Dependency\Service\HeidelpayToUtilEncodingServiceInterface $utilEncoding
46
     */
47
    public function __construct(HeidelpayToUtilEncodingServiceInterface $utilEncoding)
48
    {
49
        $this->utilEncoding = $utilEncoding;
50
    }
51
52
    /**
53
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
54
     * @param \Generated\Shared\Transfer\HeidelpayResponseTransfer $responseTransfer
55
     *
56
     * @return void
57
     */
58
    public function map(Response $apiResponse, HeidelpayResponseTransfer $responseTransfer): void
59
    {
60
        $responseTransfer
61
            ->setIsPending($apiResponse->isPending())
62
            ->setIsSuccess($apiResponse->isSuccess())
63
            ->setIdSalesOrder((int)$apiResponse->getIdentification()->getTransactionId())
64
            ->setIsError($apiResponse->isError())
65
            ->setProcessingCode($apiResponse->getProcessing()->code)
66
            ->setIdTransactionUnique($apiResponse->getIdentification()->getUniqueId())
67
            ->setResultCode($apiResponse->getProcessing()->getResult())
68
            ->setLegalText($apiResponse->getConfig()->getOptinText())
69
            ->setConnectorInvoiceAccountInfo($this->getConnectorInfo($apiResponse));
70
71
        $this->mapPaymentFormUrl($apiResponse, $responseTransfer);
72
        $this->mapError($apiResponse, $responseTransfer);
73
        $this->mapConfig($apiResponse, $responseTransfer);
74
75
        $this->addResponseFullPayload($apiResponse, $responseTransfer);
76
    }
77
78
    /**
79
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
80
     * @param \Generated\Shared\Transfer\HeidelpayResponseTransfer $responseTransfer
81
     *
82
     * @return void
83
     */
84
    protected function mapError(Response $apiResponse, HeidelpayResponseTransfer $responseTransfer): void
85
    {
86
        if (!$apiResponse->isError()) {
87
            return;
88
        }
89
90
        $errorResponse = $apiResponse->getError();
91
        $errorTransfer = (new HeidelpayResponseErrorTransfer())
92
            ->setCode($errorResponse['code'])
93
            ->setInternalMessage($errorResponse['message']);
94
95
        $responseTransfer
96
            ->setIsError(true)
97
            ->setError($errorTransfer);
98
    }
99
100
    /**
101
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
102
     * @param \Generated\Shared\Transfer\HeidelpayResponseTransfer $responseTransfer
103
     *
104
     * @return void
105
     */
106
    protected function mapConfig(Response $apiResponse, HeidelpayResponseTransfer $responseTransfer): void
107
    {
108
        $responseConfig = $apiResponse->getConfig();
109
        $configTransfer = new HeidelpayResponseConfigTransfer();
110
111
        $this->mapBanks($responseConfig, $configTransfer);
112
        $this->mapBankCountries($responseConfig, $configTransfer);
113
114
        $responseTransfer->setConfig($configTransfer);
115
    }
116
117
    /**
118
     * @param \Heidelpay\PhpPaymentApi\ParameterGroups\ConfigParameterGroup $config
119
     * @param \Generated\Shared\Transfer\HeidelpayResponseConfigTransfer $configTransfer
120
     *
121
     * @return void
122
     */
123
    protected function mapBanks(ConfigParameterGroup $config, HeidelpayResponseConfigTransfer $configTransfer): void
124
    {
125
        /** @var string[] $banks */
126
        $banks = $config->getBrands();
127
128
        if (empty($banks)) {
129
            return;
130
        }
131
132
        $bankTransfersList = [];
133
        foreach ($banks as $code => $name) {
134
            $bankTransfersList[] = (new HeidelpayBankTransfer())
135
                ->setCode($code)
136
                ->setName($name);
137
        }
138
139
        $configTransfer->setBankBrands(new ArrayObject($bankTransfersList));
140
    }
141
142
    /**
143
     * @param \Heidelpay\PhpPaymentApi\ParameterGroups\ConfigParameterGroup $config
144
     * @param \Generated\Shared\Transfer\HeidelpayResponseConfigTransfer $configTransfer
145
     *
146
     * @return void
147
     */
148
    protected function mapBankCountries(ConfigParameterGroup $config, HeidelpayResponseConfigTransfer $configTransfer): void
149
    {
150
        /** @var string[] $bankCountries */
151
        $bankCountries = $config->getBankCountry();
152
153
        if (empty($bankCountries)) {
154
            return;
155
        }
156
157
        $countryTransfersList = [];
158
        foreach ($bankCountries as $code => $name) {
159
            $countryTransfersList[] = (new HeidelpayBankCountryTransfer())
160
                ->setCode($code)
161
                ->setName($name);
162
        }
163
164
        $configTransfer->setBankCountries(new ArrayObject($countryTransfersList));
165
    }
166
167
    /**
168
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
169
     * @param \Generated\Shared\Transfer\HeidelpayResponseTransfer $responseTransfer
170
     *
171
     * @return void
172
     */
173
    protected function addResponseFullPayload(Response $apiResponse, HeidelpayResponseTransfer $responseTransfer): void
174
    {
175
        $responseTransfer->setPayload(
176
            $this->getJsonEncodedPayloadFromApiResponse($apiResponse)
177
        );
178
    }
179
180
    /**
181
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
182
     *
183
     * @return string
184
     */
185
    protected function getJsonEncodedPayloadFromApiResponse(Response $apiResponse): string
186
    {
187
        $payload = [
188
            static::RESPONSE_PARAMETER_GROUP_PROCESSING => get_object_vars($apiResponse->getProcessing()),
189
            static::RESPONSE_PARAMETER_GROUP_ACCOUNT => get_object_vars($apiResponse->getAccount()),
190
            static::RESPONSE_PARAMETER_GROUP_ADDRESS => get_object_vars($apiResponse->getAddress()),
191
            static::RESPONSE_PARAMETER_GROUP_CONFIG => get_object_vars($apiResponse->getConfig()),
192
            static::RESPONSE_PARAMETER_GROUP_CONTACT => get_object_vars($apiResponse->getContact()),
193
            static::RESPONSE_PARAMETER_GROUP_CRITERION => get_object_vars($apiResponse->getCriterion()),
194
            static::RESPONSE_PARAMETER_GROUP_FRONTEND => get_object_vars($apiResponse->getFrontend()),
195
            static::RESPONSE_PARAMETER_GROUP_IDENTIFICATION => get_object_vars($apiResponse->getIdentification()),
196
            static::RESPONSE_PARAMETER_GROUP_NAME => get_object_vars($apiResponse->getName()),
197
            static::RESPONSE_PARAMETER_GROUP_PAYMENT => get_object_vars($apiResponse->getPayment()),
198
            static::RESPONSE_PARAMETER_GROUP_PRESENTATION => get_object_vars($apiResponse->getPresentation()),
199
            static::RESPONSE_PARAMETER_GROUP_REQUEST => get_object_vars($apiResponse->getRequest()),
200
            static::RESPONSE_PARAMETER_GROUP_SECURITY => get_object_vars($apiResponse->getSecurity()),
201
            static::RESPONSE_PARAMETER_GROUP_TRANSACTION => get_object_vars($apiResponse->getTransaction()),
202
            static::RESPONSE_PARAMETER_GROUP_USER => get_object_vars($apiResponse->getUser()),
203
        ];
204
205
        return $this->utilEncoding->encodeJson($payload);
206
    }
207
208
    /**
209
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
210
     * @param \Generated\Shared\Transfer\HeidelpayResponseTransfer $responseTransfer
211
     *
212
     * @return void
213
     */
214
    protected function mapPaymentFormUrl(
215
        Response $apiResponse,
216
        HeidelpayResponseTransfer $responseTransfer
217
    ): void {
218
        try {
219
            /** @var string $paymentFormUrl */
220
            $paymentFormUrl = $apiResponse->getPaymentFormUrl();
221
            $responseTransfer->setPaymentFormUrl($paymentFormUrl);
222
        } catch (PaymentFormUrlException $exception) {
223
            $responseTransfer->setPaymentFormUrl(null);
224
        }
225
    }
226
227
    /**
228
     * @param \Heidelpay\PhpPaymentApi\Response $apiResponse
229
     *
230
     * @return string|null
231
     */
232
    protected function getConnectorInfo(Response $apiResponse): ?string
233
    {
234
        if ($apiResponse->getConnector()->getAccountIBan() === null) {
0 ignored issues
show
introduced by
The condition $apiResponse->getConnect...tAccountIBan() === null is always false.
Loading history...
235
            return null;
236
        }
237
238
        return $apiResponse->getConnector()->toJson();
239
    }
240
}
241