Ir para conteúdo
samara_br

Consultar CNPJ na receita com cURL + PHP

Recommended Posts

Olá pessoal...

Estou tentando fazer um formulario para consulta de CNPJ na receita, através da biblioteca cURL para PHP

mas não estou conseguindo... alguém ja fez isso? poderiam me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode tentar abrir essa página e mostrar o CAPTCHA para o usuário, assim quando ele clicar no seu botão, você faz um POST para o URL alvo do formulário da receita enviando o CNPJ E o CAPCTHA.

 

O problema do site da Receita, é que parece que a imagem tem tempo limite (bem curto, por sinal). E isso pode atrapalhar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal...

 

Bruno Augusto é bem isso que quero, na verdade não burlar a imagem, mas a minha intenção é fazer meu proprio

formulário de busca e no final poder manipular os dados do retorno, tenho tentado com a biblioteca cURL do PHP

mas não quer funcionar, sempre me retorna um erro... como se o que foi digitado não bate com o que a figura exibe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro?

 

Como esse serviço diariamente, já percebi que assim que a página carrega com a imagem X, alguns segundos depois ela já se altera para Y.

 

Acredito que o interessante seria fazer com AJAX, enviando uma requisição a cada X segundos atualizando aquilo que é mostrado para o usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Bruno...

 

Então, estou tentando seguir o exemplo deste post aqui do forum http://forum.imasters.com.br/topic/389299-dados-da-receita-federal-curl/

 

tenho 3 retornos, captcha incorreto, cnpj incorreto, ou ainda dados não encontrado, mas a função sempre retorna que o captcha esta errado :/

 

também acho que pode ser algo relacionado ao tempo, ou até mesmo quando a pagina da submit o captcha ser alterado sozinho... ajax pode ser que seria solução, mas entendo muito pouco de ajax para fazer isso xD... mas se for a saida vou ter que aprende ajax e depois retorna ao assunto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há meios para burlar, mas não compactuo com a prática, por isso não vou ensinar dicas.

 

O que posso te dizer é que você pode tentar entrar em contato gentilmente e formalmente com a Receita Federal e propor uma API pública autenticada.

Acredito que esse seja o modo mais educado e eficiente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um site que disponibiliza uma api ( biblioteca, .dll) que pode ser usada em varias linguagens, inclusive PHP, para consultar os dados da receita federal, sintegra e outros sites:

 

http://knu.com.br

 

Contratei aqui pra minha empresa e funciona muito bem. Usamos para confirmar dados cadastrais de clientes a partir de um CPF ou CNPJ (nome completo, razão social, situação cadastral, endereço, etc). Recomendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Bugs99, bem vindo ao iMasters.

 

Apesar de este não ser um tópico TÃO antigo, pedimos que continue colaborando conosco em tópicos mais recentes.

 

Quanto à sua dica, de fato é válida, mas a intenção original do autor seria fazer programatica E gratuitamente.

 

Até minha última resposta eu não sabia com certeza se era crime ou não, depois li que se algum recurso do site fosse utilizado de forma externa, sem um contrato firmado com a Receita (o que pode haver encargos), este deveria ser denunciado.

 

Até então eu havia pensado em desenvolver, mas depois que li isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto, tudo bem, acabo de me cadastrar no imasters.

Seguinte, pesquisei muito e achei um código PHP que pega as informações do site da receita. Na verdade fiz algumas modificações no mesmo para que funcionasse corretamente.

O código pega no site da receita o CAPTCHA e exibe no site de terceiros, assim preenchendo o mesmo junto com um numero valido de CPF, a consulta é feita e retorna o nome do cidadão e o numero do CPF.

Mas vamos a questão, procurei em vários sites do governo, e principalmente no site da receita quanto a ilegalidade disso, mas não encontrei nada sobre!

O código não burla o CAPTCHA, ele faz a consulta com o cURL gerando cookies e tudo mais, então não é um robô.

Poderia me dizer onde leu sobre ser ilegal? Preciso dessa informação, pois usarei o mesmo código para outros sites do governo, visto que é uma mão na roda para cadastros, contadores, despachantes, etc.

 

Veja isso:Política de Privacidade e Uso (Receita)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

De acordo com esse link o Item 4 permite que você utilize os recursos do site, de uma forma geral, com isso garante-nos direito de uso programático.

 

Eles apenas se reservam o direito de modificar sem prévio aviso. Sendo assim, quem desenvolver esses "scripts sanguessugas" é quem deverá se preocupar em refletir seu código com o código (principalmente HTML) da Receita.

 

Porém, o Item 7 é mais específico, focando principalmente no Sigilo Fiscal das informações e é aí que entra a ilegalidade do recurso.

 

