Passed
Push — master ( cc4a0b...c8d669 )
by João Felipe Magro
02:41
created

TransactionResponseService::history()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 21
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 21
rs 9.7333
c 0
b 0
f 0
cc 4
nc 4
nop 1
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->amount = $this->getObjectUtil()->getProperty($response, 'valor');
50
        $transaction->acquirer = $this->getObjectUtil()->getProperty($response, 'operadora');
51
        $transaction->acquirerMessage = $this->getObjectUtil()->getProperty($response, 'operadora_mensagem');
52
        $transaction->urlAuthentication = $this->getObjectUtil()->getProperty($response, 'url_autenticacao');
53
        $transaction->urlCallback = $this->getObjectUtil()->getProperty($response, 'url_retorno');
54
        $transaction->createAt = $this->getObjectUtil()->getProperty($response, 'criado_em');
55
        $transaction->payment = $this->payment($response);
56
        $transaction->order = $this->order($response);
57
        $transaction->customer = $this->customer($response);
58
        $transaction->antifraud = $this->antifraud($response);
59
        $transaction->splitRules = $this->splitRules($response);
60
        $transaction->error = $this->getObjectUtil()->getProperty($response, 'code');
61
        $transaction->errorMessage = $this->getObjectUtil()->getProperty($response, 'message');
62
        $transaction->history = $this->history($response);
63
64
        return $transaction;
65
    }
66
67
    private function payment(stdClass $response)
68
    {
69
        $payment = new stdClass();
70
        $payment->status = $this->getObjectUtil()->getProperty($response, 'status_pagamento');
71
        $payment->message = $this->getObjectUtil()->getProperty($response, 'mensagem_transacao');
72
73
        return $payment;
74
    }
75
76
    private function order(stdClass $response)
77
    {
78
        $order = new stdClass();
79
        $order->orderId = $this->getObjectUtil()->getProperty($response, 'num_pedido');
80
81
        return $order;
82
    }
83
84
    private function customer(stdClass $response)
85
    {
86
        $customer = new stdClass();
87
        $customer_params = property_exists($response, 'cliente') ? $response->cliente : null;
88
        if (!empty($customer_params)) {
89
            $customer->name = $this->getObjectUtil()->getProperty($customer_params, 'nome');
90
            $customer->email = $this->getObjectUtil()->getProperty($customer_params, 'email');
91
            $customer->phone = $this->getObjectUtil()->getProperty($customer_params, 'telefone');
92
            $customer->cpfCnpj = $this->getObjectUtil()->getProperty($customer_params, 'cnpj_cnpj');
93
            $customer_address = property_exists($customer_params, 'endereco') ? $customer_params->endereco : null;
94
95
            if (!empty($customer_address)) {
96
                $address = new stdClass();
97
                $address->street = $this->getObjectUtil()->getProperty($customer_address, 'logradouro');
98
                $address->number = $this->getObjectUtil()->getProperty($customer_address, 'numero');
99
                $address->complement = $this->getObjectUtil()->getProperty($customer_address, 'complemento');
100
                $address->district = $this->getObjectUtil()->getProperty($customer_address, 'bairro');
101
                $address->city = $this->getObjectUtil()->getProperty($customer_address, 'cidade');
102
                $address->state = $this->getObjectUtil()->getProperty($customer_address, 'estado');
103
                $address->zipCode = $this->getObjectUtil()->getProperty($customer_address, 'cep');
104
105
                $customer->address = $address;
106
            }
107
        }
108
109
        return $customer;
110
    }
111
112
    private function history(stdClass $response)
