Bonjour @vincentadmin,
Votre observation est tout à fait juste. Dans PrestaShop 1.7.2.1, l'utilisation directe de header() dans un contrôleur frontal pour gérer une réponse JSON n'est pas la méthode la plus recommandée. Cela peut effectivement contourner certaines protections ou en-têtes déjà définis par PrestaShop, et potentiellement créer des incohérences ou des failles de sécurité (notamment pour la gestion des tokens CSRF si non gérés ailleurs).
Pour une meilleure intégration et pour permettre à PrestaShop de gérer le cycle de vie de la réponse, je vous suggère de retirer les appels header() et de vous contenter de retourner directement votre JSON, en vous assurant que le script se termine immédiatement après pour éviter tout output indésiré. Voici comment vous pourriez modifier votre extrait :
function initContent()
{
parent::initContent();
// Suppression des appels header() directs
// header('Content-Type: application/json; charset=utf-8');
// header('Cache-Control: no-store');
$token = (string) Tools::getValue('token');
$expected = (string) Configuration::get(PscConfig::CRON_TOKEN);
if ($expected === '' || !hash_equals($expected, $token)) {
die(json_encode(['status' => 'error', 'message' => 'Invalid token']));
En supprimant les header() explicites, vous laissez PrestaShop gérer les en-têtes par défaut ou via d'autres mécanismes. Pour une gestion plus robuste et maintenable de ce type de fonctionnalité (et notamment pour les questions de performance du cache, ce que votre module vise), un module dédié comme Presta Cache pages offre des solutions plus intégrées et évitent les modifications directes dans le code des modules tiers, qui pourraient être écrasées lors de mises à jour.