Download the PHP package phpcfdi/cfdi-sat-scraper without Composer

On this page you can find all versions of the php package phpcfdi/cfdi-sat-scraper. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package cfdi-sat-scraper

phpcfdi/cfdi-sat-scraper

Source Code Packagist PHP Version Support Discord Latest Version Software License Build Status Reliability Maintainability Code Coverage Violations Total Downloads

Obtiene las facturas emitidas, recibidas, vigentes y cancelados por medio de web scraping desde la página del SAT. Los recursos descargables son los archivos XML de CFDI y los archivos PDF de representación impresa, solicitud de cancelación y acuse de cancelación.

Instalacion por composer

Funcionamiento

El servicio de descarga de CFDI del SAT que se encuentra en la dirección https://portalcfdi.facturaelectronica.sat.gob.mx/, requiere identificarse con RFC, Clave CIEC y de la resolución de un captcha, o bien, utilizando el certificado y llave privada FIEL.

Una vez dentro del sitio se pueden consultar facturas emitidas y facturas recibidas. Ya sea por UUID o por filtro.

El servicio de búsqueda regresa una tabla con información, con un tope de 500 registros por consulta (aun cuando existan más, solo se muestran 500).

Una vez con el listado el sitio ofrece ligas para poder descargar el archivo XML del CFDI.

Implementación del funcionamiento del sitio en la librería

El objeto principal de trabajo se llama SatScraper con el que se pueden realizar consultas por rango de fecha o por UUIDS específicos y obtener resultados. La consulta por UUID (uno o varios) se ejecuta con el método listByUuids y el resultado es un MetadataList. La consulta por filtros se llama QueryByFilters, se ejecuta con los métodos listByPeriod y listByDateTime y el resultado es un MetadataList.

Para generar los resultados del MetadataList la librería cuenta con una estrategia de división. Si se trata de una consulta de CFDI por filtros automáticamente se divide por día. En caso de que en el periodo consultado se encuentren 500 o más registros entonces la búsqueda se va subdividiendo en diferentes periodos, hasta llegar a la consulta mínima de 1 segundo. Luego los resultados son nuevamente unidos.

Una vez que tienes un listado MetadataList se puede aplicar un filtro para obtener un nuevo listado con únicamente los objetos Metadata donde el UUID coincide; o bien, usar otros filtros como solo los que contienen un determinado recurso descargable.

Una vez con los resultados MetadataList se puede solicitar una descarga a una carpeta específica o bien por medio de un objeto handler. El proceso de descarga permite hacer varias descargas en forma simultánea.

La descarga puede ser de archivos de:

Los métodos para ejecutar la descarga de metadata son:

Y una vez con el objeto MetadataList se crea un objeto descargador de recursos ResourceDownloader y se le pide que ejecute las descargas por tipo de recurso.

Si se llega a la consulta mínima de 1 segundo y se obtuvieron 500 o más registros entonces adicionalmente se llama a un callback (opcional) para reportar este acontecimiento.

La búsqueda siempre debe crearse con un rango de fechas, además en forma predeterminada, se busca por CFDI emitidos, con cualquier complemento y con cualquier estado (vigente o cancelado). Sin embargo, puedes cambiar la búsqueda antes de enviar a procesarla.

Esta librería está basada en Guzzle, por lo que puedes configurar el cliente a tus propias necesidades como configurar un proxy o depurar las llamadas HTTP. Gracias a esta librería podemos ofrecer descargas simultáneas de XML y hacer el proceso de comunicación mucho más veloz que si se estuviera utilizando un navegador completo.

Autenticación

Esta librería permite identificarse ante el SAT utilizando alguno de dos mecanismos: Clave CIEC o FIEL.

Autenticación por FIEL

Para identificarse utilizando la FIEL se necesita usar el manejador de sesiones FielSessionManager, con el respectivo certificado, llave privada y contraseña de la llave privada.

La ventaja de este método es que no requiere de un resolvedor de captchas. La desventaja es que es riesgoso trabajar con la FIEL.

