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 PS | Cambio |
|---|---|
| 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.