La versión 0.5
es compatible con el nuevo servicio de solicitud de consultas
de descarga masiva del SAT publicado en marzo 2022.
Anteriormente, el método QueryParameters::create()
admitía 4 parámetros:
DateTimePeriod $period
(requerido).DownloadType $downloadType = null
(por default a emitidos).RequestType $requestType = null
(por default a metadata).string $rfcMatch = '''
(por default a ninguno).
Ahora, la firma cambió, eliminando el parámetro de texto $rfcMatch
y haciendo opcional el periodo:
?DateTimePeriod $period = null
(por default al tiempo exacto de la creación del objeto).?DownloadType $downloadType = null
(por default a emitidos).?RequestType $requestType = null
(por default a metadata).
Mira las siguientes dos secciones para entender cómo especificar el RFC contraparte y cambiar cualquier parámetro de la consulta.
Ya no es posible construir un objeto QueryParameters
con new
.
Usa el método de fabricación QueryParameters::create()
.
De la misma forma, el método QueryParameters::getRfcMatch()
antes devolvía un string
.
Ahora devuelve un objeto de tipo RfcMatch
.
El RFC contraparte (parámetro $rfcMatch
) fue eliminado y ahora se expresa con el objeto RfcMatch
.
Ver Filtrado por RFC contraparte.
Ahora se puede crear una consulta sin parámetros e irlos agregando uno a uno con los métodos with*
.
Ver Ejemplo de especificación de parámetros.
Se supone que, después de realizar una consulta, ya no se devuelve el código 404 - Error no controlado
y que este fue sustituído por 5006 - Error interno en el proceso
. Sin embargo, en la práctica esto
no es lo que está sucediendo y también se devuelve el código 404
. Por ello, al verificar una solicitud,
recomendamos que se verifique 404
y 5006
.
/**
* La variable result es lo que devolvió la llamada $result = $service->query($parameters);
* @var \PhpCfdi\SatWsDescargaMasiva\Services\Query\QueryResult $result
*/
if (in_array($result->getStatus()->getCode(), [404, 5006])) {
echo "Error del lado del servicio del SAT, intentar más tarde";
}
Anteriormente, se identificaba el tipo de consulta (XML y Metadatos) por las claves cfdi
y metadata
.
Ahora se identifican por las claves xml
y metadata
.
Si estás construyendo este enumerador tomando un valor de tu base de datos, cambia en tus datos el valor
de CFDI
a xml
y Metadata
a metadata
.
Revisa tu código y cambia estas llamadas:
RequestType::cfdi()
porRequestType::xml()
.$requestType->isCfdi()
por$requestType->isXml()
.
El SAT tiene los servicios de CFDI Regulares y CFDI de retenciones e información de pagos separados en sus URL de consumo.
Si estás haciendo una implementación normal del servicio entonces este cambio es transparente.
Si estás haciendo una implementación muy personalizada donde creas el objeto ServiceEndPoints
usando su constructor entonces deberás tomar en cuenta las siguientes modificaciones:
En esta versión, el valor del atributo TipoSolicitud
para CFDI de Retenciones cuando se solicitan
los archivos XML cambió de CFDI
a Retenciones
. Por ello, la librería ha necesitado cambiar y se
agregó el enumerador ServiceType
y los métodos QueryParameters::hasServiceType(): bool
,
QueryParameters::getServiceType(): ServiceType
, RequestType::getQueryAttributeValue(ServiceType): string
y al constructor de ServiceEndPoints
se le agregó la propiedad ServiceType
.
Como QueryParameters
contiene ahora más propiedades entonces la salida en formato JSON refleja estos cambios.
El método DownloadResult::getPackageLenght()
fue deprecado y sustituido por DownloadResult::getPackageSize()
.
Porque en PHP los tamaños de bytes regularmente se expresan como Size y no como Length y porque el método
tenía una falta de ortografía.
Al cambiar el nombre de la propiedad que almacena el tamaño en bytes del paquete de length a size,
la salida JSON también cambió y la clave length
cambió a size
.
Si estás implementando tu propio constructor de mensajes, la interfaz RequestBuilderInterface
se ha modificado
en los métodos authorization
y query
.
Si no estás implementando RequestBuilderInterface
entonces ignora este cambio.
- El método
authorization
ahora espera recibir un objetoDateTime
en lugar de unstring
. - El método
query
ya no recibe parámetros de tipostring
y ahora recibe un objetoQueryParameters
.
El objeto FielRequestBuilder
generaba excepciones específicas heredadas de tipo RequestBuilderException
.
En esta nueva versión dichas excepciones ya no son generadas y fueron eliminadas. En específico:
PeriodEndInvalidDateFormatException
PeriodStartGreaterThanEndException
PeriodStartInvalidDateFormatException
RequestTypeInvalidException
RfcIsNotIssuerOrReceiverException
RfcIssuerAndReceiverAreEmptyException