Imagen

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

Y para empezar Que es una Factura Electronica? Como empiezo? Necesito Autorizacion? Que medios hay para Facturar Electronicamente? estos y todos los temas de iniciacion deberan estar aqui
Cerrado
criss25
Mensajes: 3
Registrado: Lun Ago 29, 2016 5:00 pm

Descarga LCO del FTP del SAT

Mensaje por criss25 »

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..
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Descarga LCO del FTP del SAT

Mensaje por Dado »

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
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
fortiz
Mensajes: 221
Registrado: Vie Dic 10, 2010 8:11 am

Re: Descarga LCO del FTP del SAT

Mensaje por fortiz »

Buen dia

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;
}
?>
Y para verificar, descomprimir y extraer los datos en formato delimitado por pipes y concatenarlo en un solo archivo uso este script

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
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

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>
Y ya deja el archivo en este formato

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
Bitácora de ejecución

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
Saludos
criss25
Mensajes: 3
Registrado: Lun Ago 29, 2016 5:00 pm

Re: Descarga LCO del FTP del SAT

Mensaje por criss25 »

Si Funciona tu Solución

Muchas Gracias.. ;)
Avatar de Usuario
Sinchi
Mensajes: 81
Registrado: Vie Jul 22, 2016 7:06 am
Ubicación: LATAM

Re: Descarga LCO del FTP del SAT

Mensaje por Sinchi »

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
Cerrado