Buenas tardes,
alguien me puede apoyar con la descarga de los archivos de LCO del SAT, tengo un proceso desarrollado en .NET para su descarga diaria, pero desde hace días estoy tratando de descargarlo y el servidor del SAT me cierra la conexión; y los necesito para validar las facturas y no depender tanto del servidor del SAT al momento de validarlas ya que se satura mucho.
Estos son los sitios de donde hago la descarga:
ftp://ftp2.sat.gob.mx/agti_servicio_ftp ... obante_ftp
ftp://ftp2.sat.gob.mx/agti_ftp/cfds_ftp/
Alguien tiene algun otra solución para esto?
Saludos..

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
Descarga LCO del FTP del SAT
- Dado
- Mensajes: 15981
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Descarga LCO del FTP del SAT
Recuerdo haber visto aqui en el foro un mensaje donde mencionaba que ya se podian descargar de un blob del SAT con el protocolo http
Dale una buscada por aqui
O si alguien del foro recuerda mas informacion que nos pueda compartir
Dale una buscada por aqui
O si alguien del foro recuerda mas informacion que nos pueda compartir
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 221
- Registrado: Vie Dic 10, 2010 8:11 am
Re: Descarga LCO del FTP del SAT
Buen dia
Yo uso este programa para descargar la LCO
Y para verificar, descomprimir y extraer los datos en formato delimitado por pipes y concatenarlo en un solo archivo uso este script
El xsltproc usa este pequeño archivo xslt para convertir el xml en csv en un formato amigable para ser incorporado a mi base de datos
Y ya deja el archivo en este formato
Bitácora de ejecución
Saludos
Yo uso este programa para descargar la LCO
Código: Seleccionar todo
<?php
echo "Inicia proceso ".date("c")."\n";
$fech = date("Y-m-d");
$url = "https://cfdisat.blob.core.windows.net/lco?restype=container&comp=list&prefix=LCO_$fech";
echo "$url\n";
$opts = array('http' => array('method'=>'GET',
'timeout' => 5,
'protocol_version' => 1.1,
'header' => 'Connection: close'
)
);
$ctx = stream_context_create($opts);
$xmltxt = file_get_contents($url,false,$ctx);
file_put_contents("lista.xml",$xmltxt);
$xml = new DOMDocument("1.0","UTF-8");
$xml->loadXML($xmltxt);
$Blob = $xml->getElementsByTagName('Blob');
foreach ($Blob as $file) {
$name = leenodo($file,"Name");
$url = leenodo($file,"Url");
$md5 = leenodo($file,"Content-MD5");
echo "\n----------------\nnombre=$name\nurl=$url\nhash=$md5\n\n";
$ok = leeurl($name, $url, $md5);
}
echo "Termina proceso ".date("c")."\n";
function leenodo($node,$name) {
$paso = $node->getElementsByTagName($name);
foreach ($paso as $otro) {
$ret = $otro->nodeValue;
}
return $ret;
}
function leeurl($name,$url,$md5) {
echo "Inicia $name : ".date("c")."\n";
$data = file_get_contents($url);
file_put_contents($name,$data);
$hash = base64_encode(md5($data,true));
if ($hash == $md5) {
echo "Ok\n";
$ret = true;
} else {
echo "Hash no coincide $hash\n";
$ret = false;
}
echo "Termina $name : ".date("c")."\n";
return $ret;
}
?>
Código: Seleccionar todo
#!/bin/bash
dia=`date +%Y-%m-%d`
rm -f sin.csv sin_*.xml sin_*.csv
for parte in 1 2 3 4 5
do
file=LCO_${dia}_${parte}.XML
rm -f $file
if [ -r $file.gz ]
then
echo $file
gunzip $file.gz
openssl smime -verify -in $file -inform der -noverify -out sin_${parte}.xml
xsltproc sql.xslt sin_${parte}.xml >sin_${parte}.csv
cat sin_${parte}.csv >>sin.csv
fi
done
echo listo
Código: Seleccionar todo
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:lco='http:/www.sat.gob.mx/cfd/LCO'>
<xsl:output method = "text" />
<xsl:template match="/">
<xsl:apply-templates select="//lco:Contribuyente"/>
</xsl:template>
<xsl:template match="lco:Contribuyente">
<xsl:apply-templates select="lco:Certificado">
<xsl:value-of select="@RFC"/>
<xsl:with-param name="rfc" select="@RFC" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="lco:Certificado">
<xsl:param name="rfc" />
<xsl:value-of select="$rfc"/>|<xsl:value-of select="@ValidezObligaciones"/>|<xsl:value-of select="@EstatusCertificado"/>|<xsl:value-of select="@noCertificado"/>|<xsl:value-of select="@FechaFinal"/>|<xsl:value-of select="@FechaInicio"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Código: Seleccionar todo
$ head sin.csv
&RA040119JFA|1|A|00001000000202200752|2016-10-24T15:19:49|2012-10-24T15:19:49
AAAA610822FX3|1|A|00001000000306562027|2019-03-26T22:16:51|2015-03-26T22:16:51
AAA9806257B2|1|A|00001000000202620356|2016-12-15T20:13:34|2012-12-15T20:13:34
AAA1006245L7|1|A|00001000000401177121|2020-01-14T18:03:20|2016-01-14T18:03:20
AAA990902AK4|1|A|00001000000202722501|2017-01-03T17:39:40|2013-01-03T17:39:40
AAA940629JM4|1|A|00001000000402789351|2020-06-10T21:59:15|2016-06-10T21:59:15
AAAA660929KC2|1|A|00001000000303464744|2018-03-25T18:21:23|2014-03-25T18:21:23
AAAA430111S64|1|A|00001000000301988192|2017-12-23T17:00:41|2013-12-23T17:00:41
A&A060722994|1|A|00001000000302615471|2018-01-24T02:26:11|2014-01-24T02:26:11
AAA130705KX0|1|A|00001000000301128269|2017-10-24T15:47:34|2013-10-24T15:47:34
Código: Seleccionar todo
$ php descarga_lco.php
Inicia proceso 2016-10-13T08:47:15-05:00
https://cfdisat.blob.core.windows.net/lco?restype=container&comp=list&prefix=LCO_2016-10-13
----------------
nombre=LCO_2016-10-13_1.XML.gz
url=https://cfdisat.blob.core.windows.net/lco/LCO_2016-10-13_1.XML.gz
hash=s3XT2Q5KNyHfE2EbGP4QaQ==
Inicia LCO_2016-10-13_1.XML.gz : 2016-10-13T08:47:15-05:00
Ok
Termina LCO_2016-10-13_1.XML.gz : 2016-10-13T08:48:12-05:00
----------------
nombre=LCO_2016-10-13_2.XML.gz
url=https://cfdisat.blob.core.windows.net/lco/LCO_2016-10-13_2.XML.gz
hash=dQFv9anqqT+kKLygjasnJw==
Inicia LCO_2016-10-13_2.XML.gz : 2016-10-13T08:48:13-05:00
Ok
Termina LCO_2016-10-13_2.XML.gz : 2016-10-13T08:48:53-05:00
Termina proceso 2016-10-13T08:48:53-05:00
[ortiz@pac-devel lco]$ ./procesa_xml.sh
LCO_2016-10-13_1.XML
Verification successful
LCO_2016-10-13_2.XML
Verification successful
listo
[ortiz@pac-devel lco]$ ll
total 2731832
-rw-rw-r-- 1 ortiz dev 611741767 Oct 13 08:48 LCO_2016-10-13_1.XML
-rw-rw-r-- 1 ortiz dev 446515714 Oct 13 08:48 LCO_2016-10-13_2.XML
-rw-rw-r-- 1 ortiz dev 1534 Oct 13 08:47 descarga_lco.php
-rw-rw-r-- 1 ortiz dev 1214 Oct 13 08:47 lista.xml
-rwxrwxr-x 1 ortiz dev 395 Oct 13 08:47 procesa_xml.sh
-rw-rw-r-- 1 ortiz dev 340414409 Oct 13 08:50 sin.csv
-rw-rw-r-- 1 ortiz dev 196743628 Oct 13 08:50 sin_1.csv
-rw-rw-r-- 1 ortiz dev 611740073 Oct 13 08:49 sin_1.xml
-rw-rw-r-- 1 ortiz dev 143670781 Oct 13 08:50 sin_2.csv
-rw-rw-r-- 1 ortiz dev 446514020 Oct 13 08:50 sin_2.xml
-rw-rw-r-- 1 ortiz dev 857 Oct 13 08:47 sql.xslt
-
- Mensajes: 3
- Registrado: Lun Ago 29, 2016 5:00 pm
Re: Descarga LCO del FTP del SAT
Si Funciona tu Solución
Muchas Gracias..
Muchas Gracias..

- Sinchi
- Mensajes: 81
- Registrado: Vie Jul 22, 2016 7:06 am
- Ubicación: LATAM
Re: Descarga LCO del FTP del SAT
Funciona muy bien. Nomas le agregaría al PHP al principio la siguiente linea para los que estamos en otra zona horaria.
date_default_timezone_set('America/Mexico_City');
Y al bash script también lo correspondiente
date_default_timezone_set('America/Mexico_City');
Y al bash script también lo correspondiente