ACTION FO+BO Desde 1.5

actionPaymentConfirmation

~3 min de lectura

#Descripcion

Se ejecuta cuando el pago de un pedido es confirmado. A diferencia de `actionValidateOrder` que se dispara al crear el pedido, este hook se ejecuta especificamente cuando el estado del pago cambia a 'pagado'. Util para modulos que necesitan reaccionar solo a la confirmacion del pago (no a la creacion del pedido), como sistemas de facturacion, activacion de licencias digitales, o notificaciones a proveedores.

📍
Disparado por
  • OrderHistoryCore::changeIdOrderState()classes/order/OrderHistory.php

#Parametros

Nombre Tipo Requerido Descripcion
$id_order int Si ID del pedido cuyo pago ha sido confirmado
Retorno
void No se espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
public function install()
{
    return parent::install()
        && $this->registerHook('actionPaymentConfirmation');
}
mymodule.php
php
/**
 * Hook actionPaymentConfirmation — Activar licencia digital
 */
public function hookActionPaymentConfirmation($params)
{
    $id_order = (int)$params['id_order'];
    $order = new Order($id_order);

    if (!Validate::isLoadedObject($order)) {
        return;
    }

    $products = $order->getProducts();
    $customer = new Customer($order->id_customer);

    foreach ($products as $product) {
        // Verificar si es un producto digital
        $isDigital = Db::getInstance()->getValue(
            'SELECT is_digital FROM `' . _DB_PREFIX_ . 'mymodule_digital`
             WHERE id_product = ' . (int)$product['product_id']
        );

        if ($isDigital) {
            // Generar clave de licencia
            $licenseKey = $this->generateLicenseKey();

            Db::getInstance()->insert('mymodule_licenses', [
                'id_order'    => $id_order,
                'id_customer' => (int)$order->id_customer,
                'id_product'  => (int)$product['product_id'],
                'license_key' => pSQL($licenseKey),
                'active'      => 1,
                'date_add'    => date('Y-m-d H:i:s'),
            ]);

            // Enviar email con la licencia
            Mail::Send(
                (int)$order->id_lang,
                'license_key',
                'Tu licencia digital - Pedido ' . $order->reference,
                ['license_key' => $licenseKey, 'product_name' => $product['product_name']],
                $customer->email,
                $customer->firstname . ' ' . $customer->lastname,
                null, null, null, null,
                _PS_MODULE_DIR_ . $this->name . '/mails/'
            );
        }
    }
}

#Notas y gotchas

  • ⚠️ Este hook se dispara cuando el estado del pedido cambia a un estado marcado como 'pagado' (con `paid = 1` en `ps_order_state`).
  • ⚠️ No se ejecuta al crear el pedido si el estado inicial ya es 'pagado' — para eso usa `actionValidateOrder`.
  • ⚠️ Si cambias manualmente el estado a 'pagado' desde el admin, este hook tambien se ejecuta.
  • ⚠️ Cuidado: si un pedido pasa por varios estados 'pagados', el hook puede ejecutarse multiples veces.
  • ⚠️ Para saber el estado anterior, consulta `OrderHistory::getLastOrderState($id_order)` antes del cambio.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido para confirmar pagos
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.