Página 1 de 2
Web Service para Validar del SAT
Publicado: Jue Nov 24, 2011 11:10 am
por naringas
Les comparto que enterrado en los recónditos rincones del sito del SAT encontré el Web Service que proveen para validación de CFDs de servidor a servidor (así le dicen ellos).
Este documento lo explica todo
ftp://ftp2.sat.gob.mx/asistencia_ftp/pu ... idador.pdf
El web service (como indica el PDF) esta en
https://tramitesdigitales.sat.gob.mx/Si ... DsExt.asmx
Implemente una validación con este esquema en PHP, y es bastante sencillo usando PHP 5 y sus librerias SOAP y DOM XML (si hubiera interés les comparto más, sin embargo lo que implemente es parte de una solución mas grande con Drupal 7)
Adjunto el XSD que viene incluido en el PDF pero ya limpio, indentado, y corregido (cambié & por & y quite algunos caracteres extra).
También les pongo un ejemplo de un XML que pasa validación con este XSD. Este es el XML que deben enviar dentro del SOAP
Código: Seleccionar todo
<?xml version="1.0" encoding="UTF-8"?>
<ColleccionFoliosCfd xmlns="http://www.sat.gob.mx/Asf/Sicofi/ValidacionFoliosCFD/1.0.0">
<Folio>
<Id>1</Id>
<Rfc>AAA121212AAA</Rfc>
<Serie>FA</Serie>
<NumeroFolio>9</NumeroFolio>
<NumeroAprobacion>12345</NumeroAprobacion>
<AnioAprobacion>2010</AnioAprobacion>
<CertificadoNumeroSerie>0000011111111</CertificadoNumeroSerie>
<CertificadoFechaEmision>2011-12-12T14:20:15</CertificadoFechaEmision>
</Folio>
</ColleccionFoliosCfd>
Como se daran cuenta los datos (RFC, numero de folio, etc...) son inventados.
Esto es un ejemplo de lo que contesta (no corresponde a la petición ya que esta respuesta tiene más de un <Id>)
Código: Seleccionar todo
<cfd:RespuestaFoliosCfd xmlns:cfd="http://www.sat.gob.mx/Asf/Sicofi/RespuestaFoliosCFD/1.0.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cfd:ResultadoValidacion id="firmar">
<cfd:Id>1</cfd:Id>
<cfd:ResultadoValidacion>VV</cfd:ResultadoValidacion>
</cfd:ResultadoValidacion>
<cfd:ResultadoValidacion id="firmar">
<cfd:Id>2</cfd:Id>
<cfd:ResultadoValidacion>VV</cfd:ResultadoValidacion>
</cfd:ResultadoValidacion>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#firmar">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>...=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>...</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>...</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</cfd:RespuestaFoliosCfd>
Aquí quite algunos campos muy largos de la Firma que incluye la respuesta (que no esta documentada en el PDF)
Re: Web Service para validar del SAT
Publicado: Jue Nov 24, 2011 11:38 am
por Dado
Vaya! por fin lo publicaron.
Ya se sabia de este servicio desde hace un tiempo, el *pequeño* inconveniente es que NO HABIA LA DIRECCION donde consumir el servicio, pero veo que ya esta publicado, pues este año si que tenemos muchos "regalos" je je je
GRACIAS POR LA INFORMACION.
Re: Web Service para Validar del SAT
Publicado: Mar Dic 13, 2011 6:01 pm
por naringas
Me parece que el servicio arroja
resultados incorrectos en algunos casos.
La validación a través de este web service me da como resultado
VI que según el PDF significa que el certificado es invalido. Sin embargo la validación por medio de la aplicación JAVA, por medio de la página (
https://tramitesdigitales.sat.gob.mx/Si ... taria.aspx), usando validaCFD e incluso con mi propia validación local (descargando los archivos del SAT a mi computadora) dicen que el certificado es vigente a la fecha de emisión del CFD.
Me parece que el web service da el resultado incorrecto cuando el RFC emisor ha tenido más de un certificado y uno de ellos (o tal vez solo el primero) ya no está activo.
¿Alguien puede confirmar esto?
¿Cómo se le podría avisar al SAT sobre esto?
Re: Web Service para Validar del SAT
Publicado: Mar Mar 20, 2012 3:29 pm
por msanchez
Hola a todos y antes que todo muchas gracias por el post, me ha sido de mucha ayuda, de hecho entre este post y otro que encontré en la Web pude llegar al siguiente código de PHP (Soy muy novato en los conceptos del uso de Webservices, por favor ténganme paciencia) para validar el XML que sugieren como aceptable ante el webservice aquí en el post original pero el resultado que estoy obteniendo es una cadena como de sello digital o algo encriptado, es obvio que estoy haciendo algo mal, cualquier ayuda es de mucha ayuda
Pasar el XML como variable directa al webservice
Código: Seleccionar todo
<?php
//Cadena lista para pasarla como variable directamente , contiene diagonales invertidas para escapar las comillas dobles
$cadena_xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ColleccionFoliosCfd xmlns=\"http://www.sat.gob.mx/Asf/Sicofi/ValidacionFoliosCFD/1.0.0\"><Folio><Id>1</Id><Rfc>AAA121212AAA</Rfc><Serie>FA</Serie><NumeroFolio>9</NumeroFolio><NumeroAprobacion>12345</NumeroAprobacion><AnioAprobacion>2010</AnioAprobacion><CertificadoNumeroSerie>0000011111111</CertificadoNumeroSerie><CertificadoFechaEmision>2011-12-12T14:20:15</CertificadoFechaEmision></Folio></ColleccionFoliosCfd>";
$client = new SoapClient("https://tramitesdigitales.sat.gob.mx/Sicofi.wsExtValidacionCFD/WsValidacionCFDsExt.asmx?WSDL");
$result = $client->ValidarXmlCFD(array('xml' => $cadena_xml));
// Note that $array contains the result of the traversed object structure
$array = $result->ValidarXmlCFDResult;
//ValidarXmlCFD
print_r ($array);
echo "<br />";
echo "<br />";
var_dump($result);
?>
Pasar el XML a traves de POST como contenido de un campo en formulario al webservice
Código: Seleccionar todo
<?php
if(!empty($_POST) && isset($_POST))
{
$cadena_xml = (string) $_POST['cadena_xml'];
//Cadena limpia lista para copiar y pegar en el campo del formulario
/* $cadena_xml="<?xml version="1.0" encoding="UTF-8"?><ColleccionFoliosCfd xmlns="http://www.sat.gob.mx/Asf/Sicofi/ValidacionFoliosCFD/1.0.0"><Folio><Id>1</Id><Rfc>AAA121212AAA</Rfc><Serie>FA</Serie><NumeroFolio>9</NumeroFolio><NumeroAprobacion>12345</NumeroAprobacion><AnioAprobacion>2010</AnioAprobacion><CertificadoNumeroSerie>0000011111111</CertificadoNumeroSerie><CertificadoFechaEmision>2011-12-12T14:20:15</CertificadoFechaEmision></Folio></ColleccionFoliosCfd>";
*/
$client = new SoapClient("https://tramitesdigitales.sat.gob.mx/Sicofi.wsExtValidacionCFD/WsValidacionCFDsExt.asmx?WSDL");
$result = $client->ValidarXmlCFD(array('xml' => $cadena_xml));
// Note that $array contains the result of the traversed object structure
$array = $result->ValidarXmlCFDResult;
//ValidarXmlCFD
print_r ($array);
echo "<br />";
echo "<br />";
var_dump($result);
}
else
{
?>
<form id="validar_xmls" action="index.php" method="post">
Pegar el contenido del XML a enviar por SOAP<br>
<textarea name="cadena_xml" cols="75" rows="6" id="cadena_xml"></textarea>
<input id="submit" name="submit" type="submit" value="submit" />
</form>
<?php
}
?>
En el codigo de arriba se presentan 2 escenarios y ambos escenarios funcionan desde el punto de vista que el webservice regresa algo como lo que sigue, por favor tomen en cuenta que la primera salida o resultado es el del print_r y la siguiente el de Var_dump:
Código: Seleccionar todo
1IIJvdurN00ckBTgdyYq2BmLHIhSAo=bIM7ZC0mbBfPwzHhGU24e8cyyVhmI+gS4rUBiFrsaoRkEe6X25kPVH9Zv65Q4Ncb0lvp3A2XPyIL6egOTp3u7r6lf4kV3ZNHn5prKpo+6XIJS4jkkicSWo5hDN5QgSS/4XsOYn1riQwlbHk4cScQHtw+v89sVIEcG6rGI+nMVh0=MIIDBDCCAm2gAwIBAgIJAJhhI7VVwVfPMA0GCSqGSIb3DQEBBQUAMGAxCzAJBgNVBAYTAk1YMQ0wCwYDVQQIEwRELkYuMQ8wDQYDVQQHEwZNZXhpY28xDTALBgNVBAoTBFNIQ1AxDDAKBgNVBAsTA1NBVDEUMBIGA1UEAxQLc2ljb2ZpX3Byb2QwHhcNMTAwNzE5MjEzNDI1WhcNMTEwNzE5MjEzNDI1WjBgMQswCQYDVQQGEwJNWDENMAsGA1UECBMERC5GLjEPMA0GA1UEBxMGTWV4aWNvMQ0wCwYDVQQKEwRTSENQMQwwCgYDVQQLEwNTQVQxFDASBgNVBAMUC3NpY29maV9wcm9kMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBJXEOy1yWJ7sGBZO1ZOmmNhv0Qds9CyHUDMCUZinfGkyezL1J8l4k336Z9OHv2Kxr+o1yWhm0YU0fSYaz9nLLv4YRJdXOyc18svMKFXTE4DwfWKNUWHaXYfLrmwU3lChJqImB3O9nDDlXlKpGTP6wYONYQUaVub/t2mabG/aCFQIDAQABo4HFMIHCMB0GA1UdDgQWBBRVXRbdz2rCiW6VJMaVF5HPA7DENzCBkgYDVR0jBIGKMIGHgBRVXRbdz2rCiW6VJMaVF5HPA7DEN6FkpGIwYDELMAkGA1UEBhMCTVgxDTALBgNVBAgTBEQuRi4xDzANBgNVBAcTBk1leGljbzENMAsGA1UEChMEU0hDUDEMMAoGA1UECxMDU0FUMRQwEgYDVQQDFAtzaWNvZmlfcHJvZIIJAJhhI7VVwVfPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAjGqMpZozqyQigWKudUSCKdQ5znBPBMUjXitW+4S4q6Yqqj07YqMwUIjBlPcK3FW+hkKwygSmXMqqLe5Q7NmY/pcUylnVgP+V2IGwzxOPSDJWoKzYUycUYW217LNF7GV/46H7pXhEVx6aoIlvwaNi6N6bFmCaiR4XpQxYutve1UA=
object(stdClass)#2 (1) { ["ValidarXmlCFDResult"]=> string(2139) "1IIJvdurN00ckBTgdyYq2BmLHIhSAo=bIM7ZC0mbBfPwzHhGU24e8cyyVhmI+gS4rUBiFrsaoRkEe6X25kPVH9Zv65Q4Ncb0lvp3A2XPyIL6egOTp3u7r6lf4kV3ZNHn5prKpo+6XIJS4jkkicSWo5hDN5QgSS/4XsOYn1riQwlbHk4cScQHtw+v89sVIEcG6rGI+nMVh0=MIIDBDCCAm2gAwIBAgIJAJhhI7VVwVfPMA0GCSqGSIb3DQEBBQUAMGAxCzAJBgNVBAYTAk1YMQ0wCwYDVQQIEwRELkYuMQ8wDQYDVQQHEwZNZXhpY28xDTALBgNVBAoTBFNIQ1AxDDAKBgNVBAsTA1NBVDEUMBIGA1UEAxQLc2ljb2ZpX3Byb2QwHhcNMTAwNzE5MjEzNDI1WhcNMTEwNzE5MjEzNDI1WjBgMQswCQYDVQQGEwJNWDENMAsGA1UECBMERC5GLjEPMA0GA1UEBxMGTWV4aWNvMQ0wCwYDVQQKEwRTSENQMQwwCgYDVQQLEwNTQVQxFDASBgNVBAMUC3NpY29maV9wcm9kMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBJXEOy1yWJ7sGBZO1ZOmmNhv0Qds9CyHUDMCUZinfGkyezL1J8l4k336Z9OHv2Kxr+o1yWhm0YU0fSYaz9nLLv4YRJdXOyc18svMKFXTE4DwfWKNUWHaXYfLrmwU3lChJqImB3O9nDDlXlKpGTP6wYONYQUaVub/t2mabG/aCFQIDAQABo4HFMIHCMB0GA1UdDgQWBBRVXRbdz2rCiW6VJMaVF5HPA7DENzCBkgYDVR0jBIGKMIGHgBRVXRbdz2rCiW6VJMaVF5HPA7DEN6FkpGIwYDELMAkGA1UEBhMCTVgxDTALBgNVBAgTBEQuRi4xDzANBgNVBAcTBk1leGljbzENMAsGA1UEChMEU0hDUDEMMAoGA1UECxMDU0FUMRQwEgYDVQQDFAtzaWNvZmlfcHJvZIIJAJhhI7VVwVfPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAjGqMpZozqyQigWKudUSCKdQ5znBPBMUjXitW+4S4q6Yqqj07YqMwUIjBlPcK3FW+hkKwygSmXMqqLe5Q7NmY/pcUylnVgP+V2IGwzxOPSDJWoKzYUycUYW217LNF7GV/46H7pXhEVx6aoIlvwaNi6N6bFmCaiR4XpQxYutve1UA=" }
Nuevamente por su ayuda muchas gracias
Re: Web Service para Validar del SAT
Publicado: Sab Mar 31, 2012 1:15 pm
por carlossantillan
Efectivamente a nosotros nos da el error (VI) que comentas con las facturas (recibo telefónico) de TELMEX. Telmex tiene 4 certificados en las LCO (00001000000100946609|C, 00001000000100549940|C,00001000000103362413|A, 00001000000200363689|A). El certificado con el que se firmo el CFD que estamos probando es el 00001000000103362413 y esta como "Activo" tanto en el CSD.txt como en LCO (que se supone es lo mismo).
Estamos pensando que el error es por lo que comentas o por que hay una inconsistencia en el certificado ya que metiéndome al detalle del CSD, dice que la fecha de Emisión es el 2011-04-19T21:54:40 y en las LCO dice que es 2011-04-20T03:54:40. Ya probamos validando con las 2 fechas y sigue enviando el "VI". Sería muy útil que el validador realmente "validara".
Estamos revisando un validador (gratuito) que dá un análisis detallado para cualquier CFD / CFDI en
http://www.fiscoclic.mx/validadorcfdi/valida.html y esta por liberarse la validación integrándolo a éste Web Service
Re: Web Service para Validar del SAT
Publicado: Lun Abr 16, 2012 4:49 pm
por david.pacheco
Hola a todos como les va, buscando en el foro alguna noticia del por que el validador del SAT hasta la fecha no valida los nuevos esquemas me encontre con este tema del Web Service, pero tengo algunas dudas, epsero puedan orientarme. Este Web Service valida la V2.2 de CFDs? por el momento es el unico medio de validarlos? Tienen alguna noticia de cuando el validador de la pagina del SAT validara la nueva version de CFD?
Gracias.
Re: Web Service para Validar del SAT
Publicado: Mar Abr 17, 2012 10:41 am
por cesarmtassinari
David buen día, no lo he utilizado, pero entiendo que es un Web Service para Verificar Folios, no para Validar la estructura.
Saludos
César Morales
Re: Web Service para Validar del SAT
Publicado: Lun Jun 11, 2012 11:42 am
por edgarymx
Hola tengo una duda hago lo anterior de la forma siguiente y en ninguna caso me envia una informacion completa el servidor del sat no se en que punto estoy mal o si toda la informacion esta incorrecta(lo hago con datos reales) hago la conexion al servidor con el programa soapui y coloco la informacion del proveedor.
<soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/" xmlns:sat="
http://www.sat.gob.mx/">
<soapenv:Header/>
<soapenv:Body>
<sat:ValidarXmlCFD>
<!--Optional:-->
<sat:xml>
<ColleccionFoliosCfd xmlns="
http://www.sat.gob.mx/Asf/Sicofi/Valida ... sCFD/1.0.0">
<Folio>
<Id>1</Id>
<Rfc>AAA121212AAA</Rfc>
<Serie>FA</Serie>
<NumeroFolio>9</NumeroFolio>
<NumeroAprobacion>12345</NumeroAprobacion>
<AnioAprobacion>2010</AnioAprobacion>
<CertificadoNumeroSerie>0000011111111</CertificadoNumeroSerie>
<CertificadoFechaEmision>2011-12-12T14:20:15</CertificadoFechaEmision>
</Folio>
</ColleccionFoliosCfd>
</sat:xml>
</sat:ValidarXmlCFD>
</soapenv:Body>
</soapenv:Envelope>
esta es la respuesta que obtengo del servidor, no se si alguien me pueda ayudar muchas gracias.
HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Content-Length: 0
Date: Mon, 11 Jun 2012 17:38:25 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Re: Web Service para Validar del SAT
Publicado: Mar Jun 12, 2012 10:44 am
por naringas
así se ve lo que manda mi programa:
Código: Seleccionar todo
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.sat.gob.mx/">
<SOAP-ENV:Body>
<ns1:ValidarXmlCFD>
<ns1:xml>
<?xml version="1.0" encoding="UTF-8"?>
<ColleccionFoliosCfd xmlns="http://www.sat.gob.mx/Asf/Sicofi/ValidacionFoliosCFD/1.0.0">
<Folio>
<Id>1</Id>
<Rfc>XXX101010AW1</Rfc>
<Serie>XXX</Serie>
<NumeroFolio>1111</NumeroFolio>
<NumeroAprobacion>111111</NumeroAprobacion>
<AnioAprobacion>2012</AnioAprobacion>
<CertificadoNumeroSerie>11111111111111111111</CertificadoNumeroSerie>
<CertificadoFechaEmision>2012-05-30T17:07:39</CertificadoFechaEmision>
</Folio>
</ColleccionFoliosCfd>
</ns1:xml></ns1:ValidarXmlCFD></SOAP-ENV:Body></SOAP-ENV:Envelope>
la diferencia que cuenta es que el contenido dentro de las etiquetas
<sat:xml></sat:xml> (en tu ejemplo,
ns1:xml en el mio) los simbolos
< y
> están escritos como html entities
< y
>
Re: Web Service para Validar del SAT
Publicado: Mar Jun 12, 2012 10:53 am
por Dado
Oye Naringas, y no es mas facil si descargas la lista y tu mismo haces la validacion........
Muy mi humilde opinion esta validacion del SAT no sirve para nada, ni siquiera vale la pena el esfuerzo.