TransactionResponseService::getObjectUtil()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Ipag\Classes\Services;
4
5
use Ipag\Classes\Contracts\Populable;
6
use Ipag\Classes\Util\ObjectUtil;
7
use stdClass;
8
9
final class TransactionResponseService implements Populable
10
{
11
    /**
12
     * @var ObjectUtil
13
     */
14
    private $objectUtil;
15
16
    /**
17
     * @param stdClass $response
18
     *
19
     * @return stdClass
20
     */
21
    public function populate(stdClass $response)
22
    {
23
        $transaction = $this->transaction($response);
24
25
        $transaction->creditCard = $this->creditCard($response);
26
27
        if (isset($response->id_assinatura)) {
28
            $transaction->subscription = $this->subscription($response);
29
        }
30
31
        return $transaction;
32
    }
33
34
    private function getObjectUtil()
35
    {
36
        if (is_null($this->objectUtil)) {
37
            $this->objectUtil = new ObjectUtil();
38
        }
39
40
        return $this->objectUtil;
41
    }
42
43
    private function transaction(stdClass $response)
44
    {
45
        $transaction = new stdClass();
46
        $transaction->id = $this->getObjectUtil()->getProperty($response, 'id');
47
        $transaction->tid = $this->getObjectUtil()->getProperty($response, 'id_transacao');
48
        $transaction->authId = $this->getObjectUtil()->getProperty($response, 'autorizacao_id');
49
        $transaction->nsu = $this->getObjectUtil()->getProperty($response, 'nsu');
50
        $transaction->amount = $this->getObjectUtil()->getProperty($response, 'valor');
51
        $transaction->installments = $this->getObjectUtil()->getProperty($response, 'parcelas');
52
        $transaction->acquirer = $this->getObjectUtil()->getProperty($response, 'operadora');
53
        $transaction->acquirerMessage = $this->getObjectUtil()->getProperty($response, 'operadora_mensagem');
54
        $transaction->urlAuthentication = $this->getObjectUtil()->getProperty($response, 'url_autenticacao');
55
        $transaction->digitableLine = $this->getObjectUtil()->getProperty($response, 'linha_digitavel');
56
        $transaction->urlCallback = $this->getObjectUtil()->getProperty($response, 'url_retorno');
57
        $transaction->createAt = $this->getObjectUtil()->getProperty($response, 'criado_em');
58
        $transaction->payment = $this->payment($response);
59
        $transaction->order = $this->order($response);
60
        $transaction->customer = $this->customer($response);
61
        $transaction->antifraud = $this->antifraud($response);
62
        $transaction->splitRules = $this->splitRules($response);
63
        $transaction->pix = $this->pix($response);
64
        $transaction->error = $this->getObjectUtil()->getProperty($response, 'code');
65
        $transaction->errorMessage = $this->getObjectUtil()->getProperty($response, 'message');
66
        $transaction->history = $this->history($response);
67
68
        return $transaction;
69
    }
70
71
    private function payment(stdClass $response)
72
    {
73
        $payment = new stdClass();
74
        $payment->status = $this->getObjectUtil()->getProperty($response, 'status_pagamento');
75
        $payment->message = $this->getObjectUtil()->getProperty($response, 'mensagem_transacao');
76
77
        return $payment;
78
    }
79
80
    private function order(stdClass $response)
81
    {
82
        $order = new stdClass();
83
        $order->orderId = $this->getObjectUtil()->getProperty($response, 'num_pedido');
84
85
        return $order;
86
    }
87
88
    private function customer(stdClass $response)
89
    {
90
        $customer = new stdClass();
91
        $customer_params = property_exists($response, 'cliente') ? $response->cliente : null;
92
        if (!empty($customer_params)) {
93
            $customer->name = $this->getObjectUtil()->getProperty($customer_params, 'nome');
94
            $customer->email = $this->getObjectUtil()->getProperty($customer_params, 'email');
95
            $customer->phone = $this->getObjectUtil()->getProperty($customer_params, 'telefone');
96
            $customer->cpfCnpj = $this->getObjectUtil()->getProperty($customer_params, 'cnpj_cnpj');
97
            $customer_address = property_exists($customer_params, 'endereco') ? $customer_params->endereco : null;
98
99
            if (!empty($customer_address)) {
100
                $address = new stdClass();
101
                $address->street = $this->getObjectUtil()->getProperty($customer_address, 'logradouro');
102
                $address->number = $this->getObjectUtil()->getProperty($customer_address, 'numero');
103
                $address->complement = $this->getObjectUtil()->getProperty($customer_address, 'complemento');
104
                $address->district = $this->getObjectUtil()->getProperty($customer_address, 'bairro');
105
                $address->city = $this->getObjectUtil()->getProperty($customer_address, 'cidade');
106
                $address->state = $this->getObjectUtil()->getProperty($customer_address, 'estado');
107
                $address->zipCode = $this->getObjectUtil()->getProperty($customer_address, 'cep');
108
109
                $customer->address = $address;
110
            }
111
        }
112
113
        return $customer;
114
    }
115
116
    private function history(stdClass $response)
117
    {
118
        $histories = [];
119
        $histories_params = property_exists($response, 'historicos') ? $response->historicos : null;
120
        if (!empty($histories_params)) {
121
            foreach ($histories_params as $history_params) {
122
                $history = new stdClass();
123
                $history->amount = $this->getObjectUtil()->getProperty($history_params, 'valor');
124
                $history->operationType = $this->getObjectUtil()->getProperty($history_params, 'tipo');
125
                $history->status = $this->getObjectUtil()->getProperty($history_params, 'status');
126
                $history->responseCode = $this->getObjectUtil()->getProperty($history_params, 'codigo_resposta');
127
                $history->responseMessage = $this->getObjectUtil()->getProperty($history_params, 'mensagem_resposta');
128
                $history->authorizationCode = $this->getObjectUtil()->getProperty($history_params, 'codigo_autorizacao');
129
                $history->authorizationId = $this->getObjectUtil()->getProperty($history_params, 'id_autorizacao');
130
                $history->authorizationNsu = $this->getObjectUtil()->getProperty($history_params, 'nsu_autorizacao');
131
                $history->createdAt = $this->getObjectUtil()->getProperty($history_params, 'criado_em');
132
                $histories[] = $history;
133
            }
134
        }
135
136
        return $histories;
137
    }
138
139
    private function splitRules(stdClass $response)
140
    {
141
        $splitRules = [];
142
        $split_rules = property_exists($response, 'split_rules') ? $response->split_rules : null;
143
        if (!empty($split_rules)) {
144
            foreach ($split_rules as $split_rule) {
145
                $splitRule = new stdClass();
146
                $splitRule->rule = $this->getObjectUtil()->getProperty($split_rule, 'rule');
147
                $splitRule->seller_id = $this->getObjectUtil()->getProperty($split_rule, 'recipient');
148
                $splitRule->ipag_id = $this->getObjectUtil()->getProperty($split_rule, 'ipag_id');
149
                $splitRule->amount = $this->getObjectUtil()->getProperty($split_rule, 'amount');
150
                $splitRule->percentage = $this->getObjectUtil()->getProperty($split_rule, 'percentage');
151
                $splitRule->liable = $this->getObjectUtil()->getProperty($split_rule, 'liable');
152
                $splitRule->charge_processing_fee = $this->getObjectUtil()->getProperty($split_rule, 'charge_processing_fee');
153
                $splitRule->hold_receivables = $this->getObjectUtil()->getProperty($split_rule, 'hold_receivables');
154
                $splitRules[] = $splitRule;
155
            }
156
        }
157
158
        return $splitRules;
159
    }
160
161
    private function creditCard(stdClass $response)
162
    {
163
        $creditCard = new stdClass();
164
        if (isset($response->token)) {
165
            $creditCard->token = $this->getObjectUtil()->getProperty($response, 'token');
166
            $creditCard->last4 = $this->getObjectUtil()->getProperty($response, 'last4');
167
            $creditCard->expiryMonth = $this->getObjectUtil()->getProperty($response, 'mes');
168
            $creditCard->expiryYear = $this->getObjectUtil()->getProperty($response, 'ano');
169
        }
170
171
        $card = property_exists($response, 'cartao') ? $response->cartao : null;
172
        if (!empty($card)) {
173
            $creditCard->holder = $this->getObjectUtil()->getProperty($card, 'titular');
174
            $creditCard->number = $this->getObjectUtil()->getProperty($card, 'numero');
175
            $creditCard->expiry = $this->getObjectUtil()->getProperty($card, 'vencimento');
176
            $creditCard->brand = $this->getObjectUtil()->getProperty($card, 'bandeira');
177
        }
178
179
        return $creditCard;
180
    }
181
182
    private function subscription(stdClass $response)
183
    {
184
        $subscription = new stdClass();
185
        $subscription->id = $this->getObjectUtil()->getProperty($response, 'id_assinatura');
186
        $subscription->profileId = $this->getObjectUtil()->getProperty($response, 'profile_id');
187
188
        return $subscription;
189
    }
190
191
    private function pix(stdClass $response)
192
    {
193
        $pix = new stdClass();
194
        $pix->link = null;
195
        $pix->qrCode = null;
196
197
        $pix_params = property_exists($response, 'pix') ? $response->pix : null;
198
        if (!empty($pix_params)) {
199
            $pix->link = $this->getObjectUtil()->getProperty($pix_params, 'link');
200
            $pix->qrCode = $this->getObjectUtil()->getProperty($pix_params, 'qrcode');
201
        }
202
203
        return $pix;
204
    }
205
206
    private function antifraud(stdClass $response)
207
    {
208
        $antifraud = new stdClass();
209
        $antifraud->score = null;
210
        $antifraud->status = null;
211
        $antifraud->message = null;
212
213
        $antifraude_params = property_exists($response, 'antifraude') ? $response->antifraude : null;
214
        if (!empty($antifraude_params)) {
215
            $antifraud->score = $this->getObjectUtil()->getProperty($antifraude_params, 'score');
216
            $antifraud->status = $this->getObjectUtil()->getProperty($antifraude_params, 'status');
217
            $antifraud->message = strip_tags((string) $this->getObjectUtil()->getProperty($antifraude_params, 'message'));
218
        }
219
220
        return $antifraud;
221
    }
222
}
223