113
    {
114
        $histories = [];
115
        $histories_params = property_exists($response, 'historicos') ? $response->historicos : null;
116
        if (!empty($histories_params)) {
117
            foreach ($histories_params as $history_params) {
118
                $history = new stdClass();
119
                $history->amount = $this->getObjectUtil()->getProperty($history_params, 'valor');
120
                $history->operationType = $this->getObjectUtil()->getProperty($history_params, 'tipo');
121
                $history->status = $this->getObjectUtil()->getProperty($history_params, 'status');
122
                $history->responseCode = $this->getObjectUtil()->getProperty($history_params, 'codigo_resposta');
123
                $history->responseMessage = $this->getObjectUtil()->getProperty($history_params, 'mensagem_resposta');
124
                $history->authorizationCode = $this->getObjectUtil()->getProperty($history_params, 'codigo_autorizacao');
125
                $history->authorizationId = $this->getObjectUtil()->getProperty($history_params, 'id_autorizacao');
126
                $history->authorizationNsu = $this->getObjectUtil()->getProperty($history_params, 'nsu_autorizacao');
127
                $history->createdAt = $this->getObjectUtil()->getProperty($history_params, 'criado_em');
128
                $histories[] = $history;
129
            }
130
        }
131
132
        return $histories;
133
    }
134
135
    private function splitRules(stdClass $response)
136
    {
137
        $splitRules = [];
138
        $split_rules = property_exists($response, 'split_rules') ? $response->split_rules : null;
139
        if (!empty($split_rules)) {
140
            foreach ($split_rules as $split_rule) {
141
                $splitRule = new stdClass();
142
                $splitRule->rule = $this->getObjectUtil()->getProperty($split_rule, 'rule');
143
                $splitRule->seller_id = $this->getObjectUtil()->getProperty($split_rule, 'recipient');
144
                $splitRule->ipag_id = $this->getObjectUtil()->getProperty($split_rule, 'ipag_id');
145
                $splitRule->amount = $this->getObjectUtil()->getProperty($split_rule, 'amount');
146
                $splitRule->percentage = $this->getObjectUtil()->getProperty($split_rule, 'percentage');
147
                $splitRule->liable = $this->getObjectUtil()->getProperty($split_rule, 'liable');
148
                $splitRule->charge_processing_fee = $this->getObjectUtil()->getProperty($split_rule, 'charge_processing_fee');
149
                $splitRules[] = $splitRule;
150
            }
151
        }
152
153
        return $splitRules;
154
    }
155
156
    private function creditCard(stdClass $response)
157
    {
158
        $creditCard = new stdClass();
159
        if (isset($response->token)) {
160
            $creditCard->token = $this->getObjectUtil()->getProperty($response, 'token');
161
            $creditCard->last4 = $this->getObjectUtil()->getProperty($response, 'last4');
162
            $creditCard->expiryMonth = $this->getObjectUtil()->getProperty($response, 'mes');
163
            $creditCard->expiryYear = $this->getObjectUtil()->getProperty($response, 'ano');
164
        }
165
166
        $card = property_exists($response, 'cartao') ? $response->cartao : null;
167
        if (!empty($card)) {
168
            $creditCard->holder = $this->getObjectUtil()->getProperty($card, 'titular');
169
            $creditCard->number = $this->getObjectUtil()->getProperty($card, 'numero');
170
            $creditCard->expiry = $this->getObjectUtil()->getProperty($card, 'vencimento');
171
            $creditCard->brand = $this->getObjectUtil()->getProperty($card, 'bandeira');
172
        }
173
174
        return $creditCard;
175
    }
176
177
    private function subscription(stdClass $response)
178
    {
179
        $subscription = new stdClass();
180
        $subscription->id = $this->getObjectUtil()->getProperty($response, 'id_assinatura');
181
        $subscription->profileId = $this->getObjectUtil()->getProperty($response, 'profile_id');
182
183
        return $subscription;
184
    }
185
186
    private function antifraud(stdClass $response)
187
    {
188
        $antifraud = new stdClass();
189
        $antifraud->id = $this->getObjectUtil()->getProperty($response, 'af_id');
190
        $antifraud->score = $this->getObjectUtil()->getProperty($response, 'af_score');
191
        $antifraud->status = $this->getObjectUtil()->getProperty($response, 'af_status');
192
        $antifraud->message = $this->getObjectUtil()->getProperty($response, 'af_message');
193
194
        return $antifraud;
195
    }
196
}
197