Ir para conteúdo
adrigoli

Consultar dados de um CNPJ direto do site da Receita

Recommended Posts

Estou tentando fazer uma captura de dados de um CNPJ para fins de cadastro facilitado em meu sistema em php mais não consegui fazer nada concreto ainda.

 

Tem o problema do captcha que é um problema.

 

Bom já vi em alguns sistemas que existe um formulário para inserir o CNPJ, ao inserir e confirmar o sistema abre essa página http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp e já preenche o campo CNPJ com o que ele digitou anteriormente, ai o usuario coloca os caracteres do captcha e faz a consulta. Logo abre a página com os dados e rapidamente já fecha e volta ao sistema já com os dados nos campos preenchidos do formulário do sistema.

 

Bom queria muito fazer igual a isso ou melhor, alguém tem alguma sugestão ou um script já pronto para isso?

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá boa noite, eu usei durante alguns anos esta solução sem nenhum problema, hoje a tarde o Sintegra atualizou sua pagina com um novo sistema de captcha, tentei alterar o código mas não consegui mais fazer a consulta, alguém esta com o mesmo problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Johnny

Sim , a receita mudou a forma de geração e validação do Captcha HOJE , aproximando-a a solução para consulta de CPF , onde foi abandonado o sistema de geração de imagem por parametro VIEWSTATE , e implementado o sistema de session

 

Leia este Link , onde na semana passada postei a solução para consulta de CPF

http://forum.imasters.com.br/topic/531733-obter-nomecaptcha-por-consulta-na-receita-federal-via-phpcurl/

 

com algumas alterações nesta solução para CPF , consegui agora mesmo concluir a adaptação dos scripts para fazer as consultas de CNPJ

Seguem os script abaixo , mas antes leia o link acima.

 

São 4 scripts.

 

1 , index.php

<html>
        <head>
                <title>CNPJ e Captcha</title>
        </head>
        <body>
        <form method="post" action="processa.php">
                <p><span class="titleCats">CNPJ e Captcha</span>
                  <br />
                  <input type="text" name="CNPJ" maxlength="19" required /> 
                  <b style="color: red">CNPJ</b>
                  <br />
                  <img src="getcaptcha.php" border="0">
                  <br />
                  <input type="text" name="CAPTCHA" maxlength="6" required />
                  <b style="color: red">O que vê na imagem acima?</b>
                  <br />
                </p>
                <p>
                  <input id="id_submit" name="enviar" type="submit" value="Consultar"/>
                </p>
        </form>
        </body>
</html>

2 , funcoes.php

<?php

// define caminho absoluto e relativo para arquivo cookie
$pasta_cookies = 'cookies_cnpj/';
define('COOKIELOCAL', str_replace('\\', '/', realpath('./')).'/'.$pasta_cookies);
define('HTTPCOOKIELOCAL', 'http://'.$_SERVER['SERVER_NAME'].str_replace(pathinfo($_SERVER['SCRIPT_FILENAME'],PATHINFO_BASENAME),'',$_SERVER['SCRIPT_NAME']).$pasta_cookies);

// inicia sessão
@session_start();

// função para pegar o que interessa
function pega_o_que_interessa($inicio,$fim,$total)
{
	$interesse = str_replace($inicio,'',str_replace(strstr(strstr($total,$inicio),$fim),'',strstr($total,$inicio)));
	return($interesse);
}

// função para pegar a resposta html da consulta pelo CPF na página da receita
function getHtmlCNPJ($cnpj, $captcha)
{
    $cookieFile = COOKIELOCAL.session_id();
	$cookieFile_fopen = HTTPCOOKIELOCAL.session_id();
    if(!file_exists($cookieFile))
    {
        return false;      
    }
	else
	{
		// pega os dados de sessão gerados na visualização do captcha dentro do cookie
		$file = fopen($cookieFile_fopen, 'r');
		while (!feof($file))
		{$conteudo .= fread($file, 1024);}
		fclose ($file);

		$explodir = explode(chr(9),$conteudo);
		
		$sessionName = trim($explodir[count($explodir)-2]);
		$sessionId = trim($explodir[count($explodir)-1]);	
	}
	
	// dados que serão submetidos a consulta por post
    $post = array
    (
		'submit1'						=> 'Consultar',
		'origem'						=> 'comprovante',
		'cnpj' 							=> $cnpj, 
		'txtTexto_captcha_serpro_gov_br'=> $captcha,
		'search_type'					=> 'cnpj'
		
    );
    $post = http_build_query($post, NULL, '&');
	
	// prepara a variavel de session
	$cookie = $sessionName.'='.$sessionId;	

    $cookie = array
	(
		'flag'							=> 1,
		$sessionName					=> $sessionId	
	);
	
	$cookie_post = http_build_query($cookie, NULL, '&');
	
    $ch = curl_init('http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);		// aqui estão os campos de formulário
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);	// dados do arquivo de cookie
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);	// dados do arquivo de cookie
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0');
    curl_setopt($ch, CURLOPT_COOKIE, $cookie_post);	    // dados de sessão e flag=1
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp?cnpj=');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}

