Hola @teresa_dev51, entiendo tu frustración con este tipo de errores de token, son bastante comunes y sutiles en PrestaShop 1.7.x, especialmente en entornos con configuraciones PHP más antiguas. El problema que describes, donde !Tools::getToken(false) es true a pesar de que los tokens 'coinciden', suele deberse a que Tools::getToken(false) no está logrando generar un token válido en la sesión en el momento de la llamada AJAX (por ejemplo, devuelve false o un valor vacío), lo que hace que la primera parte de tu condición se cumpla y el sistema interprete que hay un token inválido.
Para solucionarlo de una forma más robusta, te recomiendo reemplazar Tools::getToken(false) por Context::getContext()->getSecurityToken(), que es más fiable para obtener el token de seguridad de la sesión, independientemente del estado del usuario (invitado o logueado). Además, asegúrate de que el token recibido realmente no esté vacío antes de la comparación. Aquí te dejo el fragmento de código modificado para paydisorfee/controllers/front/ajax.php:
function postProcess()
{
header('Content-Type: application/json; charset=utf-8');
try {
$sessionToken = Context::getContext()->getSecurityToken();
if (empty(Tools::getValue('token')) || Tools::getValue('token') !== $sessionToken) {
$this->respondJson(['success' => false, 'error' => 'invalid_token']);
}
if (!((int) Configuration::get('PAYDISORFEE_ENABLED'))) {
Explicación de los cambios:
$sessionToken = Context::getContext()->getSecurityToken();: Almacenamos el token de seguridad de la sesión en una variable. getSecurityToken() es un método más consistente en PrestaShop 1.7.x para obtener el token de sesión.
empty(Tools::getValue('token')): He añadido una verificación explícita para asegurar que el token recibido desde el frontend (Tools::getValue('token')) no esté vacío. Si no se envía ningún token, se considera inválido.
Tools::getValue('token') !== $sessionToken: Comparamos el token recibido directamente con el token de sesión obtenido de getSecurityToken(). Esto evita la doble llamada a Tools::getToken(false) y la problemática evaluación de !Tools::getToken(false) si este devuelve false inesperadamente.
Con esto, el sistema validará el token de forma más efectiva. Pruébalo y cuéntanos.