CcPaymentDataRequest::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 3
dl 0
loc 8
rs 10
1
<?php
2
/**
3
 * Copyright © Getnet. All rights reserved.
4
 *
5
 * @author    Bruno Elisei <[email protected]>
6
 * See LICENSE for license details.
7
 */
8
9
namespace Getnet\PaymentMagento\Gateway\Request;
10
11
use Getnet\PaymentMagento\Gateway\Config\Config;
12
use Getnet\PaymentMagento\Gateway\Config\ConfigCc;
13
use Getnet\PaymentMagento\Gateway\SubjectReader;
14
use InvalidArgumentException;
15
use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
16
use Magento\Payment\Gateway\Request\BuilderInterface;
17
use Magento\Payment\Model\InfoInterface;
18
19
/**
20
 * Class Cc Payment Data Request - Payment data structure for Credit Card.
21
 */
22
class CcPaymentDataRequest implements BuilderInterface
23
{
24
    /**
25
     * Credit - Block name.
26
     */
27
    public const CREDIT = 'credit';
28
29
    /**
30
     * Credit Delayed - Block name.
31
     */
32
    public const DELAYED = 'delayed';
33
34
    /**
35
     * Save Card Data - Block name.
36
     */
37
    public const TRANSACTION_TYPE = 'transaction_type';
38
39
    /**
40
     * Number Installment - Block name.
41
     */
42
    public const NUMBER_INSTALLMENTS = 'number_installments';
43
44
    /**
45
     * Statement descriptor - Invoice description.
46
     */
47
    public const SOFT_DESCRIPTOR = 'soft_descriptor';
48
49
    /**
50
     * Credit card - Block name.
51
     */
52
    public const CREDIT_CARD = 'card';
53
54
    /**
55
     * Credit Card Brand - Block Name.
56
     */
57
    public const CREDIT_CARD_BRAND = 'brand';
58
59
    /**
60
     * Credit card store - Block Name.
61
     */
62
    public const CREDIT_CARD_STORE = 'store';
63
64
    /**
65
     * Dynamic Mcc  block name.
66
     */
67
    public const DYNAMIC_MCC = 'dynamic_mcc';
68
69
    /**
70
     * Credit card Holder Name - Block name.
71
     */
72
    public const CREDIT_CARDHOLDER_NAME = 'cardholder_name';
73
74
    /**
75
     * Credit card Number Token - Block Name.
76
     */
77
    public const CREDIT_NUMBER_TOKEN = 'number_token';
78
79
    /**
80
     * Credit card CVV - Block Name.
81
     */
82
    public const CREDIT_CID = 'security_code';
83
84
    /**
85
     * Credit card Expiration Month - Block name.
86
     */
87
    public const CREDIT_MONTH = 'expiration_month';
88
89
    /**
90
     * Credit card Expiration Year - Block name.
91
     */
92
    public const CREDIT_YEAR = 'expiration_year';
93
94
    /**
95
     * @var SubjectReader
96
     */
97
    protected $subjectReader;
98
99
    /**
100
     * @var Config
101
     */
102
    protected $config;
103
104
    /**
105
     * @var ConfigCc
106
     */
107
    protected $configCc;
108
109
    /**
110
     * @param SubjectReader $subjectReader
111
     * @param Config        $config
112
     * @param ConfigCc      $configCc
113
     */
114
    public function __construct(
115
        SubjectReader $subjectReader,
116
        Config $config,
117
        ConfigCc $configCc
118
    ) {
119
        $this->subjectReader = $subjectReader;
120
        $this->config = $config;
121
        $this->configCc = $configCc;
122
    }
123
124
    /**
125
     * Build.
126
     *
127
     * @param array $buildSubject
128
     */
129
    public function build(array $buildSubject)
130
    {
131
        if (!isset($buildSubject['payment'])
132
            || !$buildSubject['payment'] instanceof PaymentDataObjectInterface
133
        ) {
134
            throw new InvalidArgumentException('Payment data object should be provided');
135
        }
136
137
        $paymentDO = $buildSubject['payment'];
138
        $payment = $paymentDO->getPayment();
139
        $order = $paymentDO->getOrder();
140
        $storeId = $order->getStoreId();
141
        $result = [];
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
142
143
        $result = $this->getDataPaymetCc($payment, $storeId);
144
145
        return $result;
146
    }
147
148
    /**
149
     * Data for CC.
150
     *
151
     * @param InfoInterface $payment
152
     * @param int           $storeId
153
     *
154
     * @return array
155
     */
156
    public function getDataPaymetCc($payment, $storeId)
157
    {
158
        $instruction = [];
159
        $installment = $payment->getAdditionalInformation('cc_installments') ?: 1;
160
        $transactionType = $this->configCc->getTypeInterestByInstallment($installment, $storeId);
161
        $month = $payment->getAdditionalInformation('cc_exp_month');
162
        if (strlen($month) === 1) {
163
            $month = '0'.$month;
164
        }
165
        $year = str_replace('20', '', $payment->getAdditionalInformation('cc_exp_year'));
166
167
        $instruction[self::CREDIT] = [
168
            self::DELAYED              => $this->configCc->hasDelayed($storeId),
169
            self::TRANSACTION_TYPE     => $transactionType,
170
            self::NUMBER_INSTALLMENTS  => $installment,
171
            self::SOFT_DESCRIPTOR      => $this->config->getStatementDescriptor($storeId),
172
            self::DYNAMIC_MCC          => $this->config->getMerchantGatewayDynamicMcc($storeId),
173
            self::CREDIT_CARD          => [
174
                self::CREDIT_NUMBER_TOKEN     => $payment->getAdditionalInformation('cc_number_token'),
175
                self::CREDIT_CARD_BRAND       => $payment->getAdditionalInformation('cc_type'),
176
                self::CREDIT_CARDHOLDER_NAME  => $payment->getAdditionalInformation('cc_cardholder_name'),
177
                self::CREDIT_CID              => $payment->getAdditionalInformation('cc_cid'),
178
                self::CREDIT_MONTH            => $month,
179
                self::CREDIT_YEAR             => $year,
180
            ],
181
        ];
182
        $payment->unsAdditionalInformation('cc_cid');
183
184
        return $instruction;
185
    }
186
}
187