Skip to content

Commit

Permalink
Merge pull request #44 from lucassmacedo/master
Browse files Browse the repository at this point in the history
Nova Adequação Correios
  • Loading branch information
cagartner committed Sep 10, 2020
2 parents 80a4d47 + 499bd05 commit eefba56
Showing 1 changed file with 98 additions and 95 deletions.
193 changes: 98 additions & 95 deletions src/Cagartner/CorreiosConsulta/CorreiosConsulta.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand All @@ -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)
Expand All @@ -51,135 +54,131 @@ 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;

$html = $curl->simple(self::CEP_URL, $data);

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']);

Expand All @@ -200,29 +199,30 @@ public function cep($cep)

/**
* @param $codigo
*
* @return array|bool
* @throws \Exception
*/
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("<br>", phpQuery::pq($tr)->find('td:eq(0)')->html());
list($status, $encaminhado) = explode("<br>", phpQuery::pq($tr)->find('td:eq(1)')->html());
[$data, $hora, $local] = explode("<br>", phpQuery::pq($tr)->find('td:eq(0)')->html());
[$status, $encaminhado] = explode("<br>", 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);
Expand All @@ -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)
Expand All @@ -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);
}
}

0 comments on commit eefba56

Please sign in to comment.