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
[](https://travis-ci.org/jansenfelipe/cnpj-gratis)
[](https://packagist.org/packages/jansenfelipe/cnpj-gratis)
[](https://packagist.org/packages/jansenfelipe/cnpj-gratis)
[](https://packagist.org/packages/jansenfelipe/cnpj-gratis)
[](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
================================================
<?php
require_once '../vendor/autoload.php';
use JansenFelipe\CnpjGratis\CnpjGratis;
if(isset($_POST['captcha']) && isset($_POST['cookie']) && isset($_POST['cnpj'])){
$dados = CnpjGratis::consulta($_POST['cnpj'], $_POST['captcha'], $_POST['cookie']);
var_dump($dados);
die;
}else
$params = CnpjGratis::getParams();
?>
<img src="data:image/png;base64,<?php echo $params['captchaBase64'] ?>" />
<form method="POST">
<input type="hidden" name="cookie" value="<?php echo $params['cookie'] ?>" />
<input type="text" name="captcha" placeholder="Captcha" />
<input type="text" name="cnpj" placeholder="CNPJ" />
<button type="submit">Consultar</button>
</form>
================================================
FILE: formTest.php
================================================
<?php
require 'vendor/autoload.php';
if (isset($_POST['cnpj'])) {
var_dump(\JansenFelipe\CnpjGratis\CnpjGratis::consulta($_POST['cnpj'], $_POST['captcha'], $_POST['cookie']));
die;
}
$cnpj = '45543915000858';
$params = \JansenFelipe\CnpjGratis\CnpjGratis::getParams();
?>
<img src="<?php echo $params['captchaBase64']; ?>" /><br />
<form action="" method="POST">
<input type="text" name="cnpj" value="<?php echo $cnpj; ?>" />
<input type="text" name="captcha" />
<input type="text" name="cookie" value="<?php echo $params['cookie']; ?>" />
<input type="submit" />
</form>
================================================
FILE: phpunit.xml.dist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
colors="true"
bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="CnpjGratis Test">
<directory suffix=".php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./src</directory>
<exclude>
<directory suffix=".php">./vendor/</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
================================================
FILE: src/CnpjGratis.php
================================================
<?php
namespace JansenFelipe\CnpjGratis;
use Exception;
use JansenFelipe\Utils\Utils as Utils;
use Symfony\Component\DomCrawler\Crawler;
class CnpjGratis {
/**
* Metodo para capturar o captcha e cookie para enviar no metodo de consulta
*
* @throws Exception
* @return array Retorna Cookie e CaptchaBase64
*/
public static function getParams()
{
$data = self::request('http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp');
$cookie = $data['headers']['Set-Cookie'];
$image = self::request('http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp', [], [
"Pragma: no-cache",
"Origin: http://www.receita.fazenda.gov.br",
"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/cnpjreva_solicitacao2.asp",
"Cookie: flag=1; $cookie",
"Connection: keep-alive"
]);
if(@imagecreatefromstring($image['response'])==false)
throw new Exception('Não foi possível capturar o captcha');
return array(
'cookie' => $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(), '<b>Erro na Consulta</b>') !== 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
================================================
<?php
namespace JansenFelipe\CnpjGratis;
use PHPUnit_Framework_TestCase;
class CnpjGratisTest extends PHPUnit_Framework_TestCase {
private $params;
public function testGetParams() {
$this->params = CnpjGratis::getParams();
$this->assertEquals(true, isset($this->params['captchaBase64']));
$this->assertEquals(true, isset($this->params['cookie']));
}
}
gitextract_9wx7va7h/
├── .gitignore
├── .travis.yml
├── README.md
├── composer.json
├── example/
│ └── index.php
├── formTest.php
├── phpunit.xml.dist
├── src/
│ └── CnpjGratis.php
└── tests/
└── CnpjGratisTest.php
SYMBOL INDEX (6 symbols across 2 files)
FILE: src/CnpjGratis.php
class CnpjGratis (line 9) | class CnpjGratis {
method getParams (line 17) | public static function getParams()
method consulta (line 54) | public static function consulta($cnpj, $captchaSolved, $cookie)
method request (line 185) | private static function request($uri, array $data = [], array $headers...
FILE: tests/CnpjGratisTest.php
class CnpjGratisTest (line 7) | class CnpjGratisTest extends PHPUnit_Framework_TestCase {
method testGetParams (line 11) | public function testGetParams() {
Condensed preview — 9 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (15K chars).
[
{
"path": ".gitignore",
"chars": 69,
"preview": "/vendor\ncomposer.phar\ncomposer.lock\n.DS_Store\nnbproject/\n/phpunit.xml"
},
{
"path": ".travis.yml",
"chars": 225,
"preview": "language: php\n\nphp:\n - 5.5\n - 5.6\n - hhvm\n\nbefore_script:\n - travis_retry composer self-update\n - travis_retry comp"
},
{
"path": "README.md",
"chars": 2095,
"preview": "# CNPJ Grátis\n[](https://travis-ci.org/jansenfel"
},
{
"path": "composer.json",
"chars": 1052,
"preview": "{\n \"name\": \"jansenfelipe/cnpj-gratis\",\n \"description\": \"Com esse pacote você poderá consultar, gratuitamente, CNPJ"
},
{
"path": "example/index.php",
"chars": 692,
"preview": "<?php\n\nrequire_once '../vendor/autoload.php';\n\nuse JansenFelipe\\CnpjGratis\\CnpjGratis;\n\n\nif(isset($_POST['captcha']) && "
},
{
"path": "formTest.php",
"chars": 603,
"preview": "<?php\nrequire 'vendor/autoload.php';\n\nif (isset($_POST['cnpj'])) {\n var_dump(\\JansenFelipe\\CnpjGratis\\CnpjGratis::con"
},
{
"path": "phpunit.xml.dist",
"chars": 555,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit \n colors=\"true\" \n bootstrap=\"vendor/autoload.php\">\n \n <tests"
},
{
"path": "src/CnpjGratis.php",
"chars": 8385,
"preview": "<?php\n\nnamespace JansenFelipe\\CnpjGratis;\n\nuse Exception;\nuse JansenFelipe\\Utils\\Utils as Utils;\nuse Symfony\\Component\\D"
},
{
"path": "tests/CnpjGratisTest.php",
"chars": 412,
"preview": "<?php\n\nnamespace JansenFelipe\\CnpjGratis;\n\nuse PHPUnit_Framework_TestCase;\n\nclass CnpjGratisTest extends PHPUnit_Framewo"
}
]
About this extraction
This page contains the full source code of the jansenfelipe/cnpj-gratis GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 9 files (13.8 KB), approximately 3.9k tokens, and a symbol index with 6 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.