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