/** * @param \PhpSigep\Model\AbstractModel|\PhpSigep\Model\SolicitaEtiquetas $params * * @throws \PhpSigep\Services\Exception * @throws InvalidArgument * @return BuscaClienteResult */ public function execute(AbstractModel $params) { if (!$params instanceof \PhpSigep\Model\AccessData) { throw new InvalidArgument(); } $soapArgs = array('idContrato' => $params->getNumeroContrato(), 'idCartaoPostagem' => $params->getCartaoPostagem(), 'usuario' => $params->getUsuario(), 'senha' => $params->getSenha()); $result = new Result(); try { if (!$params->getUsuario() || !$params->getSenha() || !$params->getNumeroContrato() || !$params->getCartaoPostagem()) { throw new Exception('Para usar este serviço você precisa setar o nome de usuário, a senha, o numero ' . 'do contrato e o número do cartão de postagem.'); } $r = SoapClientFactory::getSoapClient()->buscaCliente($soapArgs); if (!$r || !is_object($r) || !isset($r->return) || $r instanceof \SoapFault) { if ($r instanceof \SoapFault) { throw $r; } throw new \Exception('Erro ao consultar os dados do cliente. Retorno: "' . $r . '"'); } $result->setResult(new BuscaClienteResult((array) $r->return)); } catch (\Exception $e) { if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } return $result; }
/** * @param \PhpSigep\Model\RastrearObjeto $params * @return \PhpSigep\Services\Result<\PhpSigep\Model\RastrearObjetoResultado[]> * @throws Exception\RastrearObjeto\TipoResultadoInvalidoException * @throws Exception\RastrearObjeto\TipoInvalidoException */ public function execute(\PhpSigep\Model\RastrearObjeto $params) { switch ($params->getTipo()) { case \PhpSigep\Model\RastrearObjeto::TIPO_LISTA_DE_OBJETOS: $tipo = 'L'; break; case \PhpSigep\Model\RastrearObjeto::TIPO_INTERVALO_DE_OBJETOS: $tipo = 'F'; break; default: throw new \PhpSigep\Services\Real\Exception\RastrearObjeto\TipoInvalidoException("Tipo '" . $params->getTipo() . "' não é valido"); break; } switch ($params->getTipoResultado()) { case \PhpSigep\Model\RastrearObjeto::TIPO_RESULTADO_APENAS_O_ULTIMO_EVENTO: $tipoResultado = 'U'; break; case \PhpSigep\Model\RastrearObjeto::TIPO_RESULTADO_TODOS_OS_EVENTOS: $tipoResultado = 'T'; break; default: throw new \PhpSigep\Services\Real\Exception\RastrearObjeto\TipoResultadoInvalidoException("Tipo de resultado '" . $params->getTipo() . "' não é valido"); break; } $post = array('usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha(), 'tipo' => $tipo, 'Resultado' => $tipoResultado, 'objetos' => implode('', array_map(function (\PhpSigep\Model\Etiqueta $etiqueta) { return $etiqueta->getEtiquetaComDv(); }, $params->getEtiquetas()))); $postContent = http_build_query($post); $ch = curl_init(); curl_setopt_array($ch, array(CURLOPT_URL => 'http://websro.correios.com.br/sro_bin/sroii_xml.eventos', CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $postContent, CURLOPT_SSL_VERIFYPEER => false)); // "usuario=ECT &senha=SRO &tipo=L&Resultado=T&objetos=SQ458226057BRRA132678652BRSX142052885BR" // "Usuario=sigep&Senha=n5f9t8&Tipo=L&Resultado=T&Objetos=SQ458226057BR" $curlResult = curl_exec($ch); $curlErrno = curl_errno($ch); $curlErr = curl_error($ch); curl_close($ch); $result = new Result(); if ($curlErrno) { $result->setErrorMsg("Erro de comunicação com o Correios ao tentar buscar os dados de rastreamento. Detalhes: \"{$curlErrno} - {$curlErr}\"."); $result->setErrorCode($curlErrno); } else { if (!$curlResult) { $result->setErrorMsg("Resposta do Correios veio vazia"); } else { try { $eventos = $this->_parseResult($curlResult); $result->setResult($eventos); } catch (RastrearObjetoException $e) { $result->setErrorCode(0); $result->setErrorMsg($e->getMessage()); } } } return $result; }
public function execute($numeroCartaoPostagem, $usuario, $senha) { $soapArgs = array('numeroCartaoPostagem' => $numeroCartaoPostagem, 'usuario' => $usuario, 'senha' => $senha); $r = SoapClientFactory::getSoapClient()->getStatusCartaoPostagem($soapArgs); $errorCode = null; $errorMsg = null; $result = new Result(); if (!$r) { $errorCode = 0; } else { if ($r instanceof \SoapFault) { $errorCode = $r->getCode(); $errorMsg = SoapClientFactory::convertEncoding($r->getMessage()); $result->setSoapFault($r); } else { if ($r instanceof \stdClass && property_exists($r, 'return')) { $status = new VerificarStatusCartaoPostagemResposta(); $status->setReturn($r->return); $result->setResult($status); } else { $errorCode = 0; $errorMsg = "A resposta do Correios não está no formato esperado."; } } } $result->setErrorCode($errorCode); $result->setErrorMsg($errorMsg); return $result; }
/** * @param \PhpSigep\Model\AbstractModel|\PhpSigep\Model\SolicitaEtiquetas $params * * @throws \PhpSigep\Services\Exception * @throws InvalidArgument * @return Result<Etiqueta[]> */ public function execute(AbstractModel $params) { if (!$params instanceof \PhpSigep\Model\SolicitaEtiquetas) { throw new InvalidArgument(); } $soapArgs = array('tipoDestinatario' => 'C', 'identificador' => $params->getAccessData()->getCnpjEmpresa(), 'idServico' => $params->getServicoDePostagem()->getIdServico(), 'qtdEtiquetas' => 1, 'usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha()); $result = new Result(); try { if (!$params->getAccessData() || !$params->getAccessData()->getUsuario() || !$params->getAccessData()->getSenha()) { throw new Exception('Para usar este serviço você precisa setar o nome de usuário e senha.'); } $etiquetasReservadas = array(); for ($i = 0; $i < $params->getQtdEtiquetas(); $i++) { $r = SoapClientFactory::getSoapClient()->solicitaEtiquetas($soapArgs); if (class_exists('\\StaLib_Logger')) { \StaLib_Logger::log('Retorno SIGEP solicitar etiquetas: ' . print_r($r, true)); } if ($r && is_object($r) && isset($r->return) && !$r instanceof \SoapFault) { $r = explode(',', $r->return); // $etiquetasReservadas[] = str_replace(' ', '', $r[0]); $etiqueta = new Etiqueta(); $etiqueta->setEtiquetaSemDv($r[0]); $etiquetasReservadas[] = $etiqueta; } else { if ($r instanceof \SoapFault) { throw $r; } throw new \Exception('Não foi possível obter as etiquetas solicitadas. Retorno: "' . $r . '"'); } } $result->setResult($etiquetasReservadas); } catch (\Exception $e) { if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg("Resposta do Correios: " . SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } return $result; }
/** * @param PreListaDePostagem $params * * @return \PhpSigep\Services\Result<\PhpSigep\Model\FechaPlpVariosServicosRetorno> */ public function execute(\PhpSigep\Model\PreListaDePostagem $params) { $xmlDaPreLista = $this->getPlpXml($params); $listaEtiquetas = array(); foreach ($params->getEncomendas() as $objetoPostal) { $listaEtiquetas[] = $objetoPostal->getEtiqueta()->getEtiquetaSemDv(); } $xml = utf8_encode($xmlDaPreLista->flush()); // $xml = utf8_encode($xml); // $xml = iconv('UTF-8', 'ISO-8859-1', $xml); $soapArgs = array('xml' => $xml, 'idPlpCliente' => '', 'cartaoPostagem' => $params->getAccessData()->getCartaoPostagem(), 'listaEtiquetas' => $listaEtiquetas, 'usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha()); $result = new Result(); try { $r = SoapClientFactory::getSoapClient()->fechaPlpVariosServicos($soapArgs); /*if (class_exists('\StaLib_Logger')) { \StaLib_Logger::log('Retorno SIGEP fecha PLP: ' . print_r($r, true)); }*/ if ($r instanceof \SoapFault) { throw $r; } if ($r && $r->return) { $result->setResult(new FechaPlpVariosServicosRetorno(array('idPlp' => $r->return))); } else { $result->setErrorCode(0); $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $r . '"'); } } catch (\Exception $e) { if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } return $result; }
/** * @param \PhpSigep\Model\GeraDigitoVerificadorEtiquetas $params * * @return Etiqueta[] */ public function execute(\PhpSigep\Model\GeraDigitoVerificadorEtiquetas $params) { $soapArgs = array('etiquetas' => array(), 'usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha()); // É necessário garantir que o array estará indexado por order natural começando do zero para setarmos os // DV retornados pelo webservice. $etiquetas = array_values($params->getEtiquetas()); /** @var $etiqueta Etiqueta */ foreach ($etiquetas as $etiqueta) { $soapArgs['etiquetas'][] = $etiqueta->getEtiquetaSemDv(); } $result = new Result(); try { $soapReturn = SoapClientFactory::getSoapClient()->geraDigitoVerificadorEtiquetas($soapArgs); if ($soapReturn && is_object($soapReturn) && $soapReturn->return) { if (!is_array($soapReturn->return)) { $soapReturn->return = (array) $soapReturn->return; } foreach ($soapReturn->return as $k => $dv) { $etiquetas[$k]->setDv((int) $dv); } $result->setResult($etiquetas); } else { $result->setErrorCode(0); $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $soapReturn . '"'); } } catch (\Exception $e) { if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } return $result; }
public function execute($cep) { $cep = preg_replace('/[^\\d]/', '', $cep); $soapArgs = array('cep' => $cep); $r = SoapClientFactory::getSoapClient()->consultaCep($soapArgs); $errorCode = null; $errorMsg = null; $result = new Result(); if (!$r) { $errorCode = 0; } else { if ($r instanceof \SoapFault) { $errorCode = $r->getCode(); $errorMsg = SoapClientFactory::convertEncoding($r->getMessage()); $result->setSoapFault($r); } else { if ($r instanceof \stdClass) { if (property_exists($r, 'return') && $r->return instanceof \stdClass) { $consultaCepResposta = new ConsultaCepResposta(); $consultaCepResposta->setBairro(SoapClientFactory::convertEncoding($r->return->bairro)); $consultaCepResposta->setCep($r->return->cep); $consultaCepResposta->setCidade(SoapClientFactory::convertEncoding($r->return->cidade)); $consultaCepResposta->setComplemento1(SoapClientFactory::convertEncoding($r->return->complemento)); $consultaCepResposta->setComplemento2(SoapClientFactory::convertEncoding($r->return->complemento2)); $consultaCepResposta->setEndereco(SoapClientFactory::convertEncoding($r->return->end)); $consultaCepResposta->setId($r->return->id); $consultaCepResposta->setUf($r->return->uf); $result->setResult($consultaCepResposta); } else { $errorCode = 0; $errorMsg = "Resposta em branco. Confirme se o CEP '{$cep}' realmente existe."; } } else { $errorCode = 0; $errorMsg = "A resposta do Correios não está no formato esperado."; } } } $result->setErrorCode($errorCode); $result->setErrorMsg($errorMsg); return $result; }
/** * @param \PhpSigep\Model\CalcPrecoPrazo $params * * @throws Exception * @throws \Exception * @return Result<\PhpSigep\Model\CalcPrecoPrazoRespostaIterator[]> */ public function execute(\PhpSigep\Model\CalcPrecoPrazo $params) { $larguraMinima = 0; $alturaMinima = 0; $comprimentoMinimo = 16; $diametroMinimo = 0; $tipoEmbalagem = $params->getDimensao()->getTipo(); $ehEnvelope = false; if ($tipoEmbalagem == Dimensao::TIPO_ENVELOPE) { $ehEnvelope = true; $formatoEncomenda = 3; $larguraMinima = 11; } else { if ($tipoEmbalagem == Dimensao::TIPO_PACOTE_CAIXA) { $formatoEncomenda = 1; $alturaMinima = 2; $larguraMinima = 11; } else { if ($tipoEmbalagem == Dimensao::TIPO_ROLO_CILINDRO) { $formatoEncomenda = 2; $comprimentoMinimo = 18; $diametroMinimo = 5; } else { throw new Exception('Tipo de embalagem "' . $tipoEmbalagem . '" não reconhecido.'); } } } $maoPropria = false; $valorDeclarado = 0; $avisoRecebimento = false; $servicosAdicionais = $params->getServicosAdicionais(); $servicosAdicionais = $servicosAdicionais ? $servicosAdicionais : array(); foreach ($servicosAdicionais as $servicoAdicional) { if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) { $maoPropria = true; } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO)) { if (!$servicoAdicional->getValorDeclarado()) { throw new Exception('Para usar o serviço "valor declarado" é necessário declarar o valor da mercadoria.'); } $valorDeclarado = $servicoAdicional->getValorDeclarado(); } else { if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) { $avisoRecebimento = true; } } } } $servivosDePostagem = array(); /** @var $servivoDePostagem ServicoDePostagem */ foreach ($params->getServicosPostagem() as $servivoDePostagem) { $servivosDePostagem[] = $servivoDePostagem->getCodigo(); } $ajustarDimensaoMinima = $params->getAjustarDimensaoMinima(); $comprimento = (int) $params->getDimensao()->getComprimento(); $comprimento = $comprimento < $comprimentoMinimo && $ajustarDimensaoMinima ? $comprimentoMinimo : $comprimento; $altura = $ehEnvelope ? 0 : (int) $params->getDimensao()->getAltura(); $altura = $altura < $alturaMinima && $ajustarDimensaoMinima ? $alturaMinima : $altura; $largura = (int) $params->getDimensao()->getLargura(); $largura = $largura < $larguraMinima && $ajustarDimensaoMinima ? $larguraMinima : $largura; $diametro = (int) $params->getDimensao()->getDiametro(); $diametro = $diametro < $diametroMinimo && $ajustarDimensaoMinima ? $diametroMinimo : $largura; $soapArgs = array('nCdEmpresa' => $params->getAccessData()->getCodAdministrativo(), 'sDsSenha' => $params->getAccessData()->getSenha(), 'nCdServico' => implode(',', $servivosDePostagem), 'sCepOrigem' => str_replace('-', '', $params->getCepOrigem()), 'sCepDestino' => str_replace('-', '', $params->getCepDestino()), 'nVlPeso' => $params->getPeso(), 'nCdFormato' => $formatoEncomenda, 'nVlComprimento' => $comprimento, 'nVlAltura' => $altura, 'nVlLargura' => $largura, 'nVlDiametro' => $diametro, 'sCdMaoPropria' => $maoPropria ? 'S' : 'N', 'nVlValorDeclarado' => $valorDeclarado, 'sCdAvisoRecebimento' => $avisoRecebimento ? 'S' : 'N'); $cacheKey = md5(serialize($soapArgs)); $cache = Bootstrap::getConfig()->getCacheInstance(); if ($cachedResult = $cache->getItem($cacheKey)) { return unserialize($cachedResult); } $result = new Result(); try { $r = SoapClientFactory::getSoapCalcPrecoPrazo()->calcPrecoPrazo($soapArgs); } catch (\Exception $e) { $message = $e->getMessage(); if ($message == 'Service Unavailable') { if (!self::$calcPrecosPrazosServiceUnavailable) { //Tenta mais uma vez self::$calcPrecosPrazosServiceUnavailable = true; sleep(1); return $this->calcPrecoPrazo($params); } } if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } // if (class_exists('\StaLib_Logger')) { // \StaLib_Logger::log('Retorno SIGEP: ' . print_r($r, true)); // } $retorno = array(); if (is_object($r) && $r->CalcPrecoPrazoResult && is_object($r->CalcPrecoPrazoResult) && $r->CalcPrecoPrazoResult->Servicos && is_object($r->CalcPrecoPrazoResult->Servicos)) { if ($r->CalcPrecoPrazoResult->Servicos->cServico) { $servicos = $r->CalcPrecoPrazoResult->Servicos->cServico; $servicos = is_array($servicos) ? $servicos : array($servicos); foreach ($servicos as $servico) { $valor = (double) str_replace(',', '.', str_replace('.', '', $servico->Valor)); $valorMaoPropria = str_replace('.', '', $servico->ValorMaoPropria); $valorMaoPropria = (double) str_replace(',', '.', $valorMaoPropria); $valorAvisoRecebimento = str_replace('.', '', $servico->ValorAvisoRecebimento); $valorAvisoRecebimento = (double) str_replace(',', '.', $valorAvisoRecebimento); $valorValorDeclarado = str_replace('.', '', $servico->ValorValorDeclarado); $valorValorDeclarado = (double) str_replace(',', '.', $valorValorDeclarado); $item = new \PhpSigep\Model\CalcPrecoPrazoResposta(array('servico' => new \PhpSigep\Model\ServicoDePostagem($servico->Codigo), 'valor' => $valor, 'prazoEntrega' => (int) $servico->PrazoEntrega, 'valorMaoPropria' => $valorMaoPropria, 'valorAvisoRecebimento' => $valorAvisoRecebimento, 'valorValorDeclarado' => $valorValorDeclarado, 'entregaDomiciliar' => $servico->EntregaDomiciliar == 'S', 'entregaSabado' => $servico->EntregaSabado == 'S')); $item->setErroCodigo($servico->Erro); if ($item->getErroCodigo() && ($item->getErroCodigo() != 10 || !$item->getValor())) { // Se entrar aqui significa que tem Erro e que esse Erro é diferente de 10 ou o Erro é 10 mas não // não foi retornando o Valor. // O erro "10" é mais um aviso do que um erro. Se for erro 10 e tiver valor, não considera um erro. $msgErro = $servico->MsgErro; $msgErro = SoapClientFactory::convertEncoding($msgErro); $item->setErroMsg($msgErro); } else { $item->setErroCodigo(null); } $retorno[] = $item; } } else { $result->setErrorCode(0); $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "Faltando a entrada \'cServico\'."'); } } else { $result->setErrorCode(0); if (is_object($r)) { $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "A resposta recebida é um objeto, mas este objeto não possui todos as entradas necessárias."'); } else { $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $r . '"'); } } $retornoIterator = new \PhpSigep\Model\CalcPrecoPrazoRespostaIterator($retorno); $result->setResult($retorno); if (!$result->hasError()) { if ($retornoIterator->todosTemErro()) { $erros = array(); /** @var $retItem \PhpSigep\Model\CalcPrecoPrazoResposta */ foreach ($retornoIterator as $retItem) { $erros[$retItem->getErroCodigo()] = $retItem; } /** @var $exception \PhpSigep\Model\CalcPrecoPrazoResposta */ $exception = null; $errosPrioritarios = array('999', '-3', '-2', '-4', '-33', '7'); foreach ($errosPrioritarios as $erroPrioritario) { if (isset($erros[$erroPrioritario])) { $exception = $erros[$erroPrioritario]; break; } } if (!$exception) { $exception = reset($erros); } $result->setErrorCode($exception->getErroCodigo()); $result->setErrorMsg($exception->getErroMsg()); } else { $cache->setItem($cacheKey, serialize($result)); } } return $result; }
/** * @param \PhpSigep\Model\RastrearObjeto $params * @return \PhpSigep\Services\Result<\PhpSigep\Model\RastrearObjetoResultado[]> * @throws Exception\RastrearObjeto\TipoResultadoInvalidoException * @throws Exception\RastrearObjeto\TipoInvalidoException */ public function execute(\PhpSigep\Model\RastrearObjeto $params) { switch ($params->getTipo()) { case \PhpSigep\Model\RastrearObjeto::TIPO_LISTA_DE_OBJETOS: $tipo = 'L'; break; case \PhpSigep\Model\RastrearObjeto::TIPO_INTERVALO_DE_OBJETOS: $tipo = 'F'; break; default: throw new \PhpSigep\Services\Real\Exception\RastrearObjeto\TipoInvalidoException("Tipo '" . $params->getTipo() . "' não é valido"); break; } switch ($params->getTipoResultado()) { case \PhpSigep\Model\RastrearObjeto::TIPO_RESULTADO_APENAS_O_ULTIMO_EVENTO: $tipoResultado = 'U'; break; case \PhpSigep\Model\RastrearObjeto::TIPO_RESULTADO_TODOS_OS_EVENTOS: $tipoResultado = 'T'; break; default: throw new \PhpSigep\Services\Real\Exception\RastrearObjeto\TipoResultadoInvalidoException("Tipo de resultado '" . $params->getTipo() . "' não é valido"); break; } $soapArgs = array('usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha(), 'tipo' => $tipo, 'resultado' => $tipoResultado, 'lingua' => $params->getIdioma(), 'objetos' => implode('', array_map(function (\PhpSigep\Model\Etiqueta $etiqueta) { return $etiqueta->getEtiquetaComDv(); }, $params->getEtiquetas()))); $result = new Result(); try { $soapReturn = SoapClientFactory::getRastreioObjetos()->buscaEventos($soapArgs); if ($soapReturn && is_object($soapReturn) && $soapReturn->return) { try { if (!is_array($soapReturn->return->objeto)) { $soapReturn->return->objeto = array($soapReturn->return->objeto); } $resultado = array(); foreach ($soapReturn->return->objeto as $objeto) { // Verifica se ocorreu algum erro ao consultar a etiqueta if (isset($objeto->erro)) { throw new RastrearObjetoException(SoapClientFactory::convertEncoding('(' . $objeto->numero . ') ' . $objeto->erro)); } $eventos = new RastrearObjetoResultado(); $eventos->setEtiqueta(new Etiqueta(array('etiquetaComDv' => $objeto->numero))); $ev = $objeto->evento; $evento = new RastrearObjetoEvento(); $evento->setTipo($ev->tipo); $evento->setStatus($ev->status); $evento->setDataHora(\DateTime::createFromFormat('d/m/Y H:i', $ev->data . ' ' . $ev->hora)); $evento->setDescricao(SoapClientFactory::convertEncoding($ev->descricao)); $evento->setDetalhe(isset($ev->detalhe) ? $ev->detalhe : ''); $evento->setLocal($ev->local); $evento->setCodigo($ev->codigo); $evento->setCidade($ev->cidade); $evento->setUf($ev->uf); // Sempre adiciona o recebedor ao resultado, mesmo ele sendo exibdo apenas quanto 'tipo' = BDE e 'status' = 01 $evento->setRecebedor(isset($ev->recebedor) && !empty($ev->recebedor) ? trim($ev->recebedor) : ''); // Adiciona o evento ao resultado $eventos->addEvento($evento); $resultado[] = $eventos; } $result->setResult($resultado); } catch (RastrearObjetoException $e) { $result->setErrorCode(0); $result->setErrorMsg("Erro de comunicação com o Correios ao tentar buscar os dados de rastreamento. Detalhes: " . $e->getMessage()); } } else { $result->setErrorCode(0); $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $soapReturn . '"'); } } catch (\Exception $e) { if ($e instanceof \SoapFault) { $result->setIsSoapFault(true); $result->setErrorCode($e->getCode()); $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage())); } else { $result->setErrorCode($e->getCode()); $result->setErrorMsg($e->getMessage()); } } return $result; }