Actualizaciones a la versión 3
Esta versión mayor es creada primordialmente para asegurar la compatibilidad con PHP 8.4. Sin embargo, esta compatibilidad requiere que cambien firmas de diferentes objetos, por lo que, en respeto a las reglas de versionado semántico es necesario actualizar la versión mayor.
También se ha aprovechado la oportunidad para quitar código deprecado y actualizar dependencias.
Compatibilidad con PHP 7.3 y PHP 7.4
En esta versión se ha eliminado la compatibilidad con PHP 7.3 y PHP 7.4. Al momento del lanzamiento (marzo 2025), ambas versiones tenían más de 4 y 2 años fuera del periodo de vida.
La versión mínima de trabajo con esta versión es PHP 8.0 y se planea que, en las siguientes versiones mayores, se mantenga compatibilidad con la versión más antigua con soporte activo.
Adiciones a QuickReader
La utilería QuickReader
puede ser complicada por sus llamadas mágicas, por ello, se han agregado nuevos métodos.
getChildren(string $name = ''): QuickReader[]
El método getChildren()
devuelve siempre un arreglo con los elementos cuyo nombre coincida con el argumento.
Si no se especifica un argumento o es una cadena vacía, entonces devuelve un arreglo con todos los hijos.
getAttributes(): array<string, string>
El método getAttributes()
devuelve siempre un arreglo con el nombre los atributos,
donde la llave es el nombre del atributo y el valor es el valor del atributo.
Actualización de XmlResourceRetriever
La librería eclipxe/xmlresourceretriever
se ha actualizado
de la versión 1.x a la versión 2.x. Con esto hay un cambio en el espacio de nombres.
Si tiene algún problema, es probable que deba cambiar XmlResourceRetriever\
por Eclipxe\XmlResourceRetriever
.
Cambios en métodos de llaves privadas
Estos cambios aplican para la clase CfdiUtils\PemPrivateKey\PemPrivateKey
.
Se elimina el método isOpened(): bool
, use isOpen(): bool
.
Se elimina el método isPEM(string $text): bool
, puede usar el siguiente código:
$openSSL = new \CfdiUtils\OpenSSL\OpenSSL();
return $openSSL->readPemContents($text)->hasPrivateKey();
Cambios en la consulta del estado de CFDI
Se recomienda usar el proyecto phpcfdi/sat-estado-cfdi
en lugar de este componente.
- Se elimina la constante
CfdiUtils\ConsultaCfdiSat\Config::DEFAULT_WSDL_URL
, useDEFAULT_SERVICE_URL
concatenado con?singleWsdl
. - En el constructor de la clase
CfdiUtils\ConsultaCfdiSat\Config
se elimina el parámetro$wsdlLocation
. - En el constructor de la clase
CfdiUtils\ConsultaCfdiSat\StatusResponse
ninguno de los parámetros son opcionales. - Se elimina el método
CfdiUtils\ConsultaCfdiSat\Config::getWsdlUrl()
, usegetServiceUrl()
. - Se elimina el método
CfdiUtils\ConsultaCfdiSat\Config::getWsdlLocation()
. - Se elimina el método
CfdiUtils\ConsultaCfdiSat\Config::getLocalWsdlLocation()
. - Se agrega el método
CfdiUtils\ConsultaCfdiSat\WebService::requestExpression(string $expression)
para poder consultar directamente una expresión en lugar de tener que pasar un objetoRequestParameters
al métodorequest()
. - Se elimina el archivo de soporte
ConsultaCFDIServiceSAT.svc.xml
.
Cambios en la generación de la cadena de origen
- Se eliminó la clase
CfdiUtils\CadenaOrigen\CadenaOrigenBuilder
en favor deCfdiUtils\CadenaOrigen\DOMBuilder
. - Se eliminó la clase
CfdiUtils\CadenaOrigen\CadenaOrigenLocations
, useCfdiUtils\CadenaOrigen\CfdiDefaultLocations
. - Se eliminó la clase
CfdiUtils\CadenaOrigen\DefaultLocations
, en favor deCfdiUtils\CadenaOrigen\CfdiDefaultLocations
.
Cambios en CFDI 3.3
Estos cambios no deben ser significativos dado que ya no se deben crear CFDI versión 3.3.
En el objeto de ayuda para crear un CFDI 3.3 el método getCfdiRelacionados()
admitía parámetros,
pero no es el comportamiento esperado, por lo que ya no es correcto llamarlo con parámetros.
Se estandariza el método multiCfdiRelacionado()
.
Crp20277Fixer
Se removió CfdiUtils\Utils\Crp20277Fixer
, la clase era inútil y no debía utilizarse.
Cambios en NodeInterface
Solo haga caso a este cambio si extendió o implementó la interface CfdiUtils\Nodes\NodeInterface
.
- Se eliminó la interface
CfdiUtils\Nodes\NodeInterface\NodeHasValueInterface
, sus métodos se movieron aNodeInterface
. - Se agregó el método
exists(string $attribute): bool
que determina si un atributo existe. - Se agregaron los métodos
value()
ysetValue()
a la claseNodeInterface
. - El método
searchNode
cambió el valor de retorno de no definido anull|self
.
Otros elementos removidos
- Se elimina el método
CfdiUtils\Cleaner\Cleaner::removeIncompleteSchemaLocation()
. - Se elimina la constante
CfdiUtils\Cfdi::CFDI_NAMESPACE
, useCFDI_SPECS['3.3']
. - Se elimina la constante
CfdiUtils\Retenciones\Retenciones::RET_NAMESPACE
, useRET_SPECS['1.0']
. - Se removió el método
CfdiUtils\Certificado\SerialNumber::baseConvert
. - Se elimina la clase
CfdiUtils\Validate\Cfdi33\Xml\XmlFollowSchema
, useCfdiUtils\Validate\Xml\XmlFollowSchema
. - Se elimina la clase
CfdiUtils\Elements\Cfdi33\Helpers\SumasConceptosWriter
, useCfdiUtils\SumasConceptos\SumasConceptosWriter
. - Se elimina la clase
CfdiUtils\Elements\Cfdi40\Helpers\SumasConceptosWriter
, useCfdiUtils\SumasConceptos\SumasConceptosWriter
. - Se elimina la interface
CfdiUtils\Nodes\NodeHasValueInterface
, sus métodos ahora están dentro deNodeInterface
.
Errores con genkgo/xsl
La librería genkgo/xsl
a la fecha 2025-03-05 tiene problemas de compatibilidad con PHP 8.4.
Es probable que estos problemas se corrijan en un futuro, pero ningún cambio es requerido en esta librería.