PHP code example of phpcfdi / sat-ws-descarga-masiva
1. Go to this page and download the library: Download phpcfdi/sat-ws-descarga-masiva library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
phpcfdi / sat-ws-descarga-masiva example snippets
use PhpCfdi\SatWsDescargaMasiva\RequestBuilder\FielRequestBuilder\Fiel;
use PhpCfdi\SatWsDescargaMasiva\RequestBuilder\FielRequestBuilder\FielRequestBuilder;
use PhpCfdi\SatWsDescargaMasiva\Service;
use PhpCfdi\SatWsDescargaMasiva\WebClient\GuzzleWebClient;
// Creación de la FIEL, puede leer archivos DER (como los envía el SAT) o PEM (convertidos con openssl)
$fiel = Fiel::create(
file_get_contents('certificado.cer'),
file_get_contents('llaveprivada.key'),
'12345678a'
);
// verificar que la FIEL sea válida (no sea CSD y sea vigente acorde a la fecha del sistema)
if (! $fiel->isValid()) {
return;
}
// creación del web client basado en Guzzle que implementa WebClientInterface
// para usarlo necesitas instalar guzzlehttp/guzzle, pues no es una dependencia directa
$webClient = new GuzzleWebClient();
// creación del objeto encargado de crear las solicitudes firmadas usando una FIEL
$requestBuilder = new FielRequestBuilder($fiel);
// Creación del servicio
$service = new Service($requestBuilder, $webClient);
use PhpCfdi\SatWsDescargaMasiva\RequestBuilder\RequestBuilderInterface;
use PhpCfdi\SatWsDescargaMasiva\Service;
use PhpCfdi\SatWsDescargaMasiva\Shared\ServiceEndpoints;
use PhpCfdi\SatWsDescargaMasiva\WebClient\GuzzleWebClient;
/**
* @var GuzzleWebClient $webClient Cliente de Guzzle previamente fabricado
* @var RequestBuilderInterface $requestBuilder Creador de solicitudes, previamente fabricado
*/
// Creación del servicio
$service = new Service($requestBuilder, $webClient, null, ServiceEndpoints::retenciones());
use PhpCfdi\SatWsDescargaMasiva\Services\Query\QueryParameters;
use PhpCfdi\SatWsDescargaMasiva\Shared\DateTimePeriod;
// Crear la consulta
$request = QueryParameters::create(
DateTimePeriod::createFromValues('2019-01-13 00:00:00', '2019-01-13 23:59:59'),
);
// presentar la consulta
$query = $service->query($request);
// verificar que el proceso de consulta fue correcto
if (! $query->getStatus()->isAccepted()) {
echo "Fallo al presentar la consulta: {$query->getStatus()->getMessage()}";
return;
}
// el identificador de la consulta está en $query->getRequestId()
echo "Se generó la solicitud {$query->getRequestId()}", PHP_EOL;
use PhpCfdi\SatWsDescargaMasiva\Services\Query\QueryParameters;
use PhpCfdi\SatWsDescargaMasiva\Shared\ComplementoCfdi;
use PhpCfdi\SatWsDescargaMasiva\Shared\DateTimePeriod;
use PhpCfdi\SatWsDescargaMasiva\Shared\DocumentStatus;
use PhpCfdi\SatWsDescargaMasiva\Shared\DocumentType;
use PhpCfdi\SatWsDescargaMasiva\Shared\DownloadType;
use PhpCfdi\SatWsDescargaMasiva\Shared\RequestType;
use PhpCfdi\SatWsDescargaMasiva\Shared\RfcMatch;
use PhpCfdi\SatWsDescargaMasiva\Shared\RfcOnBehalf;
use PhpCfdi\SatWsDescargaMasiva\Shared\Uuid;
$query = QueryParameters::create()
->withPeriod(DateTimePeriod::createFromValues('2019-01-13 00:00:00', '2019-01-13 23:59:59'))
->withDownloadType(DownloadType::received())
->withRequestType(RequestType::xml())
->withDocumentType(DocumentType::ingreso())
->withComplement(ComplementoCfdi::leyendasFiscales10())
->withDocumentStatus(DocumentStatus::active())
->withRfcOnBehalf(RfcOnBehalf::create('XXX01010199A'))
->withRfcMatch(RfcMatch::create('MAG041126GT8'))
->withUuid(Uuid::create('96623061-61fe-49de-b298-c7156476aa8b'))
;
use PhpCfdi\SatWsDescargaMasiva\Services\Query\QueryParameters;
use PhpCfdi\SatWsDescargaMasiva\Shared\Uuid;
$query = QueryParameters::create()
->withUuid(Uuid::create('96623061-61fe-49de-b298-c7156476aa8b'))
;
use PhpCfdi\SatWsDescargaMasiva\Service;
/**
* @var Service $service Objeto de ayuda de consumo de servicio, previamente fabricado
* @var string $requestId Identificador generado al presentar la consulta, previamente fabricado
*/
// consultar el servicio de verificación
$verify = $service->verify($requestId);
// revisar que el proceso de verificación fue correcto
if (! $verify->getStatus()->isAccepted()) {
echo "Fallo al verificar la consulta {$requestId}: {$verify->getStatus()->getMessage()}";
return;
}
// revisar que la consulta no haya sido rechazada
if (! $verify->getCodeRequest()->isAccepted()) {
echo "La solicitud {$requestId} fue rechazada: {$verify->getCodeRequest()->getMessage()}", PHP_EOL;
return;
}
// revisar el progreso de la generación de los paquetes
$statusRequest = $verify->getStatusRequest();
if ($statusRequest->isExpired() || $statusRequest->isFailure() || $statusRequest->isRejected()) {
echo "La solicitud {$requestId} no se puede completar", PHP_EOL;
return;
}
if ($statusRequest->isInProgress() || $statusRequest->isAccepted()) {
echo "La solicitud {$requestId} se está procesando", PHP_EOL;
return;
}
if ($statusRequest->isFinished()) {
echo "La solicitud {$requestId} está lista", PHP_EOL;
}
echo "Se encontraron {$verify->countPackages()} paquetes", PHP_EOL;
foreach ($verify->getPackagesIds() as $packageId) {
echo " > {$packageId}", PHP_EOL;
}
use PhpCfdi\SatWsDescargaMasiva\Service;
/**
* @var Service $service Objeto de ayuda de consumo de servicio, previamente fabricado
* @var string[] $packagesIds Listado de identificadores de paquetes generado en la verificación, previamente fabricado
*/
// consultar el servicio de verificación
foreach($packagesIds as $packageId) {
$download = $service->download($packageId);
if (! $download->getStatus()->isAccepted()) {
echo "El paquete {$packageId} no se ha podido descargar: {$download->getStatus()->getMessage()}", PHP_EOL;
continue;
}
$zipfile = "$packageId.zip";
file_put_contents($zipfile, $download->getPackageContent());
echo "El paquete {$packageId} se ha almacenado", PHP_EOL;
}
use PhpCfdi\SatWsDescargaMasiva\PackageReader\Exceptions\OpenZipFileException;
use PhpCfdi\SatWsDescargaMasiva\PackageReader\MetadataPackageReader;
/**
* @var string $zipfile Contiene la ruta al archivo de paquete de Metadata
*/
// abrir el archivo de Metadata
try {
$metadataReader = MetadataPackageReader::createFromFile($zipfile);
} catch (OpenZipFileException $exception) {
echo $exception->getMessage(), PHP_EOL;
return;
}
// leer todos los registros de metadata dentro de todos los archivos del archivo ZIP
foreach ($metadataReader->metadata() as $uuid => $metadata) {
echo $metadata->uuid, ': ', $metadata->fechaEmision, PHP_EOL;
}
use PhpCfdi\SatWsDescargaMasiva\PackageReader\Exceptions\OpenZipFileException;
use PhpCfdi\SatWsDescargaMasiva\PackageReader\CfdiPackageReader;
/**
* @var string $zipfile Contiene la ruta al archivo de paquete de archivos ZIP
*/
try {
$cfdiReader = CfdiPackageReader::createFromFile($zipfile);
} catch (OpenZipFileException $exception) {
echo $exception->getMessage(), PHP_EOL;
return;
}
// leer todos los CFDI dentro del archivo ZIP con el UUID como llave
foreach ($cfdiReader->cfdis() as $uuid => $content) {
file_put_contents("cfdis/$uuid.xml", $content);
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.