Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

adrigoli

Logar no portal NFe com cURL e PHP

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que parece, pode ser alguma coisa relacionado a cookies.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que parece, pode ser alguma coisa relacionado a cookies.

 

Obrigado pela atenção.

 

Se for cookies aonde deve estar esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

http://www.meifacil.com.br/system/estudo/nfe/cookie.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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