Logistica::sobreWebService()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 0
dl 0
loc 17
ccs 0
cts 8
cp 0
crap 2
rs 9.9
c 0
b 0
f 0
1
<?php
2
namespace Eduardokum\CorreiosPhp;
3
4
use Eduardokum\CorreiosPhp\Contracts\Config\Config as ConfigContract;
5
use Eduardokum\CorreiosPhp\Entities\ETicket;
6
use Eduardokum\CorreiosPhp\Entities\PostalObject;
7
use Eduardokum\CorreiosPhp\Entities\PostalObjectReverse;
8
use Eduardokum\CorreiosPhp\Exception\SoapException;
9
10
class Logistica extends Correios
11
{
12
    public function __construct(ConfigContract $config = null, $type = 'curl')
13
    {
14
        parent::__construct($config, $type);
15
        $this->setWs($this->getWs('logistica'));
16
17
        if ($this->getConfig()->getEnvironment() == 'testing') {
18
            $this->getConfig()->setUser('empresacws');
19
            $this->getConfig()->setPassword('123456');
20
        }
21
    }
22
23
    /**
24
     * @return \stdClass
25
     */
26
    public function sobreWebService()
27
    {
28
        $request = '<cli:sobreWebService></cli:sobreWebService>';
29
        $namespaces = [
30
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
31
        ];
32
        $actions = [
33
            'curl' => null,
34
            'native' => 'sobreWebService',
35
        ];
36
        $auth = [
37
            'user' => $this->getConfig()->getUser(),
38
            'password' => $this->getConfig()->getPassword(),
39
        ];
40
41
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
42
        return $result->sobreWebService;
43
    }
44
45
    /**
46
     * @param ETicket $ETicket
47
     *
48
     * @return \stdClass
49
     */
50
    public function solicitarPostagemReversa(ETicket $ETicket)
51
    {
52
        $request = '<cli:solicitarPostagemReversa>';
53
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
54
        $request .= sprintf('<codigo_servico>%s</codigo_servico>', $ETicket->getServiceCode());
55
        $request .= sprintf('<cartao>%s</cartao>', $this->getConfig()->getPostCard());
56
        $request .= '<destinatario>';
57
        $request .= sprintf('<nome>%s</nome>', $this->getConfig()->getSender()->getName());
58
        $request .= sprintf('<logradouro>%s</logradouro>', $this->getConfig()->getSender()->getStreet());
59
        $request .= sprintf('<numero>%s</numero>', $this->getConfig()->getSender()->getNumber());
60
        $request .= sprintf('<complemento>%s</complemento>', $this->getConfig()->getSender()->getComplement());
61
        $request .= sprintf('<bairro>%s</bairro>', $this->getConfig()->getSender()->getDistrict());
62
        $request .= sprintf('<referencia>%s</referencia>', '');
63
        $request .= sprintf('<cidade>%s</cidade>', $this->getConfig()->getSender()->getCity());
64
        $request .= sprintf('<uf>%s</uf>', $this->getConfig()->getSender()->getState());
65
        $request .= sprintf('<cep>%s</cep>', $this->getConfig()->getSender()->getCep());
66
        $request .= sprintf('<telefone>%s</telefone>', $phone = $this->getConfig()->getSender()->getPhone());
67
        $request .= sprintf('<ddd>%s</ddd>', (strlen($phone) > 9 ? substr($phone, 0, 2) : ''));
68
        $request .= sprintf('<email>%s</email>', $this->getConfig()->getSender()->getMail());
69
        $request .= '</destinatario>';
70
        $request .= $ETicket->save();
71
        $request .= '</cli:solicitarPostagemReversa>';
72
        $namespaces = [
73
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
74
        ];
75
        $actions = [
76
            'curl' => null,
77
            'native' => 'solicitarPostagemReversa',
78
        ];
79
        $auth = [
80
            'user' => $this->getConfig()->getUser(),
81
            'password' => $this->getConfig()->getPassword(),
82
        ];
83
84
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
85
        return $result->solicitarPostagemReversa;
86
    }
87
88
    /**
89
     * @param ETicket $ETicket
90
     *
91
     * @return \stdClass
92
     */
93
    public function solicitarPostagemSimultanea(ETicket $ETicket)
94
    {
95
        $request = '<cli:solicitarPostagemSimultanea>';
96
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
97
        $request .= sprintf('<codigo_servico>%s</codigo_servico>', $ETicket->getServiceCode());
98
        $request .= sprintf('<cartao>%s</cartao>', $this->getConfig()->getPostCard());
99
        $request .= '<destinatario>';
100
        $request .= sprintf('<nome>%s</nome>', $this->getConfig()->getSender()->getName());
101
        $request .= sprintf('<logradouro>%s</logradouro>', $this->getConfig()->getSender()->getStreet());
102
        $request .= sprintf('<numero>%s</numero>', $this->getConfig()->getSender()->getNumber());
103
        $request .= sprintf('<complemento>%s</complemento>', $this->getConfig()->getSender()->getComplement());
104
        $request .= sprintf('<bairro>%s</bairro>', $this->getConfig()->getSender()->getDistrict());
105
        $request .= sprintf('<referencia>%s</referencia>', '');
106
        $request .= sprintf('<cidade>%s</cidade>', $this->getConfig()->getSender()->getCity());
107
        $request .= sprintf('<uf>%s</uf>', $this->getConfig()->getSender()->getState());
108
        $request .= sprintf('<cep>%s</cep>', $this->getConfig()->getSender()->getCep());
109
        $request .= sprintf('<telefone>%s</telefone>', $phone = $this->getConfig()->getSender()->getPhone());
110
        $request .= sprintf('<ddd>%s</ddd>', (strlen($phone) > 9 ? substr($phone, 0, 2) : ''));
111
        $request .= sprintf('<email>%s</email>', $this->getConfig()->getSender()->getMail());
112
        $request .= '</destinatario>';
113
        $request .= $ETicket->save(true);
114
        $request .= '</cli:solicitarPostagemSimultanea>';
115
        $namespaces = [
116
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
117
        ];
118
        $actions = [
119
            'curl' => null,
120
            'native' => 'solicitarPostagemSimultanea',
121
        ];
122
        $auth = [
123
            'user' => $this->getConfig()->getUser(),
124
            'password' => $this->getConfig()->getPassword(),
125
        ];
126
127
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
128
        return $result->solicitarPostagemSimultanea;
129
    }
130
131
    /**
132
     * @param        $pickupNumber
133
     * @param string $type
134
     *
135
     * @return \stdClass
136
     */
137
    public function cancelarPedido($pickupNumber, $type = PostalObjectReverse::TYPE_POST_AUTHORIZATION)
138
    {
139
        $request = '<cli:cancelarPedido>';
140
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
141
        $request .= sprintf('<numeroPedido>%s</numeroPedido>', $pickupNumber);
142
        $request .= sprintf('<tipo>%s</tipo>', $type);
143
        $request .= '</cli:cancelarPedido>';
144
        $namespaces = [
145
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
146
        ];
147
        $actions = [
148
            'curl' => null,
149
            'native' => 'cancelarPedido',
150
        ];
151
        $auth = [
152
            'user' => $this->getConfig()->getUser(),
153
            'password' => $this->getConfig()->getPassword(),
154
        ];
155
156
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
157
        return $result->cancelarPedido;
158
    }
159
160
    /**
161
     * @param        $pickupNumber
162
     * @param string $type
163
     * @param string $searchType U - Buscar somente o último status do pedido; H - Buscar todos os status do pedido.
164
     *
165
     * @return \stdClass
166
     */
167
    public function acompanharPedido($pickupNumber, $type = PostalObjectReverse::TYPE_POST_AUTHORIZATION, $searchType = 'H')
168
    {
169
        $request = '<cli:acompanharPedido>';
170
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
171
        $request .= sprintf('<tipoBusca>%s</tipoBusca>', $searchType);
172
        $request .= sprintf('<tipoSolicitacao>%s</tipoSolicitacao>', $type);
173
        $request .= sprintf('<numeroPedido>%s</numeroPedido>', $pickupNumber);
174
        $request .= '</cli:acompanharPedido>';
175
        $namespaces = [
176
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
177
        ];
178
        $actions = [
179
            'curl' => null,
180
            'native' => 'acompanharPedido',
181
        ];
182
        $auth = [
183
            'user' => $this->getConfig()->getUser(),
184
            'password' => $this->getConfig()->getPassword(),
185
        ];
186
187
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
188
        return $result->acompanharPedido;
189
    }
190
191
    /**
192
     * @param \DateTime|null $date
193
     * @param string         $type
194
     *
195
     * @return \stdClass
196
     */
197
    public function acompanharPedidoPorData(\DateTime $date = null, $type = PostalObjectReverse::TYPE_POST_AUTHORIZATION)
198
    {
199
        if (is_null($date)) {
200
            $date = new \DateTime();
201
        }
202
203
        $request = '<cli:acompanharPedidoPorData>';
204
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
205
        $request .= sprintf('<%s>%s</%s>', 'data', $date->format('d/m/Y'), 'data');
206
        $request .= sprintf('<tipoSolicitacao>%s</tipoSolicitacao>', $type);
207
        $request .= '</cli:acompanharPedidoPorData>';
208
        $namespaces = [
209
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
210
        ];
211
        $actions = [
212
            'curl' => null,
213
            'native' => 'acompanharPedidoPorData',
214
        ];
215
        $auth = [
216
            'user' => $this->getConfig()->getUser(),
217
            'password' => $this->getConfig()->getPassword(),
218
        ];
219
220
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
221
        return $result->acompanharPedidoPorData;
222
    }
223
224
    /**
225
     * @param string $service LR - PAC; LS - SEDEX; LV - e-SEDEX.
226
     * @param int    $amount
227
     * @param string $type    AP - Autorização de Postagem em Agência(e-Ticket); LR - Logística Reversa Domiciliar.
228
     *
229
     * @return array
230
     * @throws SoapException
231
     */
232
    public function solicitarRange($service, $amount, $type = 'AP')
233
    {
234
        $request = '<cli:solicitarRange>';
235
        $request .= sprintf('<codAdministrativo>%s</codAdministrativo>', $this->getConfig()->getAdministrativeCode());
236
        $request .= sprintf('<tipo>%s</tipo>', $type);
237
        $request .= sprintf('<servico>%s</servico>', $service);
238
        $request .= sprintf('<quantidade>%s</quantidade>', (int) $amount);
239
        $request .= '</cli:solicitarRange>';
240
        $namespaces = [
241
            'xmlns:cli' => 'http://service.logisticareversa.correios.com.br/',
242
        ];
243
        $actions = [
244
            'curl' => null,
245
            'native' => 'solicitarRange',
246
        ];
247
        $auth = [
248
            'user' => $this->getConfig()->getUser(),
249
            'password' => $this->getConfig()->getPassword(),
250
        ];
251
252
        $result = $this->getSoap()->send($this->url(), $actions, $request, $namespaces, $auth);
253
        $solicitarRange = $result->solicitarRange;
254
        if ($solicitarRange->cod_erro > 0) {
255
            throw new SoapException($solicitarRange->msg_erro);
256
        }
257
258
        $first = $result->solicitarRange->faixa_inicial;
259
        $last = $result->solicitarRange->faixa_final;
260
        for ($i = $first; $i <= $last; $i++) {
261
            $result[$i] = PostalObject::calculateDv($i);
262
        }
263
264
        return $result;
265
    }
266
}
267