Me he encontrado con un error en Magento 2 que dice «Invalid Customer address id xxxx» aleatoriamente en el checkout de mi sitio web. En Producción, este error provoca que el checkout se quede en blanco.
Investigando un poco, me di cuenta que el error es provocado por el customer quote, que está activo y no tiene ninguna entrada en la tabla quote address. ¿Cómo podemos arreglar esto?
En los logs de Magento aparece el siguiente error:
Error log: [2022-07-08 10:33:00] main.CRITICAL: Invalid customer-address id 434232 {"exception":"[object] (Magento\Framework\Exception\NoSuchEntityException(code: 0): Invalid customer-address id 6 at /home/sites/mage.devenapuros.com/public_html/vendor/magento/module-quote/Model/QuoteAddressValidator.php:79)"} []
Conseguí solucionar el problema «parcheando» la función nativa de Magento 2, validateForCart, en el fichero: vendor/magento/module-quote/Model/QuoteAddressValidator.php.
Hay que sustituir:
public function validateForCart(CartInterface $cart, AddressInterface $address): void {
$this->doValidate($address, $cart->getCustomerIsGuest() ? null : $cart->getCustomer()->getId());
}
por este código:
public function validateForCart(CartInterface $cart, AddressInterface $address): void {
$this->doValidate($address, $cart->getCustomer()->getId() ?: null);
}
Por supuesto, no podemos modificar directamente la carpeta vendor, por lo que debemos aplicar el cambio mediante un patch o creando un módulo propio que sobreescriba esta función.