Passed
Push — master ( bdf634...29e358 )
by
unknown
05:07 queued 01:08
created

BNPLBase::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 19
dl 0
loc 23
rs 10
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
/**
4
 * PAYONE Magento 2 Connector is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * PAYONE Magento 2 Connector is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with PAYONE Magento 2 Connector. If not, see <http://www.gnu.org/licenses/>.
16
 *
17
 * PHP version 5
18
 *
19
 * @category  Payone
20
 * @package   Payone_Magento2_Plugin
21
 * @author    FATCHIP GmbH <[email protected]>
22
 * @copyright 2003 - 2023 Payone GmbH
23
 * @license   <http://www.gnu.org/licenses/> GNU Lesser General Public License
24
 * @link      http://www.payone.de
25
 */
26
27
namespace Payone\Core\Model\Methods\BNPL;
28
29
use Payone\Core\Model\PayoneConfig;
30
use Magento\Sales\Model\Order;
0 ignored issues
show
Bug introduced by
The type Magento\Sales\Model\Order 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...
31
use Magento\Payment\Model\InfoInterface;
0 ignored issues
show
Bug introduced by
The type Magento\Payment\Model\InfoInterface 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...
32
use Magento\Framework\Exception\LocalizedException;
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Exception\LocalizedException 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...
33
use Payone\Core\Model\Methods\PayoneMethod;
34
use Magento\Framework\DataObject;
0 ignored issues
show
Bug introduced by
The type Magento\Framework\DataObject 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...
35
36
/**
37
 * Base class for all BNPL methods
38
 */
