Estoy realizando un pequeño script en php para poder enviar datos automaticamente (sin que el usuario escriba nada ) a la pagina de verificacion de CFDI del SAT, aqui en mexico.
esta es la pagina: https://verificacfdi.facturaelectronica.sat.gob.mx/
Entonces se me ocurrio cargar la pagina del SAT con CURL, y el resultado ocultarlo, excepto el capcha donde coloco un cuadro de texto dentro de un formulario y muestro el capcha. toda la informacion de la factura se colocara de forma automatica en los hidden de mi formulario. y hasta ahi todo bien.
Pero mi problema es que cuando quiero enviar los parametros mediante curl y post, me carca un error. pero si en mi formulario el action es hacia la pagina del sat directamente funciona sin nigun problema, es decir, se obtiene el resultado de la comprobacion de la factura.
Entonces, sera que alguien tenga alguna idea de porque sucede eso??
aca les paso el codigo de mi script
PAra probar en el formulario, si dejo el action en blanco cargo mi mismo script me me marca un error el resultado de la pagina del SAT, pero si coloco la direccion del SAT, el resultado es correcto.
Gracias de antemano. y cualquier idea o algo que me pueda ayudar sera muy bien recibido!!!
saludos!!!
Código:
<?php function post_web_page($url, $option) { echo $option; $ch = curl_init($url);//URL A ENVIAR EL CONTENIDO $options = array( CURLOPT_RETURNTRANSFER => true, // return web page //CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings //CURLOPT_USERAGENT => "spider", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_POST => true, CURLOPT_POSTFIELDS => $option, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_CAINFO => getcwd() . "\GeoTrustGlobalCA.crt", ); //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//OPCIONAL: NO RETORNARA EL RESULTADO DE LA OPERACION curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } function get_web_page( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "spider", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect CURLOPT_TIMEOUT => 120, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_SSL_VERIFYPEER => false, ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } if (empty($_POST)){ $url = 'https://verificacfdi.facturaelectronica.sat.gob.mx/'; $res=get_web_page( $url ); $output=str_replace('href="', 'href="https://verificacfdi.facturaelectronica.sat.gob.mx/', $res['content']); $output=str_replace('src="', 'src="https://verificacfdi.facturaelectronica.sat.gob.mx/', $output); echo '<div style="display:none">'. $output .'</div>'; ?> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script> $(function(){ a=$('#__VIEWSTATE').val(); $('#VIEWSTATE').attr({'value': a}); a=$('#ctl00_MainContent_ImgCaptcha').attr('src'); $('#c').attr('src', a); }); </script> <br/> <form action="" method="post" enctype="application/x-www-form-urlencoded" name="form" id="form" > <input type="submit" /> <input type="hidden" value="true" name="__ASYNCPOST" /> <input type="hidden" value="" name="__EVENTARGUMENT" /> <input type="hidden" value="" name="__EVENTTARGET" /> <input type="hidden" value="" name="__VIEWSTATE" id="VIEWSTATE" /> <input type="hidden" value="" name="__VIEWSTATEENCRYPTED" /> <input type="hidden" value="Verificar CFDI" name="ctl00$MainContent$BtnBusqueda" /> <input type="text" value="" name="ctl00$MainContent$TxTCaptchaNumbers" id="cap" /> <input type="hidden" value="AXT940727FP8" name="ctl00$MainContent$TxtRfcEmisor" /> <input type="hidden" value="AGU931206CH4" name="ctl00$MainContent$TxtRfcReceptor" /> <input type="hidden" value="EF48422A-1B0D-467F-A9E5-BEEFAD703560" name="ctl00$MainContent$TxtUUID" /> <input type="hidden" value="ctl00$MainContent$UpnlBusqueda|ctl00$MainContent$BtnBusqueda" name="ctl00$ScriptManager1" /> <img id="c" src="" /> </form> <?php } else { $op = "__ASYNCPOST=true&__EVENTARGUMENT=&__EVENTTARGET=&__VIEWSTATE=".$_POST['__VIEWSTATE']."&__VIEWSTATEENCRYPTED=&ctl00$MainContent$BtnBusqueda=".$_POST['ctl00$MainContent$BtnBusqueda']."&ctl00$MainContent$TxTCaptchaNumbers=".$_POST['ctl00$MainContent$TxTCaptchaNumbers']."&ctl00$MainContent$TxtRfcEmisor=".$_POST['ctl00$MainContent$TxtRfcEmisor']."&ctl00$MainContent$TxtRfcReceptor=:".$_POST['ctl00$MainContent$TxtRfcReceptor']."&ctl00$MainContent$TxtUUID=".$_POST['ctl00$MainContent$TxtUUID']."&ctl00$ScriptManager1=".$_POST['ctl00$ScriptManager1']; $url="https://verificacfdi.facturaelectronica.sat.gob.mx/"; $res = post_web_page($url,$op); echo htmlentities( $res['content']).'<br/>'; echo $res['errmsg'].'<br/>'; echo $res['errno'].'<br/>'; } ?>