Hola @nuria_tienda, entiendo perfectamente el desafío. El problema principal al actualizar las tasas de cambio de manera programática en PrestaShop 8.2.8 es doble. Primero, la validación del objeto Currency es bastante estricta, y si el valor conversion_rate no se ajusta a lo esperado (por ejemplo, si la API devuelve un string que no se convierte bien a float, o si hay problemas de precisión), el update() fallará silenciosamente o con un error genérico.
Segundo, como mencionaba @anadigital, el contexto es clave. Para asegurar una persistencia correcta, a veces es mejor usar el método updateConversionRate() si tu versión lo tiene, o asegurarte de que la actualización se realiza con el contexto adecuado. También, la forma de obtener la tasa de la API debe ser robusta.
Aquí te propongo una versión mejorada de tu función que utiliza curl para una consulta más fiable y gestiona mejor la actualización del objeto Currency:
class SNBCurrencyUpdater extends ObjectModel
{
public static function updateSNBRates()
{
// URL de ejemplo para la API del SNB (ajusta a la real)
$api_url = 'https://api.snb.ch/latest/exchange/CHF/latest?format=json'; // Ejemplo de URL más estructurada
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
Este snippet usa curl para una conexión más robusta y añade un log si la actualización falla, lo cual es útil para depurar. Sin embargo, modificar el core o crear overrides personalizados para algo tan crítico como las tasas de cambio puede ser problemático con futuras actualizaciones de PrestaShop. Para una solución más mantenible y con soporte, especialmente si necesitas gestionar múltiples divisas y fuentes, te sugiero considerar un módulo dedicado. Puedes encontrar una herramienta específica para automatizar banco nacional suizo tipos en la tienda que gestiona estas actualizaciones de forma profesional y te ahorra quebraderos de cabeza.