39
class BNPLBase extends PayoneMethod
40
{
41
    /* Payment method sub types */
42
    const METHOD_BNPL_SUBTYPE_INVOICE = 'PIV';
43
    const METHOD_BNPL_SUBTYPE_INSTALLMENT = 'PIN';
44
    const METHOD_BNPL_SUBTYPE_DEBIT = 'PDD';
45
46
    const BNPL_PARTNER_ID = 'e7yeryF2of8X';
47
48
    /**
49
     * Clearingtype for PAYONE authorization request
50
     *
51
     * @var string
52
     */
53
    protected $sClearingtype = 'fnc';
54
55
    /**
56
     * Payment method group identifier
57
     *
58
     * @var string
59
     */
60
    protected $sGroupName = PayoneConfig::METHOD_GROUP_BNPL;
61
62
    /**
63
     * Payment method long sub type
64
     *
65
     * @var string|bool
66
     */
67
    protected $sLongSubType = false;
68
69
    /**
70
     * Determines if the invoice information has to be added
71
     * to the authorization-request
72
     *
73
     * @var bool
74
     */
75
    protected $blNeedsProductInfo = true;
76
77
    /**
78
     * Keys that need to be assigned to the additionalinformation fields
79
     *
80
     * @var array
81
     */
82
    protected $aAssignKeys = [
83
        'dateofbirth',
84
        'telephone',
85
        'iban',
86
        'installmentOption',
87
        'optionid',
88
        'vatid',
89
    ];
90
91
    /**
92
     * Available countries for BNPL payment usage
93
     *
94
     * @var string[]
95
     */
96
    protected $aAvailableCountries = [
97
        'DE',
98
        'AT',
99
    ];
100
101
    /**
102
     * Info instructions block path
103
     *
104
     * @var string
105
     */
106
    protected $_infoBlockType = 'Payone\Core\Block\Info\BNPL';
107
108
    /**
109
     * @var \Payone\Core\Helper\Api
110
     */
111
    protected $apiHelper;
112
113
    /**
114
     * Constructor
115
     *
116
     * @param \Magento\Framework\Model\Context                        $context
117
     * @param \Magento\Framework\Registry                             $registry
118
     * @param \Magento\Framework\Api\ExtensionAttributesFactory       $extensionFactory
119
     * @param \Magento\Framework\Api\AttributeValueFactory            $customAttrFactory
120
     * @param \Magento\Payment\Helper\Data                            $paymentData
121
     * @param \Magento\Framework\App\Config\ScopeConfigInterface      $scopeConfig
122
     * @param \Magento\Payment\Model\Method\Logger                    $logger
123
     * @param \Payone\Core\Helper\Toolkit                             $toolkitHelper
124
     * @param \Payone\Core\Helper\Shop                                $shopHelper
125
     * @param \Magento\Framework\Url                                  $url
126
     * @param \Magento\Checkout\Model\Session                         $checkoutSession
127
     * @param \Payone\Core\Model\Api\Request\Debit                    $debitRequest
128
     * @param \Payone\Core\Model\Api\Request\Capture                  $captureRequest
129
     * @param \Payone\Core\Model\Api\Request\Authorization            $authorizationRequest
130
     * @param \Payone\Core\Model\ResourceModel\SavedPaymentData       $savedPaymentData
131
     * @param \Payone\Core\Helper\Api                                 $apiHelper
132
     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
133
     * @param \Magento\Framework\Data\Collection\AbstractDb           $resourceCollection
134
     * @param array                                                   $data
135
     */
136
    public function __construct(
137
        \Magento\Framework\Model\Context $context,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Model\Context 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...
138
        \Magento\Framework\Registry $registry,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Registry 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...
139
        \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Api\ExtensionAttributesFactory 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...
140
        \Magento\Framework\Api\AttributeValueFactory $customAttrFactory,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Api\AttributeValueFactory 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...
141
        \Magento\Payment\Helper\Data $paymentData,
0 ignored issues
show
Bug introduced by
The type Magento\Payment\Helper\Data 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...
142
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\App\Config\ScopeConfigInterface 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...
143
        \Magento\Payment\Model\Method\Logger $logger,
0 ignored issues
show
Bug introduced by
The type Magento\Payment\Model\Method\Logger 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...
144
        \Payone\Core\Helper\Toolkit $toolkitHelper,
145
        \Payone\Core\Helper\Shop $shopHelper,
146
        \Magento\Framework\Url $url,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Url 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...
147
        \Magento\Checkout\Model\Session $checkoutSession,
0 ignored issues
show
Bug introduced by
The type Magento\Checkout\Model\Session 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...
148
        \Payone\Core\Model\Api\Request\Debit $debitRequest,
149
        \Payone\Core\Model\Api\Request\Capture $captureRequest,
150
        \Payone\Core\Model\Api\Request\Authorization $authorizationRequest,
151
        \Payone\Core\Model\ResourceModel\SavedPaymentData $savedPaymentData,
152
        \Payone\Core\Helper\Api $apiHelper,
153
        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Model\...eModel\AbstractResource 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...
154
        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
0 ignored issues
show
Bug introduced by
The type Magento\Framework\Data\Collection\AbstractDb 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...
155
        array $data = []
156
    ) {
157
        parent::__construct($context, $registry, $extensionFactory, $customAttrFactory, $paymentData, $scopeConfig, $logger, $toolkitHelper, $shopHelper, $url, $checkoutSession, $debitRequest, $captureRequest, $authorizationRequest, $savedPaymentData, $resource, $resourceCollection, $data);
158
        $this->apiHelper = $apiHelper;
159
    }
160
161
    /**
162
     * Check whether payment method can be used
163
     *
164
     * @param \Magento\Quote\Api\Data\CartInterface|null $quote
165
     * @return bool
166
     */
167
    public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null)
0 ignored issues
show
Bug introduced by
The type Magento\Quote\Api\Data\CartInterface 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...
168
    {
169
        $blParentReturn = parent::isAvailable($quote);
170
171
        // BNPL payment types are only available for payment in Euro
172
        if ($quote !== null && $this->apiHelper->getCurrencyFromQuote($quote) != "EUR") {
173
            return false;
174
        }
175
        return $blParentReturn;
176
    }
177
178
    /**
179
     * To check billing country is allowed for the payment method
180
     *
181
     * @param string $country
182
     * @return bool
183
     * @deprecated 100.2.0
184
     */
185
    public function canUseForCountry($country)
186
    {
187
        // BNPL payments are only available for DE and AT orders
188
        if (in_array($country, $this->aAvailableCountries) === false) {
189
            return false;
190
        }
191
        return true;
192
    }
193
194
    /**
195
     * Returns device token
196
     *
197
     * @return string
198
     */
199
    protected function getDeviceToken()
200
    {
201
        $sUuid = $this->checkoutSession->getPayoneUUID();
202
        $sMid = $this->shopHelper->getConfigParam('mid');
203
        $sCustomMid = $this->getCustomConfigParam('mid');
204
        if ($this->hasCustomConfig() && !empty($sCustomMid)) {
205
            $sMid = $sCustomMid;
206
        }
207
        return self::BNPL_PARTNER_ID.'_'.$sMid.'_'.$sUuid;
208
    }
