Estou tentando consultar cnpj pela receita federal mas não to conseguindo. Seguindo alguns tutoriais tenho o seguinte:
receita.php
<?php
ini_set(‘display_errors’, 1);
ini_set(‘display_startup_erros’, 1);
error_reporting(E_ALL);
function recebe_imagem($url, $arquivo) {
$cookie = 'receita.txt';
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url, //url que produz a imagem do captcha.
CURLOPT_COOKIE => 1,
CURLOPT_COOKIEFILE => $cookie, //esse mais o debaixo fazem a mágica do captcha
CURLOPT_COOKIEJAR => $cookie, //esse mais o de cima fazem a mágica do.. ah já falei isso;
CURLOPT_FOLLOWLOCATION => 1, //não sei, mas funciona :D
CURLOPT_RETURNTRANSFER => 1, //retorna o conteúdo.
CURLOPT_BINARYTRANSFER => 1, //essa tranferencia é binária.
CURLOPT_HEADER => 0, //não imprime o header.
));
$data = curl_exec($ch);
curl_close($ch);
//salva a imagem
$fp = fopen($arquivo, 'w');
fwrite($fp, $data);
fclose($fp);
//retorna a imagem
return $arquivo;
}
$img = recebe_imagem("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp", "receita.gif");
print "<img src='{$img}' />" .
'<form action="receita_respond.php" method="POST">
captcha
<input size="8" maxlength="9" name="idLetra">
cnpj
<input size="16" maxlength="14" name="cnpj">
<input type="submit">
</form>';
?>
receita_respond.php
<?php
ini_set('display_errors', 1);
ini_set('display_startup_erros', 1);
error_reporting(E_ALL);
// Pega os valores dos campos que foram enviados pelo formulário
// *sem validação mesmo, é só pra exemplo tá?
$cnpj = $_POST['cnpj'];
$letras = $_POST['idLetra'];
#Coisas importantes para dizer ao $ch logo mais
//IMPORTANTE que o caminho esteja correto e tenha permissão CHMOD 777
$cookie = 'receita.txt';
// não sei.. coloquei pra garantir
$reffer = "http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp?cnpj=";
//sempre é bom ter para garantir a entrada do seu serviço
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
//url da receita que valida o formulário
$url = "http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp";
//dados do POST do formulário da receita.
//** Muito importante entender os formulários que você esteja trabalhando **
//os campos NESTA EXATA ordem funcionaram legal ;)
$post_fields = "origem=comprovante&cnpj={$cnpj}&txtTexto_captcha_serpro_gov_br={$letras}&idSom=&submit1=Consultar&search_type=cnpj";
//agora sim.. 1, 2, 3 VALENDO!
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url, //sem isso, seu cURL é imprestável
CURLOPT_POST => 1, //afirmo que ele irá fazer um POST
CURLOPT_POSTFIELDS => $post_fields, //quais são os campos que estarei enviando ao valida.asp?
CURLOPT_USERAGENT => $agent, //ahh é importante sempre ter né =D
CURLOPT_REFERER => $reffer, //não sei.. coloquei pra garantir
CURLOPT_COOKIE => 1,
CURLOPT_COOKIEFILE => $cookie, //lembra dos cookies que guardamos qndo digitamos o captcha?
CURLOPT_COOKIEJAR => $cookie, //então, precisamos deles :)
CURLOPT_FOLLOWLOCATION => 1, // não quero explicar, mas é importante. pesquisa ae depois ;)
CURLOPT_RETURNTRANSFER => 1, // quer ver os dados? então sempre ative esta opção no seu script
CURLOPT_HEADER => 0, // sem header
));
$result = curl_exec($ch);
curl_close($ch);
/*
//Se deu algum erro, a Receita mostra a mesma página do formulario do captcha
//Vamos descobrir se é a mesma página do formulário do captcha e redirecionar para a nossa página.
if (preg_match("/<title>Emiss.*<\/title>/siU", $result)) {
//Então volta pro nosso formulário para preenchimento dos dados.
//Estava com preguiça de pensar algo mais útil, então fiz esse só de exemplo mesmo.
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'receita.php';
header("Location: http://meusite.com.br/cnpj/receita.php");
return;
} */
print $result . '0';
?>
Não está funcionando, provavelmente é algum erro bobo, ou eu que não entendo o suficiente mesmo. De qualquer forma agradeço a resposta de vocês