Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Já pesquisei muito sobre isso e até agora não consegui fazer nada concreto. Será que isso é possível?
Quero fazer um formulario com o campo chave de acesso e o codigo captcha para ser preenchido. logo será enviado esses dados para o portal nfe e me retornará as informações da nfe.
Veja o que fiz até agora: http://www.meifacil.com.br/system/estudo/nfe/
codigo acesso para teste: 33110733068883000201550010115687931122936510
Com isso ocorre o erro de sessão expirada.
index.php
<?php
session_start();
$cookie_file = tempnam(realpath(sys_get_temp_dir()), "CURLCOOKIE");
$_SESSION['cookie_file'] = substr($cookie_file, strrpos(tempnam(realpath(sys_get_temp_dir()), "CURLCOOKIE"), '/'));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<body>
<?php
function recebe_imagem($url, $arquivo, $cookief = "", $cookiej = "") {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
/* if(!empty($cookief)) {
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
}
if(!empty($cookiej)) {
curl_setopt($ch, CURLOPT_COOKIESESSION, "cookie.txt");
} */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0)");
//curl_setopt($ch, ,
$data = curl_exec($ch);
//curl_close ($ch);
$fp = fopen($arquivo, 'w');
fwrite($fp, $data);
fclose($fp);
return $arquivo;
}
?>
<?php
$img = recebe_imagem("http://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image ", "receita.gif", "", "receita.txt");
?>
<img src="receita.gif" />
<form method="POST" action="consulta.php">
captcha
<input name='letras' maxlength='4' size='8' />
<br />
codigo acesso
<input name='cnpj' maxlength='44' size='60' />
<input type="submit" />
</form>
</body>
</html>
consulta.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<body>
<?php
$cnpj = $_POST['cnpj'];
$letras = $_POST['letras'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "ContentPlaceHolder1$txtChaveAcessoCompleta=$cnpj&ContentPlaceHolder1$txtCaptcha=$letras&ContentPlaceHolder1$btnConsultar=Continuar");
curl_setopt($ch, CURLOPT_REFERER, "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= ");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_URL, "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8= ");
$output = curl_exec($ch);
echo utf8_encode($output);
?>
</body>
</html>
Alguma alma caridosa pode me ajudar, ou tem algum script para isso bem melhor e possa me passar?
Aguardo ajuda.
Pelo que parece, pode ser alguma coisa relacionado a cookies.
Pelo que parece, pode ser alguma coisa relacionado a cookies.
Obrigado pela atenção.
Se for cookies aonde deve estar esse problema?
Limpe todas as sessões e cookies ao entrar na página.
Limpe todas as sessões e cookies ao entrar na página.
obrigado pela atenção.
Como eu faço isso?
Eu não sei se pode ser isso...
Mas já fiz um sistema usando curl para filtrar links do megaupload enviados para a conta, faz muito tempo.
Na época, tive problemas com os cookies, pois usava o caminho relativo do arquivo de cookies e por problemas de permissão "talvez", não funcionava.
Pra resolver, acabei usando o caminho absoluto com permissões de escrita na pasta, gerava um arquivo em branco para os cookies usando o fopen com o php antes, pois eram várias contas.
Tente trocar o arquivo de cookie, de caminho relativo, pelo arquivo com o caminho absoluto e garanta que o arquivo possui permissão de escrita
curl_setopt($ch, CURLOPT_COOKIESESSION, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");>
Eu não sei se pode ser isso...
Mas já fiz um sistema usando curl para filtrar links do megaupload enviados para a conta, faz muito tempo.
Na época, tive problemas com os cookies, pois usava o caminho relativo do arquivo de cookies e por problemas de permissão "talvez", não funcionava.
Pra resolver, acabei usando o caminho absoluto com permissões de escrita na pasta, gerava um arquivo em branco para os cookies usando o fopen com o php antes, pois eram várias contas.
Tente trocar o arquivo de cookie, de caminho relativo, pelo arquivo com o caminho absoluto e garanta que o arquivo possui permissão de escrita
curl_setopt($ch, CURLOPT_COOKIESESSION, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
Obrigado pela atenção,
Mais como faço isso? estou meio confuso.
Use o fopen do php para criar um arquivo txt vazio.
http://br1.php.net/manual/pt_BR/function.fopen.php
pegue o nome com o caminho complete do arquivo que você acabou de criar:
"caminho/completo/ate_o/arquivo/cookie.txt"
Onde você têm cookie.txt troque pelo caminho completeo
curl_setopt($ch, CURLOPT_COOKIESESSION, "caminho/completo/ate_o/arquivo/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "caminho/completo/ate_o/arquivo/cookie.txt");
O endereço de destino irá usar este arquivo para armazenar e alterar os cookies, não existe relação com os cookies do cliente que está acessando o seu sistema.
criei o arquivo mais o arquivo cookie fica vazio e da o mesmo erro.
veja a mudança que fiz:
function recebe_imagem($url, $arquivo, $cookief = "", $cookiej = "") {
fopen('cookie.txt', 'w+'); /// mudei aqui.
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, "http://www.meifacil.com.br/system/estudo/nfe/cookie.txt"); /// mudei aqui
curl_setopt($ch, CURLOPT_COOKIEFILE, "http://www.meifacil.com.br/system/estudo/nfe/cookie.txt"); /// mudei aqui
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0)");
//curl_setopt($ch, ,
$data = curl_exec($ch);
//curl_close ($ch);
$fp = fopen($arquivo, 'w');
fwrite($fp, $data);
fclose($fp);
return $arquivo;
}
Estou meio confuso com esse script, peguei ele em andamento e para falar a verdade não entendi ele direito.
Aguardo ajuda.
>
obrigado pela atenção.
Como eu faço isso?
O caminho absoluto do arquivo é o caminho dele no servidor de arquivos e não o caminho dele na web.
no windows seria algo assim
c:/pasta1/pasta2/arquivo.txt
Esse arquivo nem se quer pode ficar acessível na web.
Você colocou um link web, não é possível escrever neste arquivo.
Fiz a modificação mais continua a não salvar nada no cookie e continua o erro de sessão expirada.
function recebe_imagem($url, $arquivo, $cookief = "", $cookiej = "") {
fopen('/home/meifacil2/tmp/cookie.txt', 'w+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
/* if(!empty($cookief)) {
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
}
if(!empty($cookiej)) {
curl_setopt($ch, CURLOPT_COOKIESESSION, "cookie.txt");
} */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, "/home/meifacil2/tmp/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "/home/meifacil2/tmp/cookie.txt");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0)");
//curl_setopt($ch, ,
$data = curl_exec($ch);
//curl_close ($ch);
$fp = fopen($arquivo, 'w');
fwrite($fp, $data);
fclose($fp);
return $arquivo;
}Nossa já estou a 5 dias a tentar fazer isso e até agora nada.
Sei que isso é possível, veja aqui> http://www.danfeonline.com.br/
Se alguém tiver alguma dica ficarei grato.
Você fez a alteração dentro do consulta.php também?
o arquivo têm permissão de acesso?
Valew pela ajuda playerbr, KhaosDoctor e mau rs.
Mais não consigo fazer, como preciso muito disso estou disposto a pagar para algum freelancer fazer esse script para mim.
Caso alguém tenha interesse entre em contato comigo neste e-mail > designeradrianomoreschi@gmail.com
Obrigado a todos e aguardo contatos.
Eu também esteou tendo que fazer o mesmo sistema que você Adrigoli, vamos ver se juntos agente consegue resolver este Problema, veja abaixo o Código mais próximo que consegui para poder fazer funcionar.
==============----------------==================-------------------
<?php
function postify($arr) {
$fields_string = '';
foreach ($arr as $key => $value) {
$fields_string .= $key . '=' . $value . '&';
}
//echo rtrim($fields_string, '&');
return rtrim($fields_string, '&');
}
$path= realpath("cookie.txt");
$pagina="http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp";
if(isset($_POST['submit1'])){
$pagina="http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp";
//$pagina="http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp";
//$pagina="http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, $Path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Path);
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_URL, $pagina);
if(isset($_POST['submit1'])){
$post = array (
'origem' => 'comprovante',
'viewstate' => $_POST['viewstate'],
'cnpj' => $_POST['cnpj'],
'captcha' => $_POST['captcha'],
'captchaAudio' => '',
'submit1' => 'Consultar',
'search_type' => 'cnpj'
);
curl_setopt($ch, CURLOPT_POST, count($post));
curl_setopt($ch, CURLOPT_POSTFIELDS, postify($post));
$cookie=array("flag"=>1);
}else{
$cookie=array("flag"=>0);
}
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILETIME, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIESESSION, "http://localhost/om/curl/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "http://localhost/om/curl/cookie.txt");
$formulario = curl_exec($ch);
curl_close($ch);
if(isset($_POST['submit1'])){
echo $formulario;
}
//resolvendo o viewstate
$inicio=strpos($formulario,"name=viewstate");
$fim=strpos($formulario,"<table border=\"0\" cellspacing=\"1\">");
$viewstate=trim(substr($formulario,($inicio+22),($fim-$inicio-31)));//resolvendo o captcha
$inicio=strpos($formulario,"anti rob");
$fim=strpos($formulario,"Se os carac");
$src="http://www.receita.fazenda.gov.br".trim(substr($formulario,($inicio+16),($fim-$inicio-23)));
//echo $src;
echo "<form name=\"frmConsulta\" method='post' action=''>
<input type='hidden' name='origem' value='comprovante'>
<input type='hidden' name='viewstate' value='".$viewstate."'>
<input type='hidden' name='cnpj' value='33257007000142'>
<img src='".$src."'><br>
<input type='text' name='captcha'>
<input type='hidden' name='captchaAudio' =''>
<input type='hidden' name='search_type' value='cnpj'>
<input type='submit' name='submit1' value='Consultar'>
</form>";
?>Boa tarde, por acaso vocês conseguiram chegar a uma solução?
eu consegui \o/
eu consegui \o/
É isso mesmo?
tu criou uma conta só pra dizer que conseguiu e nao vai dizer como?
Poderiam postar a solução? Estou desenvolvendo e estou com o problema: "A sessão expirou. Faça a consulta novamente." faz uns 20 dias também.
Boa tarde,
Cheguei na mesma situação "A sessão expirou. Faça a consulta novamente."
Alguém poderia me ajudar ?
Alguém chegou a alguma solução, poderia postar a resposta ?
>
On 07/11/2016 at 4:26 PM, marcos wilceki said:
Alguém chegou a alguma solução, poderia postar a resposta ?
Eu achei postei aqui
Acredito que estou prestes em conseguir essa função......mais continua persistindo o erro de sessão expirada.
Alguem pra me dar alguma informação, ou me dizer se isso é possível?