/**
  * Metodo para realizar a consulta
  *
  * @param  string $cnpj CNPJ
  * @param  string $ie IE - Não Testado
  * @param  string $paramBot ParamBot parametro enviado para validação do captcha
  * @param  string $captcha CAPTCHA
  * @param  string $stringCookie COOKIE
  * @throws Exception
  * @return array  Dados da empresa
  */
 public static function consulta($cnpj, $ie, $paramBot, $captcha, $stringCookie)
 {
     $arrayCookie = explode(';', $stringCookie);
     if (!Utils::isCnpj($cnpj)) {
         throw new Exception('O CNPJ informado não é válido.');
     }
     $client = new Client();
     #$client->getClient()->setDefaultOption('timeout', 120);
     $client->getClient()->setDefaultOption('config/curl/' . CURLOPT_TIMEOUT, 0);
     $client->getClient()->setDefaultOption('config/curl/' . CURLOPT_TIMEOUT_MS, 0);
     $client->getClient()->setDefaultOption('config/curl/' . CURLOPT_CONNECTTIMEOUT, 0);
     $client->getClient()->setDefaultOption('config/curl/' . CURLOPT_RETURNTRANSFER, true);
     $client->setHeader('Host', 'pfeserv1.fazenda.sp.gov.br');
     $client->setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0');
     $client->setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9, */* ;q=0.8');
     $client->setHeader('Accept-Language', 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3');
     $client->setHeader('Accept-Encoding', 'gzip, deflate');
     $client->setHeader('Referer', 'http://www.sintegra.gov.br/new_bv.html');
     $client->setHeader('Cookie', $arrayCookie[0]);
     $client->setHeader('Connection', 'keep-alive');
     $servico = strlen($cnpj) > 0 ? 'cnpj' : 'ie';
     $consultaPor = strlen($cnpj) > 0 ? 'Consulta por CNPJ' : 'Consulta por IE';
     $param = array('hidFlag' => '0', 'cnpj' => Utils::unmask($cnpj), 'ie' => Utils::unmask($ie), 'paramBot' => $paramBot, 'Key' => $captcha, 'servico' => $servico, 'botao' => $consultaPor);
     $crawler = $client->request('POST', 'http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/sintegra', $param);
     $imageError = 'O valor da imagem esta incorreto ou expirou. Verifique novamente a imagem e digite exatamente os 5 caracteres exibidos.';
     $checkError = $crawler->filter('body > center')->eq(1)->count();
     if ($checkError && $imageError == trim($crawler->filter('body > center')->eq(1)->text())) {
         throw new Exception($imageError, 99);
     }
     $center_ = $crawler->filter('body > center');
     if (count($center_) == 0) {
         throw new Exception('Serviço indisponível!. Tente novamente.', 99);
     }
     //self::saveFile($client);
     $html = self::parseContent($client->getResponse()->__toString());
     $crawler = new \Symfony\Component\DomCrawler\Crawler($html);
     $data = self::parseSelectors($crawler);
     return $data;
 }
 public function testCnpjFalso()
 {
     $this->assertFalse(Utils::isCnpj(FakerBR::cnpj(false)));
 }
 /**
  * Metodo para realizar a consulta
  *
  * @param  string $cnpj CNPJ
  * @param  string $captcha CAPTCHA
  * @param  string $stringCookie COOKIE
  * @throws Exception
  * @return array  Dados da empresa
  */
 public static function consulta($cnpj, $captcha, $stringCookie)
 {
     $result = array();
     $arrayCookie = explode(';', $stringCookie);
     if (!Utils::isCnpj($cnpj)) {
         throw new Exception('O CNPJ informado não é válido');
     }
     $client = new Client();
     $client->setHeader('Host', 'www.receita.fazenda.gov.br');
     $client->setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0');
     $client->setHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9, */* ;q=0.8');
     $client->setHeader('Accept-Language', 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3');
     $client->setHeader('Accept-Encoding', 'gzip, deflate');
     $client->setHeader('Referer', 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp');
     $client->setHeader('Cookie', $arrayCookie[0]);
     $client->setHeader('Connection', 'keep-alive');
     $param = array('origem' => 'comprovante', 'cnpj' => Utils::unmask($cnpj), 'txtTexto_captcha_serpro_gov_br' => $captcha, 'submit1' => 'Consultar', 'search_type' => 'cnpj');
     $crawler = $client->request('POST', 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp', $param);
     if ($crawler->filter('body > table:nth-child(3) > tr:nth-child(2) > td > b > font')->count() > 0) {
         throw new Exception('Erro ao consultar. O CNPJ informado não existe no cadastro.', 99);
     }
     $td = $crawler->filter('body > table:nth-child(3) > tr > td');
     foreach ($td->filter('td') as $td) {
         $td = new Crawler($td);
         if ($td->filter('font:nth-child(1)')->count() > 0) {
             $key = trim(preg_replace('/\\s+/', ' ', $td->filter('font:nth-child(1)')->html()));
             switch ($key) {
                 case 'NOME EMPRESARIAL':
                     $key = 'razao_social';
                     break;
                 case 'TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)':
                     $key = 'nome_fantasia';
                     break;
                 case 'CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL':
                     $key = 'cnae_principal';
                     break;
                 case 'CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS':
                     $key = 'cnaes_secundario';
                     break;
                 case 'CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA':
                     $key = 'natureza_juridica';
                     break;
                 case 'LOGRADOURO':
                     $key = 'logradouro';
                     break;
                 case 'NÚMERO':
                     $key = 'numero';
                     break;
                 case 'COMPLEMENTO':
                     $key = 'complemento';
                     break;
                 case 'CEP':
                     $key = 'cep';
                     break;
                 case 'BAIRRO/DISTRITO':
                     $key = 'bairro';
                     break;
                 case 'MUNICÍPIO':
                     $key = 'cidade';
                     break;
                 case 'UF':
                     $key = 'uf';
                     break;
                 case 'SITUAÇÃO CADASTRAL':
                     $key = 'situacao_cadastral';
                     break;
                 case 'DATA DA SITUAÇÃO CADASTRAL':
                     $key = 'situacao_cadastral_data';
                     break;
                 case 'MOTIVO DE SITUAÇÃO CADASTRAL':
                     $key = 'motivo_situacao_cadastral';
                     break;
                 case 'SITUAÇÃO ESPECIAL':
                     $key = 'situacao_especial';
                     break;
                 case 'DATA DA SITUAÇÃO ESPECIAL':
                     $key = 'situacao_especial_data';
                     break;
                 case 'TELEFONE':
                     $key = 'telefone';
                     break;
                 case 'ENDEREÇO ELETRÔNICO':
                     $key = 'email';
                     break;
                 case 'ENTE FEDERATIVO RESPONSÁVEL (EFR)':
                     $key = 'ente_federativo_responsavel';
                     break;
                 default:
                     $key = null;
                     break;
             }
             if (!is_null($key)) {
                 $bs = $td->filter('font > b');
                 foreach ($bs as $b) {
                     $b = new Crawler($b);
                     $str = trim(preg_replace('/\\s+/', ' ', $b->html()));
                     $attach = htmlspecialchars_decode($str);
                     if ($bs->count() == 1) {
                         $result[$key] = $attach;
                     } else {
                         $result[$key][] = $attach;
                     }
                 }
             }
         }
     }
     return $result;
 }
Example #4
0
 public function testIsCnpj()
 {
     $this->assertEquals(true, Utils::isCnpj('13779426000137'));
     $this->assertEquals(true, Utils::isCnpj('13.779.426/0001-37'));
     $this->assertEquals(false, Utils::isCnpj('14944426000137'));
 }