Passed
Pull Request — master (#33)
by Aleksey
09:12 queued 01:09
created

CallbackController::successEasyCreditAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
c 0
b 0
f 0
dl 0
loc 17
rs 9.9332
cc 2
nc 2
nop 1
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Yves\Computop\Controller;
9
10
use Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...iResponseHeaderTransfer 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\ComputopNotificationTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...topNotificationTransfer 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 Spryker\Shared\Config\Config;
13
use Spryker\Yves\Kernel\Controller\AbstractController;
14
use SprykerEco\Shared\Computop\ComputopConfig;
15
use SprykerEco\Shared\Computop\Config\ComputopApiConfig;
16
use SprykerEco\Shared\ComputopApi\ComputopApiConstants;
17
use SprykerEco\Yves\Computop\Handler\ComputopPrePostPaymentHandlerInterface;
18
use Symfony\Component\HttpFoundation\JsonResponse;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\HttpFoundation\Response;
21
22
/**
23
 * @method \SprykerEco\Yves\Computop\ComputopFactory getFactory()
24
 * @method \SprykerEco\Client\Computop\ComputopClientInterface getClient()
25
 */
26
class CallbackController extends AbstractController
27
{
28
    public const MESSAGE_PAYMENT_SUCCESS = 'Your order has been placed successfully! Thank you for shopping with us!';
29
30
    public const MESSAGE_LOG_OUT_ERROR = 'Please login and try again.';
31
32
    public const MESSAGE_RESPONSE_ERROR = 'Error: %s ( %s )';
33
34
    /**
35
     * @param \Symfony\Component\HttpFoundation\Request $request
36
     *
37
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
38
     */
39
    public function successCreditCardAction(Request $request)
40
    {
41
        return $this->executeSuccessPostPlaceAction(
42
            $this->getFactory()->createCreditCardPaymentHandler(),
43
            $request->request->all()
44
        );
45
    }
46
47
    /**
48
     * @param \Symfony\Component\HttpFoundation\Request $request
49
     *
50
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
51
     */
52
    public function successPayNowAction(Request $request)
53
    {
54
        return $this->executeSuccessPostPlaceAction(
55
            $this->getFactory()->createPayNowPaymentHandler(),
56
            $request->request->all()
57
        );
58
    }
59
60
    /**
61
     * @param \Symfony\Component\HttpFoundation\Request $request
62
     *
63
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
64
     */
65
    public function successPayPalAction(Request $request)
66
    {
67
        return $this->executeSuccessPostPlaceAction(
68
            $this->getFactory()->createPayPalPaymentHandler(),
69
            $request->query->all()
70
        );
71
    }
72
73
    /**
74
     * @param \Symfony\Component\HttpFoundation\Request $request
75
     *
76
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
77
     */
78
    public function successDirectDebitAction(Request $request)
79
    {
80
        return $this->executeSuccessPostPlaceAction(
81
            $this->getFactory()->createDirectDebitPaymentHandler(),
82
            $request->query->all()
83
        );
84
    }
85
86
    /**
87
     * @param \Symfony\Component\HttpFoundation\Request $request
88
     *
89
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
90
     */
91
    public function successEasyCreditAction(Request $request)
92
    {
93
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
94
        $quoteTransfer = $this->getFactory()
95
            ->createEasyCreditPaymentHandler()
96
            ->handle($quoteTransfer, $request->query->all());
97
98
        $this->getFactory()->getQuoteClient()->setQuote($quoteTransfer);
99
        $statusResponse = $quoteTransfer->getPayment()->getComputopEasyCredit()->getEasyCreditStatusResponse();
100
101
        if (!$statusResponse->getHeader()->getIsSuccess()) {
102
            $this->addErrorMessage($statusResponse->getErrorText());
103
104
            return $this->redirectResponseInternal($this->getFactory()->getComputopConfig()->getCallbackFailureRedirectPath());
105
        }
106
107
        return $this->redirectResponseInternal($this->getFactory()->getComputopConfig()->getEasyCreditSuccessAction());
108
    }
109
110
    /**
111
     * @param \Symfony\Component\HttpFoundation\Request $request
112
     *
113
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
114
     */
115
    public function successPaydirektAction(Request $request)
116
    {
117
        return $this->executeSuccessPostPlaceAction(
118
            $this->getFactory()->createPaydirektPaymentHandler(),
119
            $request->query->all()
120
        );
121
    }
122
123
    /**
124
     * @param \Symfony\Component\HttpFoundation\Request $request
125
     *
126
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
127
     */
128
    public function successSofortAction(Request $request)
129
    {
130
        return $this->executeSuccessPostPlaceAction(
131
            $this->getFactory()->createSofortPaymentHandler(),
132
            $request->query->all()
133
        );
134
    }
135
136
    /**
137
     * @param \Symfony\Component\HttpFoundation\Request $request
138
     *
139
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
140
     */
141
    public function successIdealAction(Request $request)
142
    {
143
        return $this->executeSuccessPostPlaceAction(
144
            $this->getFactory()->createIdealPaymentHandler(),
145
            $request->query->all()
146
        );
147
    }
148
149
    /**
150
     * @param \SprykerEco\Yves\Computop\Handler\ComputopPrePostPaymentHandlerInterface $handler
151
     * @param array $responseArray
152
     *
153
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
154
     */
155
    protected function executeSuccessPostPlaceAction(ComputopPrePostPaymentHandlerInterface $handler, array $responseArray)
156
    {
157
        $quoteTransfer = $this->getFactory()->getQuoteClient()->getQuote();
158
        $quoteTransfer = $handler->handle($quoteTransfer, $responseArray);
159
160
        if (!$quoteTransfer->getCustomer()) {
161
            $this->addSuccessMessage(static::MESSAGE_PAYMENT_SUCCESS);
162
        }
163
164
        return $this->redirectResponseInternal(
165
            $this->getFactory()->getComputopConfig()->getCallbackSuccessCaptureRedirectPath()
166
        );
167
    }
168
169
    /**
170
     * @param \Symfony\Component\HttpFoundation\Request $request
171
     *
172
     * @throws \SprykerEco\Service\ComputopApi\Exception\ComputopApiConverterException
173
     *
174
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
175
     */
176
    public function failureAction(Request $request)
177
    {
178
        $requestParameters = $request->query->all();
179
180
        if ($request->isMethod(Request::METHOD_POST)) {
181
            $requestParameters = $request->request->all();
182
        }
183
184
        $decryptedArray = $this->getFactory()
185
            ->getComputopApiService()
186
            ->decryptResponseHeader($requestParameters, Config::get(ComputopApiConstants::BLOWFISH_PASSWORD));
187
188
        $responseHeaderTransfer = $this->getFactory()
189
            ->getComputopApiService()
190
            ->extractResponseHeader($decryptedArray, ComputopConfig::INIT_METHOD);
191
192
        $this->addErrorMessage($this->getErrorMessageText($responseHeaderTransfer));
193
194
        return $this->redirectResponseInternal($this->getFactory()->getComputopConfig()->getCallbackFailureRedirectPath());
195
    }
196
197
    /**
198
     * @param \Symfony\Component\HttpFoundation\Request $request
199
     *
200
     * @return \Symfony\Component\HttpFoundation\Response
201
     */
202
    public function notifyAction(Request $request)
203
    {
204
        $decryptedArray = $this->getFactory()
205
            ->getComputopApiService()
206
            ->decryptResponseHeader($request->request->all(), Config::get(ComputopApiConstants::BLOWFISH_PASSWORD));
207
208
        $responseHeaderTransfer = $this->getFactory()
209
            ->getComputopApiService()
210
            ->extractResponseHeader($decryptedArray, '');
211
212
        $computopNotificationTransfer = (new ComputopNotificationTransfer())
213
            ->fromArray($responseHeaderTransfer->toArray(), true)
214
            ->setType($decryptedArray[ComputopApiConfig::NOTIFICATION_PARAMETER_PAYMENT_TYPE] ?? '');
215
216
        $this->getClient()->processNotification($computopNotificationTransfer);
217
218
        return new Response();
219
    }
220
221
    /**
222
     * @param \Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer $responseHeaderTransfer
223
     *
224
     * @return string
225
     */
226
    protected function getErrorMessageText(ComputopApiResponseHeaderTransfer $responseHeaderTransfer)
227
    {
228
        $errorText = $responseHeaderTransfer->getDescription();
229
        $errorCode = $responseHeaderTransfer->getCode();
230
        $errorMessageText = sprintf(static::MESSAGE_RESPONSE_ERROR, $errorText, $errorCode);
231
232
        return $errorMessageText;
233
    }
234
}
235