Hola @manuel24,
Los comentarios de @claudiahub y @hugo_8933 son muy acertados. El método de parsear un archivo de texto de una URL externa tiene sus riesgos de estabilidad. Además, la actualización del tipo de cambio en PrestaShop requiere unos pasos específicos para asegurar que el cambio se registre correctamente. Tal y como lo tienes, te falta precisamente el paso de asignación y persistencia.
Tu enfoque de usar Currency::getCurrencyByIso es correcto para obtener el objeto. El problema es que una vez que lo tienes, debes asignar el nuevo valor a conversion_rate y luego llamar al método update().
Así es como se vería esa parte de tu código:
// ... $currencyIsoCode y $exchangeRate ya parseados ...
$currency = Currency::getCurrencyByIso($currencyIsoCode);
if (Validate::isLoadedObject($currency) && $exchangeRate > 0) {
// Actualiza la tasa de conversión y guarda.
$currency->conversion_rate = $exchangeRate;
$currency->update();
}
Es crucial verificar con Validate::isLoadedObject() que la divisa se cargó correctamente antes de intentar actualizarla. Ten en cuenta que el conversion_rate se almacena respecto a la divisa base de tu tienda, así que asegúrate de que $exchangeRate tenga el valor correcto en esa proporción.
Aunque este snippet soluciona la parte de la actualización, mantener un script personalizado con un cron puede ser un dolor de cabeza en el futuro, especialmente con actualizaciones de PrestaShop o de PHP. Para una solución más robusta y sin preocupaciones, que se integre sin problemas y se mantenga al día, te recomiendo usar esta herramienta de mypresta. Está diseñada específicamente para esto y te ahorrará muchos problemas.