// Função para extrair o que interessa da HTML e colocar em array
function parseHtmlCNPJ($html)
{
	// respostas que interessam
	$campos = array(
	'NÚMERO DE INSCRIÇÃO',
	'DATA DE ABERTURA',
	'NOME EMPRESARIAL',
	'TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)',
	'CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL',
	'CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS',
	'CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA',
	'LOGRADOURO',
	'NÚMERO',
	'COMPLEMENTO',
	'CEP',
	'BAIRRO/DISTRITO',
	'MUNICÍPIO',
	'UF',
	'ENDEREÇO ELETRÔNICO',
	'TELEFONE',
	'ENTE FEDERATIVO RESPONSÁVEL (EFR)',
	'SITUAÇÃO CADASTRAL',
	'DATA DA SITUAÇÃO CADASTRAL',
	'MOTIVO DE SITUAÇÃO CADASTRAL',
	'SITUAÇÃO ESPECIAL',
	'DATA DA SITUAÇÃO ESPECIAL');

	// caracteres que devem ser eliminados da resposta
	$caract_especiais = array(
	chr(9),
	chr(10),
	chr(13),
	' ',
	'</b>',
	'  ',
	'<b>MATRIZ<br>',
	'<b>FILIAL<br>'
	 );

	// prepara a resposta para extrair os dados
	$html = str_replace('<br><b>','<b>',str_replace($caract_especiais,'',strip_tags($html,'<b><br>')));
	
	$html3 = $html;

	// faz a extração
	for($i=0;$i<count($campos);$i++)
	{		
		$html2 = strstr($html,utf8_decode($campos[$i]));
		$resultado[] = trim(pega_o_que_interessa(utf8_decode($campos[$i]).'<b>','<br>',$html2));
		$html=$html2;
	}

	// extrai os CNAEs secundarios , quando forem mais de um
	if(strstr($resultado[5],'<b>'))
	{
		$cnae_secundarios = explode('<b>',$resultado[5]);
		$resultado[5] = $cnae_secundarios;
		unset($cnae_secundarios);
	}

	// devolve STATUS da consulta correto
	if(!$resultado[0])
	{
		if(strstr($html3,utf8_decode('O número do CNPJ não é válido')))
		{$resultado['status'] = 'CNPJ incorreto ou não existe';}
		else
		{$resultado['status'] = 'Imagem digitada incorretamente';}
	}
	else
	{$resultado['status'] = 'OK';}
	
	return $resultado;

}

?>



3 , getcaptcha.php

<?php

define('COOKIELOCAL', str_replace('\\', '/', realpath('./')).'/'.'cookies_cnpj/');
@session_start();
        
$cookieFile = COOKIELOCAL.session_id();
// cria arquivo onde será salva a sessão com a receita
if(!file_exists($cookieFile))
{
	$file = fopen($cookieFile, 'w');
	fclose($file);
}
	
$url = 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
// não utilizar returntransfer , este script replica imagem captcha da receita
$imgsource = curl_exec($ch);
curl_close($ch);

if(!empty($imgsource))
{
	$img = imagecreatefromstring($imgsource);
	header('Content-type: image/jpg');
	imagejpeg($img);
}

?>

4 , processa.php

<?php

require('funcoes.php');

$cnpj = $_POST['CNPJ'];
$captcha = $_POST['CAPTCHA'];

// pega html resposta da receita
$getHtmlCNPJ = getHtmlCNPJ($cnpj, $captcha);

if($getHtmlCNPJ)
{
	// volova os dados em um array
	$campos = parseHtmlCNPJ($getHtmlCNPJ);
	print_r($campos);
}

?>



ATENÇÃO: não esqueça de criar uma pasta chamada cookie_cnpj no mesmo diretório onde estarão estes 4 scripts , onde serão gravados os cookies de sessão da receita

 

Abraços
Marcos Peli

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Marcos,

 

desde muito obrigado pela resposta, porém a imagem do captcha não aparece, o único erro que retorna no console é "Resource interpreted as Image but transferred with MIME type text/html:",

no getcaptcha acessando diretamente gera alguns erros Warning: imagecreatefromstring(): Empty string or invalid image

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Marcos,

 

eu aqui de novo, o código estava funcionando 100%, só que ontem 06/04 ele começou a ficar processando e as vezes aparece e as vezes não a imagem... isolei todo o código da aplicação, coloquei em um servidor separado mas o problema continua, você sabe se foi feita mais alguma alteração no Sintegra?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia!

 

Estou tentando fazer o mesmo procedimento mais no site do TSE (link: http://apps.tse.jus.br/saae/consultaLocalVotacaoNome.do?dispatcher=exibirConsultaLocalVotacaoNome&validate=false). No caso eu queria validar o local de votação do usuário em uma plicação de orçamento participativo.

A questão é que nesse link usa o reCaptcha novo, aquele que é um check box. Tentei usar o código https://github.com/Massa191/Consultas_CNPJ_CPF_Receita_Federal alterando a imagem captcha por um iframe do recaptcha mais não deu certo, não valida.

Há alguma forma de superar esse "recaptcha" pelo mesmo princípio da consulta aos dados na receita?

 

Abraço!

Screenshot - 04_10_2017 , 11_42_06.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal se alguém for desenvolver alguma aplicação que precise consultar CPF ou CNPJ na receita federal para obter dados consistentes, desenvolvi uma API aberta para tal finalidade. Usem com moderação.


www.devbay.com.br


Está em versão beta ainda, pode ter alguns bugs, caso encontrarem algum, por favor me avisem para que eu possa revisar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atualizado hoje 26/03/2020
Funcionando as consultas de CPF e CNPJ para captcha Sonoro enquanto a receita as disponibilizar em paralelo ao recaptcha google

 

agradeçam ao COVID19 , que motivou-me a encontrar uma solução para viabilizar a utilização desta ferramenta em vossos e-comerce.

 

Abraço a todos

https://github.com/Massa191/Consultas_CNPJ_CPF_Receita_Federal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.