ApplePay::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 19
dl 0
loc 23
rs 10
c 1
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 - 2021 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;
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\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...
32
33
/**
34
 * Model for Apple Pay payment method
35
 */
36
class ApplePay extends PayoneMethod
37
{
38
    /**
39
     * Payment method code
40
     *
41
     * @var string
42
     */
43
    protected $_code = PayoneConfig::METHOD_APPLEPAY;
44
45
    /**
46
     * Clearingtype for PAYONE authorization request
47
     *
48
     * @var string
49
     */
50
    protected $sClearingtype = 'wlt';
51
52
    /**
53
     * Wallettype for PAYONE requests
54
     *
55
     * @var string|bool
56
     */
57
    protected $sWallettype = 'APL';
58
59
    /**
60
     * @var \Payone\Core\Helper\ApplePay
61
     */
62
    protected $applePayHelper;
63
64
    /**
65
     * Mapping ApplePay cardtype to Payone cardtype
66
     *
67
     * @var array
68
     */
69
    protected $cardTypeMapping = [
70
        'visa' => 'V',
71
        'mastercard' => 'M',
72
        'girocard' => 'G',
73
    ];
74
75
    /**
76
     * Constructor
77
     *
78
     * @param \Magento\Framework\Model\Context                        $context
79
     * @param \Magento\Framework\Registry                             $registry
80
     * @param \Magento\Framework\Api\ExtensionAttributesFactory       $extensionFactory
81
     * @param \Magento\Framework\Api\AttributeValueFactory            $customAttrFactory
82
     * @param \Magento\Payment\Helper\Data                            $paymentData
83
     * @param \Magento\Framework\App\Config\ScopeConfigInterface      $scopeConfig
84
     * @param \Magento\Payment\Model\Method\Logger                    $logger
85
     * @param \Payone\Core\Helper\Toolkit                             $toolkitHelper
86
     * @param \Payone\Core\Helper\Shop                                $shopHelper
87
     * @param \Magento\Framework\Url                                  $url
88
     * @param \Magento\Checkout\Model\Session                         $checkoutSession
89
     * @param \Payone\Core\Model\Api\Request\Debit                    $debitRequest
90
     * @param \Payone\Core\Model\Api\Request\Capture                  $captureRequest
91
     * @param \Payone\Core\Model\Api\Request\Authorization            $authorizationRequest
92
     * @param \Payone\Core\Model\ResourceModel\SavedPaymentData       $savedPaymentData
93
     * @param \Payone\Core\Helper\ApplePay                            $applePayHelper
94
     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
95
     * @param \Magento\Framework\Data\Collection\AbstractDb           $resourceCollection
96
     * @param array                                                   $data
97
     */
98
    public function __construct(
99
        \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...
100
        \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...
101
        \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...
102
        \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...
103
        \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...
104
        \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...
105
        \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...
106
        \Payone\Core\Helper\Toolkit $toolkitHelper,
107
        \Payone\Core\Helper\Shop $shopHelper,
108
        \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...
109
        \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...
110
        \Payone\Core\Model\Api\Request\Debit $debitRequest,
111
        \Payone\Core\Model\Api\Request\Capture $captureRequest,
112
        \Payone\Core\Model\Api\Request\Authorization $authorizationRequest,
113
        \Payone\Core\Model\ResourceModel\SavedPaymentData $savedPaymentData,
114
        \Payone\Core\Helper\ApplePay $applePayHelper,
115
        ?\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...
116
        ?\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...
117
        array $data = []
118
    ) {
119
        parent::__construct($context, $registry, $extensionFactory, $customAttrFactory, $paymentData, $scopeConfig, $logger, $toolkitHelper, $shopHelper, $url, $checkoutSession, $debitRequest, $captureRequest, $authorizationRequest, $savedPaymentData, $resource, $resourceCollection, $data);
120
        $this->applePayHelper = $applePayHelper;
121
    }
122
123
    /**
124
     * Check whether payment method can be used
125
     *
126
     * @param \Magento\Quote\Api\Data\CartInterface|null $quote
127
     * @return bool
128
     */
129
    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...
130
    {
131
        $blParentReturn = parent::isAvailable($quote);
132
        if ($blParentReturn === false) {
133
            return false;
134
        }
135
136
        // dont show payment method when configuration is not complete
137
        if ($this->applePayHelper->isConfigurationComplete() === false) {
138
            return false;
139
        }
140
        return $blParentReturn;
141
    }
142
143
    /**
144
     * Maps ApplePay cardtype to Payone cardtype
145
     *
146
     * @param  array $aToken
147
     * @return string
148
     */
149
    protected function getPayoneCardType($aToken)
150
    {
151
        $sCardType = "?";
152
        if (isset($aToken['paymentMethod']['network']) && isset($this->cardTypeMapping[strtolower($aToken['paymentMethod']['network'])])) {
153
            $sCardType = $this->cardTypeMapping[strtolower($aToken['paymentMethod']['network'])];
154
        }
155
        return $sCardType;
156
    }
157
158
    /**
159
     * Return parameters specific to this payment type
160
     *
161
     * @param  Order $oOrder
162
     * @return array
163
     */
164
    public function getPaymentSpecificParameters(Order $oOrder)
165
    {
166
        $oInfoInstance = $this->getInfoInstance();
167
168
        $sJsonToken = $oInfoInstance->getAdditionalInformation('token');
169
        $aToken = json_decode($sJsonToken ?? '', true);
170
        if (empty($aToken) || !is_array($aToken)) {
171
            throw new \Exception("Apple Pay token is missing!");
172
        }
173
174
        $aParams = [
175
            'wallettype' => $this->getWallettype(),
176
            'api_version' => '3.11',
177
            'cardtype'                                              => $this->getPayoneCardType($aToken),
178
            'add_paydata[paymentdata_token_data]'                   => $aToken['paymentData']['data'],
179
            'add_paydata[paymentdata_token_signature]'              => $aToken['paymentData']['signature'],
180
            'add_paydata[paymentdata_token_version]'                => $aToken['paymentData']['version'],
181
            'add_paydata[paymentdata_token_ephemeral_publickey]'    => $aToken['paymentData']['header']['ephemeralPublicKey'],
182
            'add_paydata[paymentdata_token_publickey_hash]'         => $aToken['paymentData']['header']['publicKeyHash'],
183
            'add_paydata[paymentdata_token_transaction_id]'         => $aToken['paymentData']['header']['transactionId'],
184
        ];
185
        return $aParams;
186
    }
187
188
    /**
189
     * Add the checkout-form-data to the checkout session
190
     *
191
     * @param  DataObject $data
192
     * @return $this
193
     */
194
    public function assignData(DataObject $data)
195
    {
196
        parent::assignData($data);
197
198
        $oInfoInstance = $this->getInfoInstance();
199
        $oInfoInstance->setAdditionalInformation('token', $this->toolkitHelper->getAdditionalDataEntry($data, 'token'));
200
201
        return $this;
202
    }
203
}
204