209
210
    /**
211
     * @param Order $oOrder
212
     * @return string|false
213
     */
214
    protected function getBirthday(Order $oOrder)
215
    {
216
        $sDob = false;
217
        if (!empty($oOrder->getCustomerDob())) {
218
            $sDob = $oOrder->getCustomerDob();
219
        } elseif (!empty($this->getInfoInstance()->getAdditionalInformation('dateofbirth'))) {
220
            $sDob = $this->getInfoInstance()->getAdditionalInformation('dateofbirth');
221
        }
222
223
        if (!empty($sDob)) {
224
            $iDobTime = strtotime($sDob);
225
            if ($iDobTime !== false) {
226
                $sDob = date('Ymd', $iDobTime);
227
            }
228
        }
229
        return $sDob;
230
    }
231
232
    /**
233
     * Return parameters specific to this payment type
234
     *
235
     * @param Order $oOrder
236
     * @return array
237
     */
238
    public function getPaymentSpecificParameters(Order $oOrder)
239
    {
240
        $oInfoInstance = $this->getInfoInstance();
241
242
        $sBusinessrelation = 'b2c';
243
        if (!empty($oOrder->getBillingAddress()->getCompany())) {
244
            $sBusinessrelation = 'b2b';
245
        }
246
247
        $aBaseParams = [
248
            'financingtype' => $this->getSubType(),
249
            'add_paydata[device_token]' => $this->getDeviceToken(),
250
            'businessrelation' => $sBusinessrelation,
251
            'birthday' => $this->getBirthday($oOrder),
252
        ];
253
254
        $sTelephone = $oInfoInstance->getAdditionalInformation('telephone');
255
        if (!empty($sTelephone)) {
256
            $aBaseParams['telephonenumber'] = $sTelephone;
257
        }
258
259
        $sVatId = $oInfoInstance->getAdditionalInformation('vatid');
260
        if ($sBusinessrelation == 'b2b' && !empty($sVatId)) {
261
            $aBaseParams['vatid'] = $sVatId;
262
        }
263
264
        $aSubTypeParams = $this->getSubTypeSpecificParameters($oOrder);
265
        $aParams = array_merge($aBaseParams, $aSubTypeParams);
266
        return $aParams;
267
    }
268
269
    /**
270
     * Add the checkout-form-data to the checkout session
271
     *
272
     * @param  DataObject $data
273
     * @return $this
274
     */
275
    public function assignData(DataObject $data)
276
    {
277
        parent::assignData($data);
278
279
        $oInfoInstance = $this->getInfoInstance();
280
        foreach ($this->aAssignKeys as $sKey) {
281
            $sData = $this->toolkitHelper->getAdditionalDataEntry($data, $sKey);
282
            if ($sData) {
283
                $oInfoInstance->setAdditionalInformation($sKey, $sData);
284
            }
285
        }
286
287
        return $this;
288
    }
289
290
    /**
291
     * Perform certain actions with the response
292
     *
293
     * @param  array $aResponse
294
     * @param  Order $oOrder
295
     * @param  float $amount
296
     * @return array
297
     */
298
    protected function handleResponse($aResponse, Order $oOrder, $amount)
299
    {
300
        $aResponse = parent::handleResponse($aResponse, $oOrder, $amount);
301
        if (isset($aResponse['status']) && $aResponse['status'] == 'ERROR' && isset($aResponse['errorcode']) && $aResponse['errorcode'] == '307') {
302
            $aBans = $this->checkoutSession->getPayonePaymentBans();
303
            if (empty($aBans)) {
304
                $aBans = [];
305
            }
306
            
307
            $sBannedUntil = date('Y-m-d H:i:s', (time() + (60 * 60 * 8)));
308
            $aBans[PayoneConfig::METHOD_BNPL_DEBIT] = $sBannedUntil;
309
            $aBans[PayoneConfig::METHOD_BNPL_INSTALLMENT] = $sBannedUntil;
310
            $aBans[PayoneConfig::METHOD_BNPL_INVOICE] = $sBannedUntil;
311
            $this->checkoutSession->setPayonePaymentBans($aBans);
312
        }
313
        return $aResponse;
314
    }
315
}
316