Eu li, não lembro onde, que existe a possibilidade de "licenciamento" dos recursos da Receita. Talvez eu esteja enganado, afinal, foi um texto lido num momento preguiçoso *quando não se presta muito atenção).

 

Em sendo uma afirmação falsa, então TODOS os sites que o fazem através da Receita são ilegais. Se for verdadeira, então sim existe a possibilidade de, de repente, até existir uma API proprietária para tanto.

 

E talvez por ser algo pago é que não se tem muitas informações de pesquisa.

 

Tem um site, KNU que diz fazer isso via biblioteca (DLL ou SO), mas não sei sobre a legalidade do procedimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, acho eu, que não tem problemas em desenvolver softwares ou códigos desde que sejam "livres". Acho até que podemos desenvolver e cobrar por certos softwares ou códigos, mas que seu uso principal não seja a consulta de dados.

 

Exemplificando, tenho meus serviços contratos por um despachante que deseja um site institucional mas com alguns recursos extras, como consulta de cpf, cnpj, cnh, multas sem precisar abrir os sites do governo, assim sendo, cobrarei pelo site em si e não pela consulta, visto que a consulta é gratuita em todos os sites.

 

Sobre esse site que tu disse, acho estranho cobrar por consulta, sendo os serviços gratuitos, mais estranho ainda alguém pagar por isso.

 

Eu entendo dessa forma, gostaria muito de ter o entendimento concreto do assunto, pois estou desenvolvendo alguns sites e dependo disso para continuar.

O que acham?

 

Abraço.

 

PS. não sei se é o lugar certo para discutir esse assunto, caso não seja, favor avisar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal acabei de me casdastrar também e queria deixar aqui o link para a solução que vocês procuram.

 

Php = Curl e Captcha. Como eu entendi e aprendi a trabalhar com isso.

 

Escrevi esta madrugada o código e o artigo, pois precisei também de algo que fizesse consulta de CNPJ.

 

Espero que seja útil para você. Se for, compartilhe ok?

 

Forte abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mayk

 

Pessoal acabei de me casdastrar também e queria deixar aqui o link para a solução que vocês procuram.

Php = Curl e Captcha. Como eu entendi e aprendi a trabalhar com isso.

Escrevi esta madrugada o código e o artigo, pois precisei também de algo que fizesse consulta de CNPJ.

Espero que seja útil para você. Se for, compartilhe ok?

Forte abraço!

 

Olá amigo, tudo bem?

Fiz exatamente como recomendado, mas parece que a Receita alterou os links;

 

vc tem os links atualizados?

 

Não consegui mais capturar o novo captcha ( o que aparece é com o link velho).

 

Mas esse
não consegui achar o correspondente (que deveria ser um desses)
ou
Alguma idéia?
Grato
Carlos Magno
(ps. nada há de ilegal se vc está usando o captcha - tanto que está disponível na net - o que não é permitido é comprar base de dados eis ai o crime - Haveria discussão para o uso de robô - por que ele burla o sistema para acesso em massa).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Recentemente publiquei uma library no Packagist: cnpj-gratis

 

Postei no meu blog como usar, e o link de um projeto pronto:

 

http://www.jansenfelipe.com.br/cnpjgratis-library-php-buscar-dados-cnpj-receita/

 

Fiquem a vontade para colaborar com o projeto no Github:

 

https://github.com/jansenfelipe/cnpj-gratis

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Jansen,

 

eu utilizava em meu sistema um código que quebrava o captcha do Sintegra e atualiza os dados dos clientes cadastrados, porém hoje o Sintegra mudou seu sistema de captcha e o código não funcionou mais, não consegui fazer nenhuma adaptação para funcionar.

 

Em busca de algo que consultava o CNPJ cheguei na sua solução porém não esta funcionando nem o exemplo, você tenha alguma solução funcionando e possa me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não amigo

Sua solução é de 2011

 

Como eu disse , a receita alterou a geração de captcha em 2013 e novamente ONTEM.

 

a solução que eu encontrei e publiquei ontem é esta:

 

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

 

Não amigo

Sua solução é de 2011

 

Como eu disse , a receita alterou a geração de captcha em 2013 e novamente ONTEM.

 

a solução que eu encontrei e publiquei ontem é esta:

 

Não estou conseguindo pegar o retorno no processa.php

ele para neste trexo

 

function getHtmlCNPJ($cnpj, $captcha)
{
$cookieFile = COOKIELOCAL.session_id();
$cookieFile_fopen = HTTPCOOKIELOCAL.session_id();
if(!file_exists($cookieFile))
{
return false;
}

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.