Advertencia: No utilice este mecanismo a menos que se trate de su propia FIEL. La FIEL en México está regulada por la "Ley de Firma Electrónica Avanzada". Su uso es extenso y no está limitado al SAT, con ella se pueden realizar múltiples operaciones legales. En PhpCfdi no recomendamos que almacene o use la FIEL de terceras personas.

Autenticación por clave CIEC

Para identificarse utilizando la clave CIEC se necesita usar el manejador de sesiones CiecSessionManager, con los datos de RFC, Clave CIEC y un resolvedor de captchas.

La ventaja de este método es que no se requiere la FIEL. La desventaja es que se requiere un resolvedor de captchas.

La resolución de captchas se realiza a través de la librería de resolución de captchas phpcfdi/image-captcha-resolver.

Para entornos de desarrollo y producción recomendamos utilizar la resolución de captchas con el proyecto phpcfdi/image-captcha-resolver-boxfactura-ai (gracias al trabajo de BOX Factura).

Si estás usando un servicio que no está implementado puedes revisar la documentación de este proyecto e integrar el servicio dentro de los clientes soportados.

Ejemplo de elaboración de consulta

Ejemplo de descarga por rango de fechas

Ejemplo de descarga por lista de UUIDS

Avisos de descargas de Metadata

El servicio ofrecido por el SAT tiene límites, entre ellos, no se pueden obtener más de 500 registros en un rango de fechas. Esta librería trata de reducir el rango hasta el mínimo de fabricar una consulta por un solo segundo para obtener todos los datos, sin embargo, si se presenta este caso, entonces se puede usar el manejador MetadataMessageHandler para registrar este escenario.

El manejador MetadataMessageHandler es una interfaz que puede recibir diferentes mensajes:

Si al crear el objeto SatScraper no se establece un manejador o se establece como null entonces se usará una instancia de NullMetadataMessageHandler que, como su nombre lo indica, no realiza ninguna acción.

En el siguiente código se muestra un ejemplo que muestra un mensaje al encontrar el problema de 500 registros.

La interfaz MaximumRecordsHandler y el objeto NullMaximumRecordsHandler han sido deprecados desde la versión 3.3.0. Ambos símbolos serán eliminados a partir de la versión 4.0.0.

Descargar CFDIS a una carpeta

Ejecutar el método saveTo devuelve un arreglo con los UUID que fueron efectivamente descargados.

Si ocurrió un error con alguna de las descargas dicho error será ignorado.

De manera predeterminada, los archivos son almacenados en la carpeta como:

Para cambiar los nombres de archivos, cree una implementacion de la interfaz \PhpCfdi\CfdiSatScraper\Contracts\ResourceFileNamerInterface y configura el descargador de recursos con el método ResourceDownloader::setResourceFileNamer().

Procesar de forma personalizada cada descarga de CFDI

Ejecutar el método ResourceDownloader::download devuelve un arreglo con los UUID que fueron efectivamente descargados. Y permite configurar los eventos de descarga y manejo de errores.

Si se desea ignorar los errores se puede simplemente especificar el método ResourceDownloadHandlerInterface::onError() sin contenido, entonces el error solamente se perderá. De todas maneras, gracias a que el método download devuelve un arreglo de UUID con los que fueron efectivamente descargados entonces se puede filtrar el objeto MetadataList para extraer aquellos que no fueron descargados.

Vea la clase PhpCfdi\CfdiSatScraper\Internal\ResourceDownloadStoreInFolder como ejemplo de implementación de la interfaz ResourceDownloadHandlerInterface.

Usar con phpcfdi/image-captcha-resolver-boxfactura-ai

Recuerda consultar la documentación específica del proyecto phpcfdi/image-captcha-resolver-boxfactura-ai

En el siguiente ejemplo, se asume que el modelo será almacenado en el directorio storage/boxfactura-model.

Instalar la librería phpcfdi/image-captcha-resolver-boxfactura-ai:

Configurar composer.json para que se esté instale o actualice automáticamente la librería libonnxruntime.so:

