Repository: jansenfelipe/cnpj-gratis Branch: 2.1 Commit: 33790e8d32a7 Files: 9 Total size: 13.8 KB Directory structure: gitextract_9wx7va7h/ ├── .gitignore ├── .travis.yml ├── README.md ├── composer.json ├── example/ │ └── index.php ├── formTest.php ├── phpunit.xml.dist ├── src/ │ └── CnpjGratis.php └── tests/ └── CnpjGratisTest.php ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ /vendor composer.phar composer.lock .DS_Store nbproject/ /phpunit.xml ================================================ FILE: .travis.yml ================================================ language: php php: - 5.5 - 5.6 - hhvm before_script: - travis_retry composer self-update - travis_retry composer install --dev script: - mkdir -p build/logs - vendor/bin/phpunit -c phpunit.xml.dist --verbose ================================================ FILE: README.md ================================================ # CNPJ Grátis [![Travis](https://travis-ci.org/jansenfelipe/cnpj-gratis.svg?branch=2.0)](https://travis-ci.org/jansenfelipe/cnpj-gratis) [![Latest Stable Version](https://poser.pugx.org/jansenfelipe/cnpj-gratis/v/stable.svg)](https://packagist.org/packages/jansenfelipe/cnpj-gratis) [![Total Downloads](https://poser.pugx.org/jansenfelipe/cnpj-gratis/downloads.svg)](https://packagist.org/packages/jansenfelipe/cnpj-gratis) [![Latest Unstable Version](https://poser.pugx.org/jansenfelipe/cnpj-gratis/v/unstable.svg)](https://packagist.org/packages/jansenfelipe/cnpj-gratis) [![MIT license](https://poser.pugx.org/jansenfelipe/nfephp-serialize/license.svg)](http://opensource.org/licenses/MIT) Com esse pacote você poderá realizar consultas de CNPJ no site da Receita Federal do Brasil gratuitamente. Atenção: Esse pacote não possui leitor de captcha, mas captura o mesmo para ser digitado pelo usuário ### Changelog * 2.1.1 - Bugfix: Atualização site receita. Obrigado @fernandobatels * 2.1.0 - Removendo dependências extras e versão mínima PHP 5.5 * 2.0.8 - Bugfix: Campo telefone quando não informado. Obrigado @mprandot * 2.0.7 - Bugfix: Atualização site receita. Obrigado @Marciobds ### Como utilizar Adicione a library ```sh $ composer require jansenfelipe/cnpj-gratis ``` Adicione o autoload.php do composer no seu arquivo PHP. ```php require_once 'vendor/autoload.php'; ``` Primeiro chame o método `getParams()` para retornar os dados necessários para enviar no método `consulta()` ```php $params = JansenFelipe\CnpjGratis\CnpjGratis::getParams(); ``` Agora basta chamar o método `consulta()` ```php $dadosEmpresa = JansenFelipe\CnpjGratis\CnpjGratis::consulta( '45.543.915/0001-81', 'INFORME_AS_LETRAS_DO_CAPTCHA', $params['cookie'] ); ``` ### Gostou? Conheça também * [CpfGratis](https://github.com/jansenfelipe/cpf-gratis) * [CepGratis](https://github.com/jansenfelipe/cep-gratis) * [CidadesGratis](https://github.com/jansenfelipe/cidades-gratis) * [NFePHPSerialize](https://github.com/jansenfelipe/nfephp-serialize) ### License The MIT License (MIT) ================================================ FILE: composer.json ================================================ { "name": "jansenfelipe/cnpj-gratis", "description": "Com esse pacote você poderá consultar, gratuitamente, CNPJs diretamente no site da receita.", "keywords": ["consulta", "receita", "cnpj", "php"], "license": "MIT", "authors": [ { "name": "Jansen Felipe", "email": "jansen.felipe@gmail.com" } ], "require": { "php": ">=5.5", "symfony/dom-crawler": "^3.2", "symfony/css-selector": "^3.2", "ext-gd":"*", "ext-curl":"*", "jansenfelipe/utils": "^2.0" }, "require-dev": { "phpunit/phpunit": "~4.0" }, "autoload": { "psr-4": { "JansenFelipe\\CnpjGratis\\": "src/" } }, "extra": { "branch-alias": { "dev-master": "2.1-dev" } }, "suggest": { "jansenfelipe/cpf-gratis": "Permite consulta de CPF no site da receita", "jansenfelipe/cep-gratis": "Permite consulta de CEP no site dos Correios" }, "minimum-stability": "dev" } ================================================ FILE: example/index.php ================================================
================================================ FILE: formTest.php ================================================
================================================ FILE: phpunit.xml.dist ================================================ ./tests ./src ./vendor/ ================================================ FILE: src/CnpjGratis.php ================================================ $cookie, 'captchaBase64' => base64_encode($image['response']) ); } /** * Metodo para realizar a consulta * * @param string $cnpj CNPJ * @param string $captchaSolved CAPTCHA * @param string $cookie COOKIE * @throws Exception * @return array Dados da empresa */ public static function consulta($cnpj, $captchaSolved, $cookie) { $result = array(); if (!Utils::isCnpj($cnpj)) throw new Exception('O CNPJ informado não é válido'); $headers = [ "Host: www.receita.fazenda.gov.br", "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0", "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding: gzip, deflate", "Referer: http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp", "Cookie: $cookie", "Connection: keep-alive" ]; $params = [ 'origem' => 'comprovante', 'cnpj' => Utils::unmask($cnpj), 'txtTexto_captcha_serpro_gov_br' => $captchaSolved, 'submit1' => 'Consultar', 'search_type' => 'cnpj' ]; $data = self::request('http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp', $params, $headers); $crawler = new Crawler($data['response']); if (strpos($crawler->html(), 'Erro na Consulta') !== false) { throw new Exception('Erro ao consultar. Confira se você digitou corretamente os caracteres fornecidos na imagem.', 98); } if ($crawler->filter('body > table:nth-child(3) font:nth-child(1)')->count() > 0) throw new Exception('Erro ao consultar. O CNPJ informado não existe no cadastro.', 99); $td = $crawler->filter('body > div > table:nth-child(1)'); foreach ($td->filter('td') as $td) { $td = new Crawler($td); if ($td->filter('font:nth-child(1)')->count() > 0) { $key = trim(strip_tags(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; case 'DATA DE ABERTURA': $key = 'data_abertura'; 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; } } } } if(isset($result['telefone']) && $result['telefone'] != '') { $posBarra = strpos($result['telefone'], '/'); if ($posBarra > 0) { $result['telefone2'] = substr($result['telefone'], $posBarra + 1, strlen($result['telefone']) - $posBarra); $result['telefone'] = substr($result['telefone'], 0, $posBarra - 1); } } return $result; } /** * Send request * * @param $uri * @param array $data * @param array $headers * * @return array */ private static function request($uri, array $data = [], array $headers = []) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $uri, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_HEADER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT_MS => 30000 ]); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); } $response = curl_exec($curl); $size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); curl_close($curl); $headers = []; foreach (explode(PHP_EOL, substr($response, 0, $size)) as $i) { $t = explode(':', $i, 2); if(isset($t[1])) $headers[trim($t[0])] = trim($t[1]); } $response = substr($response, $size); return compact('response', 'headers'); } } ================================================ FILE: tests/CnpjGratisTest.php ================================================ params = CnpjGratis::getParams(); $this->assertEquals(true, isset($this->params['captchaBase64'])); $this->assertEquals(true, isset($this->params['cookie'])); } }