IgfsCgAuth::checkFields()   C
last analyzed

Complexity

Conditions 14
Paths 57

Size

Total Lines 43
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 52.8984

Importance

Changes 0
Metric Value
cc 14
eloc 23
c 0
b 0
f 0
nc 57
nop 0
dl 0
loc 43
ccs 10
cts 24
cp 0.4167
crap 52.8984
rs 6.2666

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace PagOnline\Tran;
4
5
use PagOnline\BaseIgfsCg;
6
use PagOnline\Exceptions\IgfsMissingParException;
7
use PagOnline\IgfsUtils;
8
use PagOnline\XmlEntities\Entry;
9
use SimpleXMLElement;
10
11
class IgfsCgAuth extends BaseIgfsCgTran
12
{
13
    public $shopUserRef;
14
    public $shopUserName;
15
    public $shopUserAccount;
16
    public $shopUserMobilePhone;
17
    public $shopUserIMEI;
18
    public $shopUserIP;
19
    public $trType = 'AUTH';
20
    public $amount;
21
    public $currencyCode;
22
    public $langID;
23
    public $callbackURL;
24
    public $pan;
25
    public $payInstrToken;
26
    public $billingID;
27
    public $payload;
28
    public $regenPayInstrToken;
29
    public $keepOnRegenPayInstrToken;
30
    public $payInstrTokenExpire;
31
    public $payInstrTokenUsageLimit;
32
    public $payInstrTokenAlg;
33
    public $cvv2;
34
    public $expireMonth;
35
    public $expireYear;
36
    public $accountName;
37
    public $enrStatus;
38
    public $authStatus;
39
    public $cavv;
40
    public $xid;
41
    public $level3Info;
42
    public $description;
43
    public $paymentReason;
44
    public $topUpID;
45
    public $firstTopUp;
46
    public $payInstrTokenAsTopUpID;
47
    public $promoCode;
48
    public $payPassData;
49
    public $userAgent;
50
    public $fingerPrint;
51
    public $validityExpire;
52
53
    public $paymentID;
54
    public $authCode;
55
    public $brand;
56
    public $acquirerID;
57
    public $maskedPan;
58
    public $additionalFee;
59
    public $status;
60
    public $nssResult;
61
    public $receiptPdf;
62
    public $payAddData;
63
    public $payUserRef;
64
    /**
65
     * @var string
66
     */
67
    protected $requestNamespace = Requests\IgfsCgAuthRequest::class;
68
69 1
    public function resetFields(): void
70
    {
71 1
        parent::resetFields();
72 1
        $this->shopUserRef = null;
73 1
        $this->shopUserName = null;
74 1
        $this->shopUserAccount = null;
75 1
        $this->shopUserMobilePhone = null;
76 1
        $this->shopUserIMEI = null;
77 1
        $this->shopUserIP = null;
78 1
        $this->trType = 'AUTH';
79 1
        $this->amount = null;
80 1
        $this->currencyCode = null;
81 1
        $this->langID = 'EN';
82 1
        $this->callbackURL = null;
83 1
        $this->pan = null;
84 1
        $this->payInstrToken = null;
85 1
        $this->billingID = null;
86 1
        $this->payload = null;
87 1
        $this->regenPayInstrToken = null;
88 1
        $this->keepOnRegenPayInstrToken = null;
89 1
        $this->payInstrTokenExpire = null;
90 1
        $this->payInstrTokenUsageLimit = null;
91 1
        $this->payInstrTokenAlg = null;
92 1
        $this->cvv2 = null;
93 1
        $this->expireMonth = null;
94 1
        $this->expireYear = null;
95 1
        $this->accountName = null;
96 1
        $this->enrStatus = null;
97 1
        $this->authStatus = null;
98 1
        $this->cavv = null;
99 1
        $this->xid = null;
100 1
        $this->level3Info = null;
101 1
        $this->description = null;
102 1
        $this->paymentReason = null;
103 1
        $this->topUpID = null;
104 1
        $this->firstTopUp = null;
105 1
        $this->payInstrTokenAsTopUpID = null;
106 1
        $this->promoCode = null;
107 1
        $this->payPassData = null;
108 1
        $this->userAgent = null;
109 1
        $this->fingerPrint = null;
110 1
        $this->validityExpire = null;
111
112 1
        $this->paymentID = null;
113 1
        $this->authCode = null;
114 1
        $this->brand = null;
115 1
        $this->acquirerID = null;
116 1
        $this->maskedPan = null;
117 1
        $this->additionalFee = null;
118 1
        $this->status = null;
119 1
        $this->nssResult = null;
120 1
        $this->receiptPdf = null;
121 1
        $this->payAddData = null;
122 1
        $this->payUserRef = null;
123
    }
124
125
    /**
126
     * {@inheritdoc}
127
     */
128 1
    protected function getAdditionalRequestSignatureFields(): array
129
    {
130 1
        return [
131 1
            $this->shopUserRef, // SHOPUSERREF
132 1
            $this->shopUserName, // SHOPUSERNAME
133 1
            $this->shopUserAccount, // SHOPUSERACCOUNT
134 1
            $this->shopUserMobilePhone, //SHOPUSERMOBILEPHONE
135 1
            $this->shopUserIMEI, //SHOPUSERIMEI
136 1
            $this->shopUserIP, // SHOPUSERIP
137 1
            $this->trType, // TRTYPE
138 1
            $this->amount, // AMOUNT
139 1
            $this->currencyCode, // CURRENCYCODE
140 1
            $this->callbackURL, // CALLBACKURL
141 1
            $this->pan, // PAN
142 1
            $this->payInstrToken, // PAYINSTRTOKEN
143 1
            $this->payload, // PAYLOAD
144 1
            $this->cvv2, // CVV2
145 1
            $this->expireMonth, // EXPIREMONTH
146 1
            $this->expireYear, // EXPIREYEAR
147 1
            $this->addInfo1, // UDF1
148 1
            $this->addInfo2, // UDF2
149 1
            $this->addInfo3, // UDF3
150 1
            $this->addInfo4, // UDF4
151 1
            $this->addInfo5, // UDF5
152 1
            $this->topUpID,
153 1
        ];
154
    }
155
156 6
    protected function checkFields(): void
157
    {
158 6
        parent::checkFields();
159 2
        if ($this->trType === null) {
160 1
            throw new IgfsMissingParException('Missing trType');
161
        }
162
163 1
        if ($this->trType != 'VERIFY') {
164 1
            if ($this->amount == null) {
165
                throw new IgfsMissingParException('Missing amount');
166
            }
167 1
            if ($this->currencyCode == null) {
168
                throw new IgfsMissingParException('Missing currencyCode');
169
            }
170
        }
171
        // Disabilitato per pagopoi
172
        // if ($this->pan == NULL) {
173
        //	if ($this->payInstrToken == NULL)
174
        //		throw new IgfsMissingParException("Missing pan");
175
        // }
176 1
        if ($this->pan != null) {
177
            // Se è stato impostato il pan verifico...
178
            if ($this->pan == '') {
179
                throw new IgfsMissingParException('Missing pan');
180
            }
181
        }
182 1
        if ($this->payInstrToken != null) {
183
            // Se è stato impostato il payInstrToken verifico...
184
            if ($this->payInstrToken == '') {
185
                throw new IgfsMissingParException('Missing payInstrToken');
186
            }
187
        }
188 1
        if ($this->level3Info != null) {
189
            $i = 0;
190
            if ($this->level3Info->product != null) {
191
                foreach ($this->level3Info->product as $product) {
192
                    if ($product->productCode == null) {
193
                        throw new IgfsMissingParException('Missing productCode['.$i.']');
194
                    }
195
                    if ($product->productDescription == null) {
196
                        throw new IgfsMissingParException('Missing productDescription['.$i.']');
197
                    }
198
                    ++$i;
199
                }
200
            }
201
        }
202
    }
203
204 1
    protected function buildRequest()
205
    {
206 1
        $request = parent::buildRequest();
207 1
        $this->replaceRequestParameter($request, 'shopUserRef', $this->shopUserRef);
208 1
        $this->replaceRequestParameter($request, 'shopUserName', $this->shopUserName);
209 1
        $this->replaceRequestParameter($request, 'shopUserAccount', $this->shopUserAccount);
210 1
        $this->replaceRequestParameter($request, 'shopUserMobilePhone', $this->shopUserMobilePhone);
211 1
        $this->replaceRequestParameter($request, 'shopUserIMEI', $this->shopUserIMEI);
212 1
        $this->replaceRequestParameter($request, 'shopUserIP', $this->shopUserIP);
213 1
        $this->replaceRequestParameter($request, 'trType', $this->trType);
214 1
        $this->replaceRequestParameter($request, 'amount', $this->amount);
215 1
        $this->replaceRequestParameter($request, 'currencyCode', $this->currencyCode);
216 1
        $this->replaceRequestParameter($request, 'langID', $this->langID);
217 1
        $this->replaceRequestParameter($request, 'callbackURL', $this->callbackURL);
218 1
        $this->replaceRequestParameter($request, 'pan', $this->pan);
219 1
        $this->replaceRequestParameter($request, 'payInstrToken', $this->payInstrToken);
220 1
        $this->replaceRequestParameter($request, 'billingID', $this->billingID);
221 1
        $this->replaceRequestParameter($request, 'payload', $this->payload);
222 1
        $this->replaceRequestParameter($request, 'regenPayInstrToken', $this->regenPayInstrToken);
223 1
        $this->replaceRequestParameter($request, 'keepOnRegenPayInstrToken', $this->keepOnRegenPayInstrToken);
224 1
        $this->replaceRequestParameter($request, 'payInstrTokenExpire', IgfsUtils::formatXMLGregorianCalendar($this->payInstrTokenExpire));
225 1
        $this->replaceRequestParameter($request, 'payInstrTokenUsageLimit', $this->payInstrTokenUsageLimit);
226 1
        $this->replaceRequestParameter($request, 'payInstrTokenAlg', $this->payInstrTokenAlg);
227 1
        $this->replaceRequestParameter($request, 'cvv2', $this->cvv2);
228 1
        $this->replaceRequestParameter($request, 'expireMonth', $this->expireMonth);
229 1
        $this->replaceRequestParameter($request, 'expireYear', $this->expireYear);
230 1
        $this->replaceRequestParameter($request, 'accountName', $this->accountName);
231 1
        $this->replaceRequestParameter($request, 'enrStatus', $this->enrStatus);
232 1
        $this->replaceRequestParameter($request, 'authStatus', $this->authStatus);
233 1
        $this->replaceRequestParameter($request, 'cavv', $this->cavv);
234 1
        $this->replaceRequestParameter($request, 'xid', $this->xid);
235 1
        $this->replaceRequestParameter($request, 'description', $this->description);
236 1
        $this->replaceRequestParameter($request, 'paymentReason', $this->paymentReason);
237 1
        $this->replaceRequestParameter($request, 'topUpID', $this->topUpID);
238 1
        $this->replaceRequestParameter($request, 'firstTopUp', $this->firstTopUp);
239 1
        $this->replaceRequestParameter($request, 'payInstrTokenAsTopUpID', $this->payInstrTokenAsTopUpID);
240 1
        $this->replaceRequestParameter($request, 'promoCode', $this->promoCode);
241 1
        $this->replaceRequestParameter($request, 'payPassData', $this->payPassData);
242 1
        $this->replaceRequestParameter($request, 'userAgent', $this->userAgent);
243 1
        $this->replaceRequestParameter($request, 'fingerPrint', $this->fingerPrint);
244 1
        $this->replaceRequestParameter($request, 'validityExpire', IgfsUtils::formatXMLGregorianCalendar($this->validityExpire));
245
246 1
        if ($this->level3Info != null) {
247
            $this->replaceRequestParameter($request, 'level3Info', $this->level3Info->toXml('level3Info'), false);
248
        } else {
249 1
            $this->replaceRequestParameter($request, 'level3Info', '');
250
        }
251
252 1
        return $request;
253
    }
254
255
    protected function parseResponseMap($response): void
256
    {
257
        parent::parseResponseMap($response);
258
        // Opzionale
259
        $this->paymentID = IgfsUtils::getValue($response, 'paymentID');
260
        // Opzionale
261
        $this->authCode = IgfsUtils::getValue($response, 'authCode');
262
        // Opzionale
263
        $this->brand = IgfsUtils::getValue($response, 'brand');
264
        // Opzionale
265
        $this->acquirerID = IgfsUtils::getValue($response, 'acquirerID');
266
        // Opzionale
267
        $this->maskedPan = IgfsUtils::getValue($response, 'maskedPan');
268
        // Opzionale
269
        $this->payInstrToken = IgfsUtils::getValue($response, 'payInstrToken');
270
        // Opzionale
271
        $this->additionalFee = IgfsUtils::getValue($response, 'additionalFee');
272
        // Opzionale
273
        $this->status = IgfsUtils::getValue($response, 'status');
274
        // Opzionale
275
        $this->nssResult = IgfsUtils::getValue($response, 'nssResult');
276
        // Opzionale
277
        $this->topUpID = IgfsUtils::getValue($response, 'topUpID');
278
        // Opzionale
279
        $this->payUserRef = IgfsUtils::getValue($response, 'payUserRef');
280
        // Opzionale
281
        $this->shopUserMobilePhone = IgfsUtils::getValue($response, 'shopUserMobilePhone');
282
        // Opzionale
283
        try {
284
            $this->receiptPdf = \base64_decode(IgfsUtils::getValue($response, 'receiptPdf'), true);
0 ignored issues
show
Bug introduced by
It seems like PagOnline\IgfsUtils::get...response, 'receiptPdf') can also be of type null; however, parameter $string of base64_decode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

284
            $this->receiptPdf = \base64_decode(/** @scrutinizer ignore-type */ IgfsUtils::getValue($response, 'receiptPdf'), true);
Loading history...
285
        } catch (\Exception $e) {
286
            $this->receiptPdf = null;
287
        }
288
289
        try {
290
            $xml = $response[BaseIgfsCg::$soapResponseTag];
291
292
            $xml = \str_replace('<soap:', '<', $xml);
293
            $xml = \str_replace('</soap:', '</', $xml);
294
            $dom = new SimpleXMLElement($xml, LIBXML_NOERROR, false);
295
            if (\count($dom) == 0) {
296
                return;
297
            }
298
299
            $tmp = \str_replace('<Body>', '', $dom->Body->asXML());
300
            $tmp = \str_replace('</Body>', '', $tmp);
301
            $dom = new SimpleXMLElement($tmp, LIBXML_NOERROR, false);
302
            if (\count($dom) == 0) {
303
                return;
304
            }
305
306
            $xml_response = IgfsUtils::parseResponseFields($dom->response);
307
            if (isset($xml_response['payAddData'])) {
308
                $payAddData = [];
309
                foreach ($dom->response->children() as $item) {
310
                    if ($item->getName() == 'payAddData') {
311
                        $payAddData[] = Entry::fromXml($item->asXML());
0 ignored issues
show
Bug introduced by
It seems like $item->asXML() can also be of type true; however, parameter $xml of PagOnline\XmlEntities\BaseXmlEntity::fromXml() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

311
                        $payAddData[] = Entry::fromXml(/** @scrutinizer ignore-type */ $item->asXML());
Loading history...
312
                    }
313
                }
314
                $this->payAddData = $payAddData;
315
            }
316
        } catch (\Exception $e) {
317
            $this->payAddData = null;
318
        }
319
    }
320
321
    /**
322
     * @param array $response
323
     *
324
     * @throws \PagOnline\Exceptions\IgfsException
325
     *
326
     * @return string
327
     */
328
    protected function getResponseSignature($response)
329
    {
330
        $fields = [
331
            IgfsUtils::getValue($response, 'tid'), // TID
332
            IgfsUtils::getValue($response, 'shopID'), // SHOPID
333
            IgfsUtils::getValue($response, 'rc'), // RC
334
            IgfsUtils::getValue($response, 'errorDesc'), // ERRORDESC
335
            IgfsUtils::getValue($response, 'tranID'), // ORDERID
336
            IgfsUtils::getValue($response, 'date'), // TRANDATE
337
            IgfsUtils::getValue($response, 'paymentID'), // PAYMENTID
338
            IgfsUtils::getValue($response, 'authCode'), // AUTHCODE
339
        ];
340
        // signature dove il buffer e' cosi composto TID|SHOPID|RC|ERRORCODE|ORDERID|PAYMENTID|AUTHCODE
341
        return $this->getSignature($fields);
342
    }
343
}
344