adrigoli 1 Denunciar post Postado Maio 6, 2014 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
adrigoli 1 Denunciar post Postado Maio 6, 2014 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
mau rs 37 Denunciar post Postado Maio 6, 2014 Pelo que parece, pode ser alguma coisa relacionado a cookies. Compartilhar este post Link para o post Compartilhar em outros sites
adrigoli 1 Denunciar post Postado Maio 7, 2014 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
KhaosDoctor 242 Denunciar post Postado Maio 7, 2014 Limpe todas as sessões e cookies ao entrar na página. Compartilhar este post Link para o post Compartilhar em outros sites
adrigoli 1 Denunciar post Postado Maio 7, 2014 Limpe todas as sessões e cookies ao entrar na página. obrigado pela atenção. Como eu faço isso? Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 7, 2014 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
adrigoli 1 Denunciar post Postado Maio 7, 2014 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
Playerbr 21 Denunciar post Postado Maio 7, 2014 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
adrigoli 1 Denunciar post Postado Maio 7, 2014 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
KhaosDoctor 242 Denunciar post Postado Maio 7, 2014 obrigado pela atenção. Como eu faço isso? https://www.google.com.br/search?q=clean+sessions+and+cookies+php&oq=clean+sessions+and+cookies+php&aqs=chrome..69i57.6148j0j7&sourceid=chrome&es_sm=0&ie=UTF-8 Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 7, 2014 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
adrigoli 1 Denunciar post Postado Maio 7, 2014 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
adrigoli 1 Denunciar post Postado Maio 8, 2014 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. Compartilhar este post Link para o post Compartilhar em outros sites
Playerbr 21 Denunciar post Postado Maio 9, 2014 Você fez a alteração dentro do consulta.php também? o arquivo têm permissão de acesso? Compartilhar este post Link para o post Compartilhar em outros sites
adrigoli 1 Denunciar post Postado Maio 9, 2014 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.comObrigado a todos e aguardo contatos. Compartilhar este post Link para o post Compartilhar em outros sites
HumbertoJunior 0 Denunciar post Postado Maio 27, 2014 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
Glauco Sonoda 0 Denunciar post Postado Outubro 23, 2014 Boa tarde, por acaso vocês conseguiram chegar a uma solução? Compartilhar este post Link para o post Compartilhar em outros sites
chaakal 0 Denunciar post Postado Novembro 1, 2014 eu consegui \o/ Compartilhar este post Link para o post Compartilhar em outros sites
Electronic 124 Denunciar post Postado Novembro 1, 2014 eu consegui \o/ É isso mesmo? tu criou uma conta só pra dizer que conseguiu e nao vai dizer como? Compartilhar este post Link para o post Compartilhar em outros sites