Completed
Push — master ( 7717d7...05b9ac )
by Oleksandr
18s queued 18s
created

Yves/Payone/Controller/IndexController.php (1 issue)

Labels
Severity
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\Payone\Controller;
9
10
use Generated\Shared\Transfer\PayoneCancelRedirectTransfer;
11
use Generated\Shared\Transfer\PayoneGetFileTransfer;
12
use Generated\Shared\Transfer\PayoneGetInvoiceTransfer;
13
use Generated\Shared\Transfer\PayoneTransactionStatusUpdateTransfer;
14
use Spryker\Yves\Kernel\Controller\AbstractController;
15
use SprykerEco\Yves\Payone\Plugin\Provider\PayoneControllerProvider;
16
use Symfony\Component\HttpFoundation\Request;
17
use Symfony\Component\HttpFoundation\StreamedResponse;
18
19
/**
20
 * @method \SprykerEco\Client\Payone\PayoneClientInterface getClient()
21
 * @method \SprykerEco\Yves\Payone\PayoneFactory getFactory()
22
 */
23
class IndexController extends AbstractController
24
{
25
    /**
26
     * @param \Symfony\Component\HttpFoundation\Request $request
27
     *
28
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
29
     */
30
    public function indexAction(Request $request)
31
    {
32
        $statusUpdateTranfer = new PayoneTransactionStatusUpdateTransfer();
33
        $statusUpdateTranfer->fromArray($request->request->all(), true);
34
35
        $response = $this->getClient()->updateStatus($statusUpdateTranfer)->getResponse();
36
37
        $callback = function () use ($response) {
38
            echo $response;
39
        };
40
41
        return $this->streamedResponse($callback);
42
    }
43
44
    /**
45
     * @param \Symfony\Component\HttpFoundation\Request $request
46
     *
47
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
48
     */
49
    public function getFileAction(Request $request)
50
    {
51
        $customerClient = $this->getFactory()->createCustomerClient();
0 ignored issues
show
The method createCustomerClient() does not exist on SprykerEco\Yves\Payone\PayoneFactory. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

51
        $customerClient = $this->getFactory()->/** @scrutinizer ignore-call */ createCustomerClient();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
52
        $customerTransfer = $customerClient->getCustomer();
53
54
        if (!$customerTransfer) {
55
            return $this->redirectResponseInternal(PayoneControllerProvider::ROUTE_LOGIN);
56
        }
57
58
        $getFileTransfer = new PayoneGetFileTransfer();
59
        $getFileTransfer->setReference($request->query->get('id'));
60
        $getFileTransfer->setCustomerId($customerTransfer->getIdCustomer());
61
62
        $response = $this->getClient()->getFile($getFileTransfer);
63
64
        if ($response->getStatus() === 'ERROR') {
65
            return $this->viewResponse(['errormessage' => $response->getCustomerErrorMessage()]);
66
        }
67
68
        $callback = function () use ($response) {
69
            echo base64_decode($response->getRawResponse());
70
        };
71
72
        return $this->streamedResponse($callback, 200, ["Content-type" => "application/pdf"]);
73
    }
74
75
    /**
76
     * @param \Symfony\Component\HttpFoundation\Request $request
77
     *
78
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
79
     */
80
    public function getInvoiceAction(Request $request)
81
    {
82
        $customerClient = $this->getFactory()->getCustomerClient();
83
        $customerTransfer = $customerClient->getCustomer();
84
85
        if (!$customerTransfer) {
86
            return $this->redirectResponseInternal(PayoneControllerProvider::ROUTE_LOGIN);
87
        }
88
89
        $getInvoiceTransfer = new PayoneGetInvoiceTransfer();
90
        $getInvoiceTransfer->setReference($request->query->get('id'));
91
        $getInvoiceTransfer->setCustomerId($customerTransfer->getIdCustomer());
92
93
        $response = $this->getClient()->getInvoice($getInvoiceTransfer);
94
95
        if ($response->getStatus() === 'ERROR') {
96
            return $this->viewResponse(['errormessage' => $response->getInternalErrorMessage()]);
97
        }
98
99
        $callback = function () use ($response) {
100
            echo base64_decode($response->getRawResponse());
101
        };
102
103
        return $this->streamedResponse($callback, 200, ["Content-type" => "application/pdf"]);
104
    }
105
106
    /**
107
     * @param \Symfony\Component\HttpFoundation\Request $request
108
     *
109
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
110
     */
111
    public function getSecurityInvoiceAction(Request $request)
112
    {
113
        $customerClient = $this->getFactory()->getCustomerClient();
114
        $customerTransfer = $customerClient->getCustomer();
115
116
        if (!$customerTransfer) {
117
            return $this->redirectResponseInternal(PayoneControllerProvider::ROUTE_LOGIN);
118
        }
119
120
        $getInvoiceTransfer = new PayoneGetInvoiceTransfer();
121
        $getInvoiceTransfer->setReference($request->query->get('id'));
122
        $getInvoiceTransfer->setCustomerId($customerTransfer->getIdCustomer());
123
124
        $response = $this->getClient()->getInvoice($getInvoiceTransfer);
125
126
        if ($response->getStatus() === 'ERROR') {
127
            return $this->viewResponse(['errormessage' => $response->getInternalErrorMessage()]);
128
        }
129
130
        $callback = function () use ($response) {
131
            echo base64_decode($response->getRawResponse());
132
        };
133
134
        return $this->streamedResponse($callback, 200, ["Content-type" => "application/pdf"]);
135
    }
136
137
    /**
138
     * @param \Symfony\Component\HttpFoundation\Request $request
139
     *
140
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
141
     */
142
    public function cancelRedirectAction(Request $request)
143
    {
144
        $orderReference = $request->query->get('orderReference');
145
        $urlHmac = $request->query->get('sig');
146
147
        if ($orderReference) {
148
            $cancelRedirectTransfer = new PayoneCancelRedirectTransfer();
149
            $cancelRedirectTransfer->setOrderReference($orderReference);
150
            $cancelRedirectTransfer->setUrlHmac($urlHmac);
151
152
            $response = $this->getClient()->cancelRedirect($cancelRedirectTransfer);
153
        }
154
155
        return $this->redirectResponseInternal(PayoneControllerProvider::CHECKOUT_PAYMENT);
156
    }
157
158
    /**
159
     * @param callable|null $callback
160
     * @param int $status
161
     * @param array $headers
162
     *
163
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
164
     */
165
    protected function streamedResponse($callback = null, $status = 200, $headers = [])
166
    {
167
        $streamedResponse = new StreamedResponse($callback, $status, $headers);
168
        $streamedResponse->send();
169
170
        return $streamedResponse;
171
    }
172
}
173