O bien, en lugar del paso anterior, actualizar manualmente la librería libonnxruntime.so:

Descarga del modelo de BoxFactura/sat-captcha-ai-model:

Y se crea la instancia del resolvedor de captchas de la siguiente manera:

Usar el servicio Anti-Captcha

Verificar datos de autenticación sin hacer una consulta

El siguiente ejemplo muestra cómo usar el método SatScraper::confirmSessionIsAlive para verificar que los datos de sesión sean (o continuen siendo) correctos. El funcionamiento interno del scraper es: Si la sesión no se inicializó previamente entonces se intentará hacer el proceso de autenticación, además se comprobará que la sesión (cookie) se encuentre vigente.

Se hacen los dos pasos para evitar consumir el servicio de resolución de captcha en forma innecesaria.

Ejemplo de autenticación con FIEL

El siguiente ejemplo utiliza una FIEL donde los archivos de certificado y llave privada están cargados en memoria y se encuentran vigentes. Puede obtener más información de cómo formar la credencial en el proyecto phpcfdi/credentials.

Para crear la credencial se necesita un certificado, una llave privada y la contraseña. Si el contenido del certificado y llave privada están en memoria, se utiliza el método Credential::create(). Si el certificado y llave privada están en archivos, se emplea el método Credential::openFiles().

Quitar la verificación de certificados del SAT

En caso de que los certificados del SAT usados en HTTPS fallen, podría desactivar la verificación de los mismos. Esto se puede lograr creando el cliente de Guzzle con la negación de la opción verify.

No es una práctica recomendada, pero tal vez necesaria ante los problemas a los que el SAT se ve expuesto. Considera que esto podría facilitar significativamente un ataque (man in the middle) que provoque que la pérdida de su clave CIEC.

Nota: No recomendamos esta práctica, solamente la exponemos por las constantes fallas que presenta el SAT.

Problemas de conectividad con el SAT

Es frecuente encontrar este problema dependiendo de la configuración general del sistema:

Este problema es por la configuración de los servidores que atienden las peticiones del SAT.

Una forma de solucionar este problema únicamente para esta librería, consiste en establecer la configuración de cURL en el cliente del SatHttpGateway al crear el SatScraper:

Otra solución consiste en degradar la seguridad general de OpenSSL, algunas instrucciones se pueden ver en https://askubuntu.com/questions/1250787/when-i-try-to-curl-a-website-i-get-ssl-error.

Compatibilidad

Esta librería se mantendrá compatible con al menos la versión con soporte activo de PHP más reciente.

También utilizamos Versionado Semántico 2.0.0 por lo que puedes usar esta librería sin temor a romper tu aplicación.

Consulta la guía de actualización de la versión 2.x a la versión 3.x.

Contribuciones

Las contribuciones con bienvenidas. Por favor lee CONTRIBUTING para más detalles y recuerda revisar el archivo de tareas pendientes TODO y el archivo CHANGELOG.

Documentación de desarrollo:

Copyright and License

The phpcfdi/cfdi-sat-scraper library is copyright © PhpCfdi and licensed for use under the MIT License (MIT). Please see LICENSE for more information.


All versions of cfdi-sat-scraper with dependencies

PHP Build Version
Package Version
Requires php Version >=7.3
ext-curl Version *
ext-dom Version *
ext-fileinfo Version *
ext-json Version *
ext-mbstring Version *
ext-openssl Version *
eclipxe/enum Version ^0.2.0
eclipxe/micro-catalog Version ^0.1.3
guzzlehttp/guzzle Version ^7.0
guzzlehttp/promises Version ^2.0
phpcfdi/credentials Version ^1.1
phpcfdi/image-captcha-resolver Version ^0.2.4
psr/http-message Version ^1.1 || ^2.0
symfony/css-selector Version ^5.4 || ^6.0 || ^7.0
symfony/dom-crawler Version ^5.4 || ^6.0 || ^7.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package phpcfdi/cfdi-sat-scraper contains the following files

Loading the files please wait ....