/CNPJReceitaFederal

Codeigniter helper para consultar cadastros de pessoa jurídica na Receita Federal

CNPJReceitaFederal

Codeigniter helper para consultar cadastros de pessoa jurídica na Receita Federal

Faça download do arquivo sample.zip se quiser testar na prática, ou, mãos à obra.

Antes de começar, é importe adicionar os seguistes helpers no autoload

$autoload['helper'] = array('url','file');

Crie um helper com o nome "cnpj_receita_helper.php" e adicione o conteúdo abaixo.

<?php
//créditos à este cara tbm...
// http://blog.mayk.brito.net.br/php-curl-e-captcha-como-eu-entendi-e-aprendi-a-trabalhar-com-isso/
function get_captcha_cnpj_receita() {
	$url = "http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp";
	$dir = "tmp" . DIRECTORY_SEPARATOR ;
	$cookie = FCPATH . $dir . 'receita.txt';
	if (! is_dir ( FCPATH . $dir )) {
		mkdir ( FCPATH . $dir, 0777, true );
	}
	$ch = curl_init ();
	curl_setopt_array ( $ch, array (
			CURLOPT_URL => $url,
			CURLOPT_COOKIEFILE => $cookie,
			CURLOPT_COOKIEJAR => $cookie,
			CURLOPT_FOLLOWLOCATION => 1,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_BINARYTRANSFER => 1,
			CURLOPT_HEADER => 0 
	) );
	
	$data = curl_exec ( $ch );
	curl_close ( $ch );
	
	$arquivo = $dir ."receita.gif";
	$fp = fopen ( $arquivo, 'w' );
	fwrite ( $fp, $data );
	fclose ( $fp );
	
	return $arquivo;
}
function get_cnpj_receita($cnpj, $letras) {
	$reffer = "http://google.com";
	$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
	$url = "http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp";
	$post_fields = "origem=comprovante&cnpj=".$cnpj."&txtTexto_captcha_serpro_gov_br=".$letras."&idSom=&submit1=Consultar&search_type=cnpj";
	$dir = "tmp" . DIRECTORY_SEPARATOR ;
	$cookie = FCPATH . $dir . 'receita.txt';
	$ch = curl_init ();
	
	curl_setopt_array ( $ch, array (
			CURLOPT_URL => $url,
			CURLOPT_POST => 1,
			CURLOPT_POSTFIELDS => $post_fields,
			CURLOPT_USERAGENT => $agent,
			CURLOPT_REFERER => $reffer,
			CURLOPT_COOKIEFILE => $cookie,
			CURLOPT_COOKIEJAR => $cookie,
			CURLOPT_FOLLOWLOCATION => 1,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_HEADER => 0 
	) );
	
	$result = curl_exec ( $ch );
	
	curl_close ( $ch );
	
	if (preg_match ( "/<title>Emiss.*<\/title>/siU", $result )) {
		return false;
	}
	
	$html = utf8_encode ( $result );
	
	$inicio = strrpos ( $html, '<!-- Início Linha NÚMERO DE INSCRIÇÃO -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha NÚMERO DE INSCRIÇÃO -->' );
	$numero_inscricao = substr ( $html, $inicio, $fim - $inicio );
	$cnpj = explode ( '<b>', $numero_inscricao )[1];
	$cnpj = substr ( $cnpj, 0, strrpos ( $cnpj, '</b>' ) );
	
	$inicio = strrpos ( $html, '<!-- Início Linha NOME EMPRESARIAL -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha NOME EMPRESARIAL -->' );
	$nome_empresarial = substr ( $html, $inicio, $fim - $inicio );
	$razao_social = explode ( '<b>', $nome_empresarial )[1];
	$razao_social = substr ( $razao_social, 0, strrpos ( $razao_social, '</b>' ) );
	
	$inicio = strrpos ( $html, '<!-- Início Linha ESTABELECIMENTO -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha ESTABELECIMENTO -->' );
	$estabelecimento = substr ( $html, $inicio, $fim - $inicio );
	$nome_fantasia = explode ( '<b>', $estabelecimento )[1];
	$nome_fantasia = substr ( $nome_fantasia, 0, strrpos ( $nome_fantasia, '</b>' ) );
	
	$inicio = strrpos ( $html, '<!-- Início Linha LOGRADOURO -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha LOGRADOURO -->' );
	$endereco = substr ( $html, $inicio, $fim - $inicio );
	$logradouro = explode ( '<b>', $endereco )[1];
	$logradouro = substr ( $logradouro, 0, strrpos ( $logradouro, '</b>' ) );
	$numero = explode ( '<b>', $endereco )[2];
	$numero = substr ( $numero, 0, strrpos ( $numero, '</b>' ) );
	$complemento = explode ( '<b>', $endereco )[3];
	$complemento = substr ( $complemento, 0, strrpos ( $complemento, '</b>' ) );
	
	$inicio = strrpos ( $html, '<!-- Início Linha CEP -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha CEP -->' );
	$endereco2 = substr ( $html, $inicio, $fim - $inicio );
	$cep = explode ( '<b>', $endereco2 )[1];
	$cep = substr ( $cep, 0, strrpos ( $cep, '</b>' ) );
	$bairro = explode ( '<b>', $endereco2 )[2];
	$bairro = substr ( $bairro, 0, strrpos ( $bairro, '</b>' ) );
	$cidade = explode ( '<b>', $endereco2 )[3];
	$cidade = substr ( $cidade, 0, strrpos ( $cidade, '</b>' ) );
	$uf = explode ( '<b>', $endereco2 )[4];
	$uf = substr ( $uf, 0, strrpos ( $uf, '</b>' ) );
	
	$inicio = strrpos ( $html, '<!-- Início Linha SITUAÇÃO CADASTRAL -->' );
	$fim = strrpos ( $html, '<!-- Fim Linha SITUACAO CADASTRAL -->' );
	$situacao_cadastral = substr ( $html, $inicio, $fim - $inicio );
	$situacao_cadastral = explode ( '<b>', $situacao_cadastral )[1];
	$situacao_cadastral = substr ( $situacao_cadastral, 0, strrpos ( $situacao_cadastral, '</b>' ) );
	
	$clear_number = function ($string) {
		$string = preg_replace ( "/[^0-9,.]/", "", $string );
		$string = str_replace ( '.', '', $string );
		$string = str_replace ( ',', '', $string );
		return $string;
	};
	
	$empresa = [ ];
	$empresa ["cnpj"] = $clear_number ( $cnpj );
	$empresa ["razao_social"] = trim ( $razao_social );
	$empresa ["nome_fantasia"] = trim ( $nome_fantasia );
	$empresa ["logradouro"] = trim ( $logradouro );
	$empresa ["numero"] = trim ( $numero );
	$empresa ["complemento"] = trim ( $complemento );
	$empresa ["cep"] = $clear_number ( $cep );
	$empresa ["bairro"] = trim ( $bairro );
	$empresa ["cidade"] = trim ( $cidade );
	$empresa ["uf"] = trim ( $uf );
	$empresa ["situacao_cadastral"] = trim ( $situacao_cadastral );
	$empresa = ( object ) $empresa;
	
	return $empresa;
}

Crie um controller mais ou menos tipo esse

<?php
defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );
class Consulta_cnpj_receita extends CI_Controller {
	function __construct() {
		parent::__construct ();
		$this->load->helper ( 'cnpj_receita_helper' );
	}
	public function index() {
		$data ['captcha'] = get_captcha_cnpj_receita ();
		$this->load->view ( 'consulta_cnpj_receita', $data );
	}
	public function consulta_cnpj() {
		$cnpj = $_POST ['cnpj'];
		$captcha = $_POST ['captcha'];
		
		$return = get_cnpj_receita ( $cnpj, $captcha );
		if (! $return) {
			redirect ( base_url ( "consulta_cnpj_receita" ) );
		}
		var_dump ( $return );
	}
}

e uma view mais ou menos como essa

<img src='<?php echo base_url($captcha)?>' />
<form action="<?php echo base_url('consulta_cnpj_receita/consulta_cnpj')?>" method="POST">
	captcha <input size="8" maxlength="6" name="captcha"> cnpj <input
		size="16" maxlength="14" name="cnpj"> <input type="submit">
</form>

pronto, pra testar acesse "sua_url_base"/consulta_cnpj_receita (ex.: http://localhost/sample/consulta_cnpj_receita)