¡Hola @gonzaloshop y @monicaonline!
@monicaonline tiene razón, intentar hacer esto desde el OrderConfirmationController es un poco jugar a la lotería. Aunque sea un override en PHP, sigue siendo una petición que se dispara en el momento en que el navegador carga esa página. Si el usuario sale antes o hay problemas de red, el evento puede perderse. Para un seguimiento verdaderamente server-side y desacoplado del navegador, necesitas enviar el evento después de que el pedido esté completamente validado y guardado en la base de datos, independientemente de si el cliente ve la página de confirmación.
El mejor lugar para esto en PrestaShop 1.7.2.3 es utilizando el hookActionOrderStatusPostUpdate. Este hook se dispara cada vez que el estado de un pedido se actualiza, y te da acceso completo al objeto Order y al nuevo OrderState. Así puedes asegurarte de que solo envías la compra cuando el pedido ha sido pagado (por ejemplo, PS_OS_PAYMENT).
Aquí tienes un ejemplo de cómo podrías implementarlo en un módulo propio para manejar el Measurement Protocol. Es mucho más fiable:
// En tu módulo personalizado (ej. myga4mpmodule/myga4mpmodule.php)
class MyGa4MpModule extends Module
{
public function install()
{
return parent::install() && $this->registerHook('actionOrderStatusPostUpdate');
}
public function hookActionOrderStatusPostUpdate($params)
{
/** @var Order $order */
De esta forma, garantizas que el evento se envía desde tu servidor tan pronto como el pedido se confirma, sin depender de la interacción del usuario con la página de confirmación. Para una gestión más sencilla y para no tener que mantener este código manualmente con cada actualización de PrestaShop, te sugiero considerar un módulo de analítica GA4 para e-commerce que ya integre esta lógica del Measurement Protocol y el Consent Mode v2 de forma profesional.