ACTION FO+BO Desde 1.5

actionValidateOrder

~3 min de lectura

#Descripcion

Se ejecuta cuando un pedido es completamente validado, es decir, despues de que el modulo de pago llame a `validateOrder()`. Es el hook mas importante del ciclo de vida de un pedido. Se dispara una sola vez por pedido, justo cuando el dinero es confirmado y el pedido queda registrado en la base de datos.

📍
Disparado por
  • PaymentModule::validateOrder()classes/PaymentModule.php

#Parametros

Nombre Tipo Requerido Descripcion
$cart Cart Si Objeto Cart que origino el pedido
$order Order Si Objeto Order recien creado
$customer Customer Si Cliente que realizo el pedido
$currency Currency Si Moneda del pedido
$orderStatus OrderState Si Estado inicial del pedido
$id_order int Si ID del pedido creado
$extraVars array No Variables extra del modulo de pago
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
<?php
// En el metodo install() de tu modulo:
public function install()
{
    return parent::install()
        && $this->registerHook('actionValidateOrder');
}
mymodule.php
php
<?php
/**
 * Hook actionValidateOrder
 * Se ejecuta cuando el pedido es confirmado
 */
public function hookActionValidateOrder(array $params)
{
    /** @var Order $order */
    $order    = $params['order'];
    /** @var Cart $cart */
    $cart     = $params['cart'];
    /** @var Customer $customer */
    $customer = $params['customer'];
    /** @var Currency $currency */
    $currency = $params['currency'];

    // Ejemplo: Enviar notificacion a sistema externo
    $data = [
        'order_id'    => $order->id,
        'reference'   => $order->reference,
        'total'       => $order->total_paid,
        'currency'    => $currency->iso_code,
        'customer'    => $customer->email,
        'date'        => date('Y-m-d H:i:s'),
    ];

    // Registrar en la BD del modulo
    Db::getInstance()->insert('my_order_export', [
        'id_order'   => (int)$order->id,
        'data'       => pSQL(json_encode($data)),
        'created_at' => date('Y-m-d H:i:s'),
    ]);

    // Enviar webhook
    // $this->sendWebhook($data);
}

#Notas y gotchas

  • ⚠️ Este hook se ejecuta **una sola vez** por pedido, cuando el pago es confirmado.
  • ⚠️ El parametro `$params['order']` ya tiene `id > 0` — el pedido ya esta en la BD.
  • ⚠️ Si necesitas ejecutar logica despues de que el estado del pedido sea asignado, usa `actionOrderStatusUpdate`.
  • ⚠️ Evita operaciones pesadas o peticiones HTTP sincronas en este hook — pueden bloquear al cliente en la pagina de confirmacion.
  • ⚠️ El carrito (`$params['cart']`) ya NO esta activo en este punto — ha sido 'consumido' para crear el pedido.
  • ⚠️ Para crear facturas o documentos PDF despues del pedido, usa `actionSetInvoice` en su lugar.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido con los parametros basicos
1.6 Añadido el parametro `extraVars`
1.7 Sin cambios. Compatible con PS 1.7, 8.x y 9.x
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.