camafeu 0 Denunciar mensagem Publicado 22 de Outubro de 2017 Boas. Alguem sabe se existe forma de efectuar login no portal das finanças através do cURL? A ideia é fazer login e posteriormente fazer o get das faturas através do JSON (https://faturas.portaldasfinancas.gov.pt/json/obterDocumentosAdquirente.action). O código que tenho é o seguinte: //set the directory for the cookie using defined document root var $dir = "/home/conta/web/cookies"; //build a unique path with every request to store //the info per user with custom func. $path = $dir; $cookie_file_path = $path."/cookie.txt"; //login data $postData1 = array( 'path' => 'painelAdquirente.action', 'partID' => 'EFPF', 'authVersion' => '1', '_csrf' => '9555c9e9-a5a6-41a2-8241-e02aa4a6db1c', 'selectedAuthMethod' => 'N', 'username' => 'USER_NAME', 'password' => 'PASSWORD' ); $url = 'https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, $path); //could be empty, but cause problems on some hosts $answer = curl_exec($ch); if (curl_error($ch)) { echo curl_error($ch); } Obtenho o erro: Por motivos de ordem técnica não nos é possível responder ao seu pedido. Por favor tente mais tarde. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
camafeu 0 Denunciar mensagem Publicado 22 de Outubro de 2017 Ja consigo fazer login corrigindo isto: curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData1)); No entanto, o portal das financas faz um redirect após login com sucesso. Já usei o parametro a baixo mas nada feito... não faz o redirect. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); Alguma ideia? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
s0me0ne 0 Denunciar mensagem Publicado 13 de Junho Boas a todos, Dentro do mesmo assunto gostava de saber se alguém sabe como abrir o portal da at autenticado. Tenho o seguinte código: <form name="loginForm" target="_blank" id="loginForm" action="https://www.acesso.gov.pt/jsp/submissaoFormularioLogin" method="POST" style="" autocomplete="off" > <!-- TAB LOGIN consultarDocumentosAdquirente.action painelAdquirente.action--> <input type="hidden" name="path" value="painelAdquirente.action"> <input type="hidden" name="partID" value="EFPF"> <input type="hidden" name="authVersion" value="1"> <input type="hidden" name="_csrf" value="8ae60105-900e-4b71-af16-c7eeeda5c50b"> <input type="hidden" id="selectedAuthMethodNIF" name="selectedAuthMethod" value="N"> <input type="hidden" id="selectedAuthMethod" name="selectedAuthMethod" value="C"> <input type="hidden" name="username" id="username" value="XXXXXXXXXXXXXXXX"> <input type="hidden" class="password error" name="password" value="YYYYYYYYYYYYYYYY" id="password"> <button type="submit" name="sbmtLogin" id="sbmtLogin" tabindex="4" class="sa-btn1" value="Entrar"> Autenticar </button> </form> Está a dar-me erro no campo _csrf que pelo que verifiquei é um campo de ligação único. Se abrir o site https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp?path=painelAdquirente.action&partID=EFPF e copiar o codigo para este formulário, consigo aceder uma única vez, se aceder uma segunda vez dá erro de Pedido Inválido. Já tentei fazer um parse ao html e retirar o código e registar um novo código csrf, mas obtenho sempre o mesmo erro. Alguma Ajuda? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
camafeu 0 Denunciar mensagem Publicado 13 de Junho $cookie_file_path = $path."/cookie.txt"; $cookie_file_path2 = $path."/cookie2.txt"; $cookie_file_path3 = $path."/cookie3.txt"; //login data $postData1 = array( 'path' => 'painelAdquirente.action', 'partID' => 'EFPF', 'authVersion' => '1', '_csrf' => '4467-9222-41b7f3b72715', 'selectedAuthMethod' => 'N', 'username' => $nif, 'password' => $password ); //faturas data $postData2 = array( 'dataInicioFilter' => '2017-01-01', 'dataFimFilter' => '2017-10-21', 'ambitoAquisicaoFilter' => 'TODOS', '_' => '1611270412' ); $ch = curl_init(); // fetch cURL login $url = 'https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp'; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, $path); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, "https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData1)); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true ); $answer1 = curl_exec($ch); //parsing do html $html = $answer1; $crawler = new Crawler($html); $link = $crawler->filter('input[type="hidden"]'); $sign = $link->filter('input[name="sign"]')->attr('value'); $userID = $link->filter('input[name="userID"]')->attr('value'); $sessionID = $link->filter('input[name="sessionID"]')->attr('value'); $nif = $link->filter('input[name="nif"]')->attr('value'); $tc = $link->filter('input[name="tc"]')->attr('value'); $tv = $link->filter('input[name="tv"]')->attr('value'); $userName = $link->filter('input[name="userName"]')->attr('value'); $partID = $link->filter('input[name="partID"]')->attr('value'); //redirect data $postData3 = array( 'sign' => $sign, 'userID' => $userID, 'sessionID' => $sessionID, 'nif' => $nif, 'tc' => $tc, 'tv' => $tv, 'userName' => $userName, 'partID' => $partID ); // redirect login $url3 = "https://faturas.portaldasfinancas.gov.pt/painelAdquirente.action"; curl_setopt($ch, CURLOPT_URL, $url3); curl_setopt($ch, CURLOPT_REFERER, $url3); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData3)); $answer3 = curl_exec($ch); // fetch cURL faturas $url2 = "https://faturas.portaldasfinancas.gov.pt/json/obterDocumentosAdquirente.action"; curl_setopt($ch, CURLOPT_URL, $url2); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData2)); $answer2 = utf8_decode(curl_exec($ch)); curl_close($ch); $json_faturas = json_decode(html_entity_decode($answer2), true); Tens aqui um exemplo de como ir buscar as facturas do e-fatura com respectivo login permanente. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
s0me0ne 0 Denunciar mensagem Publicado 14 de Junho @camafeu Obrigado pela resposta. Sabes dizer-me se o endereço do exemplo está a funcionar? Estou a testar e aparece tudo a branco, sem qualquer tipo de erro. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
CarlosA 0 Denunciar mensagem Publicado 16 de Julho On 6/13/2018 at 5:48 PM, camafeu said: $cookie_file_path = $path."/cookie.txt"; $cookie_file_path2 = $path."/cookie2.txt"; $cookie_file_path3 = $path."/cookie3.txt"; //login data $postData1 = array( 'path' => 'painelAdquirente.action', 'partID' => 'EFPF', 'authVersion' => '1', '_csrf' => '4467-9222-41b7f3b72715', 'selectedAuthMethod' => 'N', 'username' => $nif, 'password' => $password ); //faturas data $postData2 = array( 'dataInicioFilter' => '2017-01-01', 'dataFimFilter' => '2017-10-21', 'ambitoAquisicaoFilter' => 'TODOS', '_' => '1611270412' ); $ch = curl_init(); // fetch cURL login $url = 'https://www.acesso.gov.pt/jsp/loginRedirectForm.jsp'; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_COOKIEFILE, $path); //could be empty, but cause problems on some hosts curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, "https://faturas.portaldasfinancas.gov.pt/consultarDocumentosAdquirente.action"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData1)); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true ); $answer1 = curl_exec($ch); //parsing do html $html = $answer1; $crawler = new Crawler($html); $link = $crawler->filter('input[type="hidden"]'); $sign = $link->filter('input[name="sign"]')->attr('value'); $userID = $link->filter('input[name="userID"]')->attr('value'); $sessionID = $link->filter('input[name="sessionID"]')->attr('value'); $nif = $link->filter('input[name="nif"]')->attr('value'); $tc = $link->filter('input[name="tc"]')->attr('value'); $tv = $link->filter('input[name="tv"]')->attr('value'); $userName = $link->filter('input[name="userName"]')->attr('value'); $partID = $link->filter('input[name="partID"]')->attr('value'); //redirect data $postData3 = array( 'sign' => $sign, 'userID' => $userID, 'sessionID' => $sessionID, 'nif' => $nif, 'tc' => $tc, 'tv' => $tv, 'userName' => $userName, 'partID' => $partID ); // redirect login $url3 = "https://faturas.portaldasfinancas.gov.pt/painelAdquirente.action"; curl_setopt($ch, CURLOPT_URL, $url3); curl_setopt($ch, CURLOPT_REFERER, $url3); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData3)); $answer3 = curl_exec($ch); // fetch cURL faturas $url2 = "https://faturas.portaldasfinancas.gov.pt/json/obterDocumentosAdquirente.action"; curl_setopt($ch, CURLOPT_URL, $url2); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData2)); $answer2 = utf8_decode(curl_exec($ch)); curl_close($ch); $json_faturas = json_decode(html_entity_decode($answer2), true); Tens aqui um exemplo de como ir buscar as facturas do e-fatura com respectivo login permanente. @camafeu, como posso implementar este código diretamente sem instalar o PHP, Apache e afins? Será que é possível arranjar-se algo parecido em VBA excel? Obrigado Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites