From c68e3bd39747445959fc2b71f943850e8df519f2 Mon Sep 17 00:00:00 2001
From: Dezwork Digital <35408049+dezwork@users.noreply.github.com>
Date: Wed, 7 Jul 2021 13:20:52 -0300
Subject: [PATCH] Add files via upload
---
CorreiosConsulta.php | 266 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 266 insertions(+)
create mode 100644 CorreiosConsulta.php
diff --git a/CorreiosConsulta.php b/CorreiosConsulta.php
new file mode 100644
index 0000000..9b5dfd6
--- /dev/null
+++ b/CorreiosConsulta.php
@@ -0,0 +1,266 @@
+ '04014',
+ 'sedex_a_cobrar' => '40045',
+ 'sedex_10' => '40215',
+ 'sedex_hoje' => '40290',
+ 'pac' => '04510',
+ 'pac_contrato' => '04669',
+ 'sedex_contrato' => '04162',
+ 'esedex' => '81019',
+ 'mini_envios'=>'04227'
+ );
+
+ public static function getTipos()
+ {
+ return self::$tipos;
+ }
+
+ /**
+ * Verifica se e uma solicitacao de varios $tipos
+ *
+ * @param $valor string
+ * @return boolean
+ */
+ public static function getTipoIsArray($valor)
+ {
+ return count(explode(",", $valor)) > 1 ?: false;
+ }
+
+ /**
+ * @param $valor string
+ * @return string
+ */
+ public static function getTipoIndex($valor)
+ {
+ return array_search($valor, self::getTipos());
+ }
+
+ /**
+ * Retorna todos os codigos em uma linha
+ *
+ * @param $valor string
+ * @return string
+ */
+ public static function getTipoInline($valor)
+ {
+ $explode = explode(",", $valor);
+ $tipos = array();
+
+ foreach ($explode as $value) {
+ $tipos[] = self::$tipos[$value];
+ }
+
+ return implode(",", $tipos);
+ }
+
+ /**
+ * @param $dados
+ * @param array $options
+ * @return array|mixed
+ */
+ public function frete($dados, $options = array())
+ {
+ $endpoint = self::FRETE_URL;
+ $tipos = self::getTipoInline($dados['tipo']);
+ $return = array();
+
+ $formatos = array(
+ '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),
+ 'entrega_domiciliar' => $rate->EntregaDomiciliar === 'S',
+ 'entrega_sabado' => $rate->EntregaSabado === 'S',
+ 'erro' => array('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(
+ 'relaxation' => $cep,
+ 'tipoCEP' => 'ALL',
+ 'semelhante' => 'N',
+ );
+
+ $curl = new Curl;
+
+ $html = $curl->simple(self::CEP_URL, $data);
+
+ phpQuery::newDocumentHTML($html, $charset = 'ISO-8859-1');
+
+ $pq_form = phpQuery::pq('');
+ $pesquisa = array();
+ if (phpQuery::pq('.tmptabela')) {
+ $linha = 0;
+ foreach (phpQuery::pq('.tmptabela tr') as $pq_div) {
+ if ($linha) {
+ $itens = array();
+ foreach (phpQuery::pq('td', $pq_div) as $pq_td) {
+ $children = $pq_td->childNodes;
+ $innerHTML = '';
+ foreach ($children as $child) {
+ $innerHTML .= $child->ownerDocument->saveXML($child);
+ }
+ $texto = preg_replace("/?[a-z0-9]+;/i", "", $innerHTML);
+ $itens[] = trim($texto);
+ }
+ $dados = array();
+ $dados['logradouro'] = trim($itens[0]);
+ $dados['bairro'] = trim($itens[1]);
+ $dados['cidade/uf'] = trim($itens[2]);
+ $dados['cep'] = trim($itens[3]);
+
+ $dados['cidade/uf'] = explode('/', $dados['cidade/uf']);
+
+ $dados['cidade'] = trim($dados['cidade/uf'][0]);
+
+ $dados['uf'] = trim($dados['cidade/uf'][1]);
+
+ unset($dados['cidade/uf']);
+
+ $pesquisa = $dados;
+ }
+
+ $linha++;
+ }
+ }
+ return $pesquisa;
+ }
+
+ /**
+ * @param $codigo
+ * @return array|bool
+ * @throws \Exception
+ */
+ public function rastrear($codigo)
+ {
+ $curl = new Curl;
+
+ $html = $curl->simple(self::RASTREIO_URL, array(
+ "Objetos" => $codigo
+ ));
+
+ phpQuery::newDocumentHTML($html, $charset = 'utf-8');
+
+ $rastreamento = array();
+ $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());
+
+ $rastreamento[] = array('data' => trim($data) . " " . trim($hora), 'local' => trim($local), 'status' => trim(strip_tags($status)));
+
+ if (trim($encaminhado)) {
+ $rastreamento[count($rastreamento) - 1]['encaminhado'] = trim($encaminhado);
+ }
+ }
+ }
+
+ if (!count($rastreamento))
+ return false;
+
+ return $rastreamento;
+ }
+
+ /**
+ * @param $postcode
+ * @return string|string[]|null
+ */
+ protected static function cleanPostcode($postcode)
+ {
+ return preg_replace("/[^0-9]/", '', $postcode);
+ }
+
+ /**
+ * @param $value
+ * @return float
+ */
+ protected function cleanMoney($value)
+ {
+ return (float) str_replace(',', '.', str_replace('.', '', $value));
+ }
+
+ /**
+ * @param $value
+ * @return int
+ */
+ protected function cleanInteger($value)
+ {
+ return (int) str_replace(',', '.', $value);
+ }
+}