From 499bd055a5005e63e607a4adc57745e03fd15653 Mon Sep 17 00:00:00 2001 From: Lucas Macedo Date: Thu, 10 Sep 2020 15:13:03 -0300 Subject: [PATCH] =?UTF-8?q?Nova=20Adequa=C3=A7=C3=A3o=20Correios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A API do correios está obrigando que cada "codigo" de frete seja feito por consulta, desta forma eu adequei o script para que cada "codigo" seja feito em uma consulta separada e seja concatenado posteriormente os resultados. --- .../CorreiosConsulta/CorreiosConsulta.php | 193 +++++++++--------- 1 file changed, 98 insertions(+), 95 deletions(-) diff --git a/src/Cagartner/CorreiosConsulta/CorreiosConsulta.php b/src/Cagartner/CorreiosConsulta/CorreiosConsulta.php index c9fb9bb..ac47018 100644 --- a/src/Cagartner/CorreiosConsulta/CorreiosConsulta.php +++ b/src/Cagartner/CorreiosConsulta/CorreiosConsulta.php @@ -11,16 +11,17 @@ class CorreiosConsulta const CEP_URL = 'http://www.buscacep.correios.com.br/sistemas/buscacep/resultadoBuscaCepEndereco.cfm'; const RASTREIO_URL = 'https://www2.correios.com.br/sistemas/rastreamento/resultado_semcontent.cfm'; - private static $tipos = array( - 'sedex' => '04014', - 'sedex_a_cobrar' => '40045', - 'sedex_10' => '40215', - 'sedex_hoje' => '40290', - 'pac' => '04510', - 'pac_contrato' => '04669', - 'sedex_contrato' => '04162', - 'esedex' => '81019', - ); + private static $tipos + = [ + 'sedex' => '04014', + 'sedex_a_cobrar' => '40045', + 'sedex_10' => '40215', + 'sedex_hoje' => '40290', + 'pac' => '04510', + 'pac_contrato' => '04669', + 'sedex_contrato' => '04162', + 'esedex' => '81019', + ]; public static function getTipos() { @@ -31,15 +32,17 @@ public static function getTipos() * Verifica se e uma solicitacao de varios $tipos * * @param $valor string + * * @return boolean */ public static function getTipoIsArray($valor) { - return count(explode(",", $valor)) > 1 ?: false; + return count(explode(",", $valor)) > 1 ?: FALSE; } /** * @param $valor string + * * @return string */ public static function getTipoIndex($valor) @@ -51,107 +54,103 @@ public static function getTipoIndex($valor) * Retorna todos os codigos em uma linha * * @param $valor string + * * @return string */ public static function getTipoInline($valor) { $explode = explode(",", $valor); - $tipos = array(); + $tipos = []; foreach ($explode as $value) { $tipos[] = self::$tipos[$value]; } - return implode(",", $tipos); + return $tipos; } /** - * @param $dados + * @param $dados * @param array $options + * * @return array|mixed */ - public function frete($dados, $options = array()) + public function frete($data, $options = []) { $endpoint = self::FRETE_URL; - $tipos = self::getTipoInline($dados['tipo']); - $return = array(); + $tipos = self::getTipoInline($data['tipo']); + $return = []; - $formatos = array( - 'caixa' => 1, - 'rolo' => 2, + $formatos = [ + 'caixa' => 1, + 'rolo' => 2, 'envelope' => 3, - ); - - $dados['tipo'] = $tipos; - $dados['formato'] = $formatos[$dados['formato']]; - - $dados['cep_destino'] = self::cleanPostcode($dados['cep_destino']); - $dados['cep_origem'] = self::cleanPostcode($dados['cep_origem']); - - $params = array( - 'nCdEmpresa' => (isset($dados['empresa']) ? $dados['empresa'] : ''), - 'sDsSenha' => (isset($dados['senha']) ? $dados['senha'] : ''), - 'nCdServico' => $dados['tipo'], - 'sCepOrigem' => $dados['cep_origem'], - 'sCepDestino' => $dados['cep_destino'], - 'nVlPeso' => $dados['peso'], - 'nCdFormato' => $dados['formato'], - 'nVlComprimento' => $dados['comprimento'], - 'nVlAltura' => $dados['altura'], - 'nVlLargura' => $dados['largura'], - 'nVlDiametro' => $dados['diametro'], - 'sCdMaoPropria' => (isset($dados['mao_propria']) && $dados['mao_propria'] ? 'S' : 'N'), - 'nVlValorDeclarado' => (isset($dados['valor_declarado']) ? $dados['valor_declarado'] : 0), - 'sCdAvisoRecebimento' => (isset($dados['aviso_recebimento']) && $dados['aviso_recebimento'] ? 'S' : 'N'), - 'sDtCalculo' => date('d/m/Y'), - ); - - $curl = new Curl(); - if ($result = $curl->simple($endpoint, $params)) { - $result = simplexml_load_string($result); - $rates = array(); - $collect = (array) $result->Servicos; - - if (is_object($collect['cServico'])) { - $rates[] = $collect['cServico']; - } else { - $rates = $collect['cServico']; - } - - foreach ($rates as $rate) { - $return[] = array( - 'codigo' => (int) $rate->Codigo, - 'valor' => self::cleanMoney($rate->Valor), - 'prazo' => self::cleanInteger($rate->PrazoEntrega), - 'mao_propria' => self::cleanMoney($rate->ValorMaoPropria), - 'aviso_recebimento' => self::cleanMoney($rate->ValorAvisoRecebimento), - 'valor_declarado' => self::cleanMoney($rate->ValorValorDeclarado), + ]; + + foreach ($tipos as $tipo) { + $dados = $data; + $dados['formato'] = $formatos[$dados['formato']]; + + $dados['cep_destino'] = self::cleanPostcode($dados['cep_destino']); + $dados['cep_origem'] = self::cleanPostcode($dados['cep_origem']); + + $params = [ + 'nCdEmpresa' => (isset($dados['empresa']) ? $dados['empresa'] : ''), + 'sDsSenha' => (isset($dados['senha']) ? $dados['senha'] : ''), + 'nCdServico' => $tipo, + 'sCepOrigem' => $dados['cep_origem'], + 'sCepDestino' => $dados['cep_destino'], + 'nVlPeso' => $dados['peso'], + 'nCdFormato' => $dados['formato'], + 'nVlComprimento' => $dados['comprimento'], + 'nVlAltura' => $dados['altura'], + 'nVlLargura' => $dados['largura'], + 'nVlDiametro' => $dados['diametro'], + 'sCdMaoPropria' => (isset($dados['mao_propria']) && $dados['mao_propria'] ? 'S' : 'N'), + 'nVlValorDeclarado' => (isset($dados['valor_declarado']) ? $dados['valor_declarado'] : 0), + 'sCdAvisoRecebimento' => (isset($dados['aviso_recebimento']) && $dados['aviso_recebimento'] ? 'S' : 'N'), + 'sDtCalculo' => date('d/m/Y'), + ]; + $curl = new Curl(); + if ($result = $curl->simple($endpoint, $params)) { + $result = simplexml_load_string($result); + $rates = []; + $collect = (array)$result->Servicos; + + $rate = $collect['cServico']; + + $return[] = [ + 'codigo' => (int)$rate->Codigo, + 'valor' => self::cleanMoney($rate->Valor), + 'prazo' => self::cleanInteger($rate->PrazoEntrega), + 'mao_propria' => self::cleanMoney($rate->ValorMaoPropria), + 'aviso_recebimento' => self::cleanMoney($rate->ValorAvisoRecebimento), + 'valor_declarado' => self::cleanMoney($rate->ValorValorDeclarado), 'entrega_domiciliar' => $rate->EntregaDomiciliar === 'S', - 'entrega_sabado' => $rate->EntregaSabado === 'S', - 'erro' => array('codigo' => (float) $rate->Erro, 'mensagem' => $rate->MsgErro), - ); - } + 'entrega_sabado' => $rate->EntregaSabado === 'S', + 'erro' => ['codigo' => (real)$rate->Erro, 'mensagem' => (real)$rate->MsgErro], + ]; - if (self::getTipoIsArray($tipos) === false) { - return isset($return[0]) ? $return[0] : []; } } + return $return; } /** * @param $cep + * * @return array * @throws \Exception */ public function cep($cep) { - $data = array( + $data = [ 'relaxation' => $cep, - 'tipoCEP' => 'ALL', + 'tipoCEP' => 'ALL', 'semelhante' => 'N', - ); + ]; $curl = new Curl; @@ -159,27 +158,27 @@ public function cep($cep) phpQuery::newDocumentHTML($html, $charset = 'ISO-8859-1'); - $pq_form = phpQuery::pq(''); - $pesquisa = array(); + $pq_form = phpQuery::pq(''); + $pesquisa = []; if (phpQuery::pq('.tmptabela')) { $linha = 0; foreach (phpQuery::pq('.tmptabela tr') as $pq_div) { if ($linha) { - $itens = array(); + $itens = []; foreach (phpQuery::pq('td', $pq_div) as $pq_td) { - $children = $pq_td->childNodes; + $children = $pq_td->childNodes; $innerHTML = ''; foreach ($children as $child) { $innerHTML .= $child->ownerDocument->saveXML($child); } - $texto = preg_replace("/&#?[a-z0-9]+;/i", "", $innerHTML); - $itens[] = preg_replace(['(\s+)u', '(^\s|\s$)u'], [' ', ''], $texto); + $texto = preg_replace("/&#?[a-z0-9]+;/i", "", $innerHTML); + $itens[] = trim($texto); } - $dados = array(); + $dados = []; $dados['logradouro'] = trim($itens[0]); - $dados['bairro'] = trim($itens[1]); - $dados['cidade/uf'] = trim($itens[2]); - $dados['cep'] = trim($itens[3]); + $dados['bairro'] = trim($itens[1]); + $dados['cidade/uf'] = trim($itens[2]); + $dados['cep'] = trim($itens[3]); $dados['cidade/uf'] = explode('/', $dados['cidade/uf']); @@ -200,6 +199,7 @@ public function cep($cep) /** * @param $codigo + * * @return array|bool * @throws \Exception */ @@ -207,22 +207,22 @@ public function rastrear($codigo) { $curl = new Curl; - $html = $curl->simple(self::RASTREIO_URL, array( + $html = $curl->simple(self::RASTREIO_URL, [ "Objetos" => $codigo - )); + ]); phpQuery::newDocumentHTML($html, $charset = 'utf-8'); - $rastreamento = array(); - $c = 0; + $rastreamento = []; + $c = 0; foreach (phpQuery::pq('tr') as $tr) { $c++; if (count(phpQuery::pq($tr)->find('td')) == 2) { - list($data, $hora, $local) = explode("
", phpQuery::pq($tr)->find('td:eq(0)')->html()); - list($status, $encaminhado) = explode("
", phpQuery::pq($tr)->find('td:eq(1)')->html()); + [$data, $hora, $local] = explode("
", phpQuery::pq($tr)->find('td:eq(0)')->html()); + [$status, $encaminhado] = explode("
", phpQuery::pq($tr)->find('td:eq(1)')->html()); - $rastreamento[] = array('data' => strip_tags(trim($data)) . " " . strip_tags(trim($hora)), 'local' => strip_tags(trim($local)), 'status' => strip_tags(trim($status))); + $rastreamento[] = ['data' => trim($data) . " " . trim($hora), 'local' => trim($local), 'status' => trim(strip_tags($status))]; if (trim($encaminhado)) { $rastreamento[count($rastreamento) - 1]['encaminhado'] = trim($encaminhado); @@ -231,13 +231,14 @@ public function rastrear($codigo) } if (!count($rastreamento)) - return false; + return FALSE; return $rastreamento; } /** * @param $postcode + * * @return string|string[]|null */ protected static function cleanPostcode($postcode) @@ -247,19 +248,21 @@ protected static function cleanPostcode($postcode) /** * @param $value + * * @return float */ protected function cleanMoney($value) { - return (float) str_replace(',', '.', str_replace('.', '', $value)); + return (float)str_replace(',', '.', str_replace('.', '', $value)); } /** * @param $value + * * @return int */ protected function cleanInteger($value) { - return (int) str_replace(',', '.', $value); + return (int)str_replace(',', '.', $value); } }